【问题标题】:Cannot generate iOS App archive in xcode无法在 xcode 中生成 iOS App 存档
【发布时间】:2012-05-29 17:19:44
【问题描述】:

我在从应用程序生成 iOS 应用程序存档时遇到问题。该应用程序编译得很好,甚至可以在模拟器中运行。现在我想做一些临时测试并且无法生成 iOS App Archive。当我单击 Product -> Archive 时,它​​会生成一个通用的 xcode 存档。谁能帮我。我应该提一下,我已经生成了这个应用程序的 iOS App Archive。由于某种原因,它刚刚停止生成 iOS 存档。非常感谢。

【问题讨论】:

  • 尽管问题是关于从 xcode 生成存档,但我使用xcodebuild 遇到了这个问题。解决方案是指定目的地:xcodebuild -destination generic/platform=iOS
  • 感谢@db42,成功了!
  • 您能否详细说明一下解决方案-您在哪里进行更改?
  • 如果您在 Project>Targets>Build Phases>target dependencies 中有任何 .xcodeproj 文件,请将其从那里删除,然后构建您的 ipa。这个对我有用。干杯

标签: iphone ios xcode macos


【解决方案1】:

另一个可能的原因是在“目标依赖项”中引用了不同平台的项目。在我的特殊情况下,我正在开发一个共享 OSX 和 iOS 代码的项目。在其中一个 iOS 目标中,我不小心添加了一个 OSX 目标作为依赖项。

【讨论】:

    【解决方案2】:

    除了 Alex L 的回答。

    第 3 点。将“构建设置”->“公共标题文件夹路径”更改为“包含/xxx”也可以。

    【讨论】:

    • 这比上面的#3 更正确。如果您正在构建静态库,您的标题需要公开
    【解决方案3】:

    虽然我使用的是 Xcode5,并且为我排序的是编辑构建方案 - 尝试所有适用的上述建议对我的情况没有帮助。

    我有两个目标,比如“App”和“App FREE”。当我尝试存档免费版本时,我的通用存档问题发生了,我在应用程序的“正常”版本之后添加了该版本。在我的例子中,当我在工具栏中选择它的 Scheme 并选择 Edit Scheme ... 我看到 Build 部分有两个目标,即 App 和 App FREE。

    我取消选中 App 的所有列,只选中 App FREE 的列,然后单击“确定”。下次我选择产品 > 存档时,我的应用程序是免费的,而不是通用存档。 :)

    【讨论】:

      【解决方案4】:

      我做了以下工作以使其适合我:

      1. 我有一个three20静态库,我使用cocoapods将文件包含在主项目中
      2. 按照上述所有其他子项目/静态库的跳过安装并将复制标头从公共切换到项目
      3. 最重要的是:在您的项目使用的每个库中,转到 build phase -> Copy Files 并确保 destinationAbsolute path 更改为 @ 987654325@。注意:请参阅下面的提示以缩小搜索范围以找到导致此错误的库。

      就是这样!

      提示:要了解导致存档创建存档文件而不是 ipa 的违规文件,请执行以下操作:

      1. 选择存档并单击分发按钮。
      2. 选择“保存已构建产品”选项。
      3. 点击下一步并保存。
      4. 在 Finder 中浏览创建的目录。
      5. “库”子目录将标识您需要将“跳过安装”设置为“是”的库。
      6. 在某些情况下,usr/local/include 会识别您需要从 Public 移动到 Project 的罪魁祸首文件,或者您必须从绝对路径更改到产品目录的文件(甚至是您忘记将跳过安装设置为的文件)是的标志)。但该目录(即 usr/local/include)因您的子库目录结构而异。在许多情况下..您会看到所有在上述步骤 3 中的复制文件下列出的文件。如果您在这里找到它们,那么您对问题的原因有了明确的答案。

      更新到提示: 让生活更简单.. 上面 hint 中第 4 步下出现的任何文件.. 只需在 xcode 的全局搜索中搜索即可..你应该立即得到你想要的结果..例如,这是我的文件夹的内容(按照上面提示中的步骤):

      所以我可以说它与 cryptossl 库有关。搜索它们:

      让我意识到我忘记将跳过安装设置为是。

      【讨论】:

      • 很好的提示!我已将一些框架标题更改为“私有”;出于某种原因,这导致它们被复制到./usr/local/include
      • 能够帮助@BenMosher 总是很高兴:)
      • 我得到的最佳答案。感谢您的提示,挽救了我的一天。 !
      • 绝对是我正在寻找的答案——保存构建产品指出了问题的确切原因。
      • 这个关于“保存已建产品”的广泛回答非常有帮助 - @abbood,非常感谢你。希望有一天我能回报你的青睐。
      【解决方案5】:

      我遇到了这个问题。在我的情况下,这是由于将 Mac 应用程序目标保留为 iOS 应用程序的依赖项。

      这样设置的原因是 Mac 应用程序是一个用于为 iOS 应用程序生成一些数据的工具,然后将其包含在捆绑包中。

      在构建 iOS 应用程序本身之前,我必须删除该依赖项并单独构建该工具。

      【讨论】:

      • lippd 等库同时带有 ios 和 osx 目标,我忘了删除 osx 目标... doh
      【解决方案6】:

      就我而言,我不得不将 FMDB 和 BlocksKit 都移到静态库中。以前,它们是作为子项目构建的。请记住,您可以使用 lipo 创建通用库。在构建最终产品时,模拟器代码将被自动剥离。

      【讨论】:

        【解决方案7】:

        这不是正确的解决方案,但是,我能够生成应用存档。我删除了整个项目并重新结帐(我知道,真的很愚蠢,但是经过几个小时的 xcode 拒绝生成应用程序存档后,我会做任何事情)。一旦我设置了正确的代码签名,它就起作用了。所以很可能,xcode 在配置中有一些不匹配。如果有人知道,什么(可能的配置)实际上可以阻止 xcode 生成应用程序存档,我会很高兴听到它。还是谢谢你们。

        【讨论】:

        • 好吧,在我的情况下,“跳过安装”在 xcode 4.4.1 中不可用,至少我无法在我的 xcode 中找到跳过安装
        • 我建议接受 Alex L 的回答,因为您自己说这不是正确的解决方案。
        【解决方案8】:

        除了 Skip InstallYes 之外,如果您在应用项目中打开了另一个 lib/framwork 项目,您必须从 public项目构建阶段 / 复制标题

        【讨论】:

        • 我快要失去希望了,因为 Skip Install to Yes 对我不起作用。将标头复制到 Project 对我有用。谢谢!
        • 为了帮助您定位有问题的 Xcode 子项目,您可以在 Finder 中显示 Generic Xcode Archive 并浏览该包。在 .xcarchive 中,您将在 Products/usr/local/include 中看到错误的标头。
        • 为什么要把一些文件复制到公开的标题上搞砸了?
        • mskw,我猜如果构建的工件包含一个或多个公共标头,它就不能成为“设备可部署”存档(iOS App Archive 从中生成 IPA)。它仍然是一个 Xcode 项目存档。谢谢
        • 该死的,谢谢,这对我有用。我想知道你到底是怎么找到这些解决方案的 :)
        【解决方案9】:

        如果您添加了框架/库,则可能会发生这种情况...您需要编辑该库的目标->构建设置并将“跳过安装”设置设置为“是”。当您重新归档时,XCode 应该再次开始生成“iOS App Archive”而不是“通用 xcode 归档”。

        【讨论】:

        • 但“跳过安装”在 xcode 4.4.1 中不可用,至少我无法在我的 xcode 中找到跳过安装
        • 这同样适用于添加的捆绑包。
        【解决方案10】:

        创建存档后,在 Xcode 的管理器中,选择您的存档项目文件并选择 Distribute

        这会打开另一个窗口,让您可以Save for Enterprise or Ad-Hoc Deployment

        这是您想要的选项,在选择“下一步”后,您可以选择要使用的分发配置文件,然后是您希望将 .ipa 保存到的位置。

        确保您选择Save for Enterprise or Ad-Hoc Deployment 选项并且不是 Export as Xcode Archive 之一:

        【讨论】:

        • 不,它不会,因为它生成一个通用的 XCode 存档,而不是 iOS 应用存档。您只能使用 iOS App Archives 来做到这一点。
        • +1 @skram,这是正确答案。我刚刚编辑了您的答案以包含屏幕截图
        • 这当然是一个答案 - 但它不是问题的正确答案。您不能验证或分发“通用 xcode 存档”,只能是“iOS 应用存档”,并且原始问题指出海报正在生成“通用 xcode 存档”而不是“iOS 应用存档”。
        猜你喜欢
        • 2015-06-29
        • 2021-01-15
        • 2014-09-30
        • 2019-01-29
        • 1970-01-01
        • 2013-12-20
        • 1970-01-01
        相关资源
        最近更新 更多