无法在 xcode 中生成 iOS 应用程序归档文件

我在从应用程序生成 iOS 应用程序归档时遇到了问题。应用程序编译得很好,甚至可以在模拟器中工作。现在我想做一些特别的测试,但不能生成 iOS 应用程序档案。当我单击 Product-> Archive 时,它会生成一个通用的 xcode 存档。有人能帮帮我吗。我应该提到的是,我已经为这个应用程序生成了一个 iOS 应用程序存档。由于某种原因,它刚刚停止生成 iOS 存档。非常感谢。

73190 次浏览

创建档案后,在 Xcode 的组织者,选择您的存档项目文件,并选择 Distribute

这将打开另一个允许您使用 Save for Enterprise or Ad-Hoc Deployment的窗口。

这是您想要的选项,在选择 Next 后,您可以选择要使用的分布概要文件,后面跟着您想要的 Location。保存到。

确保你选择了 Save for Enterprise or Ad-Hoc Deployment选项,而 没有选择了 Export as Xcode Archive选项:

enter image description here

如果您已经添加了一个框架/库,那么就会发生这种情况... ... 您需要编辑该库的 Target-> Build Settings,并将“ Skip Install”设置设置为“ Yes”。当您重新归档时,XCode 应该再次开始生成“ iOS 应用程序归档”,而不是“通用的 XCode 归档”。

除了 跳过安装是的之外,如果你在你的应用程序项目中打开了另一个库/框架项目,你必须在 建造阶段/复制标题中将标头(如果有的话)从 公众人士移动到 项目

build phase of your lib/framwork target

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

检查构建设置:

  1. 跳过安装是否为主要项目目标
  2. 对于框架(子项目)目标,跳过安装是 YES
  3. 在子项目的构建阶段中,复制头需要位于项目中,而不是公共 (如果构建静态库则不适用)
  4. Deployment 下的 InstallationDirectory 是有效的(例如/应用程序)

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

我做了以下的事情来让它为我工作:

  1. 我有一个320的静态库,我使用 Cocoapods来包含主项目中的文件
  2. 跟随所有其他子项目/静态库的跳过安装,并如上所述将复制头从 public 切换到 project
  3. 最重要的是: 在项目使用的每个库中,转到 构建阶段-> 复制文件,并确保 目的地Absolute path更改为 products directory。注意: 请参阅下面的提示,以缩小搜索范围,找到导致此错误的库。

就是这样!

提示: 了解导致您的归档文件创建归档文件而不是 ipa 的违规文件:

  1. 选择归档文件并单击“分发”按钮。
  2. 选择“保存生成的产品”选项。
  3. 点击下一步并保存。
  4. 浏览 Finder 中创建的目录。
  5. “ library”子目录将标识需要将跳过安装设置为 Yes 的库。
  6. 在某些情况下,usr/local/include会识别需要从 Public 移动到 Project 的元凶头文件,或者需要从绝对路径更改到 products 目录的文件(甚至是忘记将跳过安装设置为 yes 标志的文件)。但是该目录(即 usr/local/include)根据子库目录结构的不同而不同。在很多情况下。.您将看到 所有的文件下列出的 复制文件在步骤3以上在这里列出。如果你在这里找到了它们,那么你就对问题的起因有了一个明确的答案。

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

enter image description here

因此,我可以告诉它与 加密Ssl库. . 搜索它们有关:

enter image description here

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

我有个问题。在我的案例中,这是由于将 Mac 应用程序目标作为 iOS 应用程序的依赖关系造成的。

之所以设置成这样,是因为 Mac 应用程序是用来为 iOS 应用程序生成一些数据的工具,这些数据随后被包含在捆绑包中。

在构建 iOS 应用程序本身之前,我必须移除这种依赖关系并单独构建这个工具。

尽管我使用的是 Xcode5,对它进行排序的是编辑 Build Scheme ——尝试上面所有适用的建议对我的情况都没有帮助。

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

我取消了应用程序的所有栏目,只留下应用程序免费的栏目检查,并点击确定。下次我选择 Product > Archive 时,我得到的是免费应用程序,而不是通用存档。:)

除了 Alex L 的回答。

第三点。将“构建设置”-> “公用头文件夹路径”更改为“包含/xxx”也可以工作。

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

  1. 转到“生成设置”并添加

    YourAppName/Resources/dist.plist 到 < strong > 代码签名权限

  2. Cmd + B,选择 IOS 设备真正的设备作为构建目标

  3. 完成后-> 滚动到“ Products”文件夹,右键单击 yourAppName.app

  4. 选择“查找中显示”

  5. 创建名为 有效载荷(大写“ P”)的文件夹

  6. yourAppName 复制到负载文件夹中

  7. 从 Payload 文件夹创建一个 zip

  8. 将压缩包重命名为 < strong > yourAppName.ipa

搞定

为了彻底起见,我把我的解决方案贴出来了。

在 Xcode 5.1.1(5B1008)中构建一个 iOS 项目的存档时,我遇到了完全相同的问题。上面的建议都没有解决这个问题,而且大多数都是不相关的(我没有添加任何框架,在我的构建阶段的复制头部分也没有任何公共条目)。

对我来说,解决这个问题只需要关闭我的项目,删除我之前创建的所有存档,进入首选项 > 账户,删除我的开发者账户,退出 Xcode,重新启动,重新添加我的开发者账户,再次启动存档过程。这立刻解决了我的问题。

还有一个解决办法,既然上述方法对我都不管用..。

User Header Search Paths(我认为 Header Search Paths也会同样优雅地工作)改为 "$(BUILT_PRODUCTS_DIR)/BlocksKit"

背景资料 :

在 BlockKit 中,开发人员在主项目中对头部的结构与部署时的结构不同。因此,您不能引用项目中的头文件,必须引用复制到生成目录中的头文件。

我在(Xcode 5)中有两个目标,当我编辑方案时,在方案编辑器的左窗格中,你会看到来自 BUILD 窗格的[ BUILD,RUN,TEST,PROFILE XXX.APP,ANALYZE,ARCHIVE ] ,你会看到你的项目目标列在一个列表中。在最右端,您将看到 ARCHIVE 选择,确保只选择一个目标进行存档。

我在我的项目中选择了2个目标,我只在产品中检查我想要的目标,并且它起作用了!

我通过 XCode 中的 单独打开应用程序项目解决了这个错误,即 没有打开工作区包含了应用程序和其他项目/库/框架。

我有两个独立的项目,一个框架或共享库和一个 iOS 应用程序,我必须打开两个不同的 XCode 窗口,每个窗口都直接打开 . xcodeproj文件而不是通用的 . xcworkspace,以便准备构建每个窗口。

作为一个很好的副作用,XCode 不再在我完成 干净之后重新构建每个项目的每个目标,从而缩短了构建时间。

背景: 我正在创建一个开源 SDK 和一个演示 iOS 应用程序。我在一个单独的工作空间中同时打开了它们。 在 SDK 目标上将 跳过安装设置为 是的将阻止任何人创建归档文件,因为归档文件将是空的,所以这不是一个选项。使用 工程项目而不是 公众人士头文件会导致存档丢失应该分发的头文件,因此这也不是一个选项。

因为那是因为我在一个工作区工作。 该项目确实存档,但将不会显示在组织者窗口。 我关闭了工作区,自己打开了这个项目。 档案已经在组织者那里打开了... 希望能有所帮助。

在我的例子中,我有一个自定义脚本,它将一些临时文件复制到:

${TARGET_BUILD_DIR}/myTempDir

这意味着,在调查档案馆检查其内容后,我发现就在。应用程序文件一个 myTempDir 文件夹。一旦我修改脚本,以保存其他地方的东西被排序。

尝试在 Framework 项目的公用头文件夹路径中设置 $(PROJECT _ NAME)头文件。您必须构建 Library Target 的设置,然后将 Public Header 文件夹路径编辑为 $(PROJECT _ NAME) Header。

在我的场景中,只有在我开始在我的 Objective-C 项目中包含 Swift 代码之后,我才得到了错误的“ Generic Archive”。在对 Xcode 吐出的归档文件进行了大量的故障排除和检查之后,我注意到 SwiftSupport文件夹(包含 Swift 运行时所需的 dylibs)在我的归档文件中的位置不同于一个普通的全新 Swift 项目应用程序归档文件。

我找到了 Installation Directory构建设置,并注意到它被设置为一个自定义路径在我的项目。我只是删除了它(将它设置为它的通用值 /Applications) ,下一个 Build-> Archive 按预期工作,并给了我一个适当的 iOS 应用程序存档。

TL; DR: 在应用程序中包含 Swift 代码时,确保将 Installation Directory构建设置设置为其默认值 /Applications,特别是当您开始使用可能具有一些意想不到的遗留构建设置的旧项目文件时。

如果以上任何一个答案都不起作用,你的问题可能是与 cocoaPods。最新的更新 0.38.1搞砸了我的事情,但后来我降级到 0.37.1和事情恢复正常。使用 Xcode 6.3.1

稍后编辑: 更新到 0.38.2也将修复此问题。更多关于导致这个问题的信息请点击这里: < a href = “ https://github.com/CocoaPods/cocoaPods/issues/3889”rel = “ nofollow”> Cocoapods 0.38.1未能创建有效的存档

如果以上这些都没有帮助到你... ... 在很长一段时间之后... ..。

我删除了 Bundle Version 的 Info.plist 中的值,因为只使用 Bundle Version Short 1.0我就已经很满意了。 不好。别这样。

* 注意,我实际上是通过在右边的 UI 中编辑它来完成的,没有意识到它会在 Info.plist 文件中放入一个空键。我认为这是无效的。我的捆绑包显示为其他项目,而存档和没有图标,我不能上传到任何地方。

这归结为 Info.plist 中的无效值。如果它不是一个有效的归档文件,那么尝试解压缩一个旧的归档文件并放入/覆盖当前的归档文件,看看在重新构建归档文件时是否修复了它。

如果您正在使用 CocoaPods 以及 WatchKit 或 Today 扩展,那么在 CocoaPods 回购中有一个打开的 问题,解释您可能遇到的问题。

对我来说,解决方案是从 Build Phases下的 WatchKit 扩展和 Today 扩展目标中移除 Copy Pod Resources阶段。这个项目编译和归档后,我这样做的预期。

希望这能帮到某人,这让我困惑了一整天!

如果导出存档文件,打开它并查看 产品中的 /urs/local/include,请尝试 这个建议:

在每个豆荚中,在 Packaging下,Private Headers Folder PathPublic Headers Folder Path被设置为 /usr/local/include。如果我清除了它们,我就得到了一个有效的档案。

enter image description here

在我升级我的本机应用程序反应后,我的工作 0.11.0,Xcode 7和 CocoaPods 0.39.0.beta.4

把这个留在这里是为了拯救其他人。

我发现我还需要从工作区中的静态库目标中删除相同的 CopyPod 资源构建阶段。

升级到 iOS9和 Xcode 7后,我遇到了这个问题。 Josh H 的解决方案对我很有效:

在每个豆荚,下包装,私人头文件夹路径和公共 Header 文件夹路径设置为/usr/local/include 我得到了一份有效的档案。

我还为我的 Podfile 制作了一个后期安装脚本来自动完成这项工作!

    post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = [""];
config.build_settings['PRIVATE_HEADERS_FOLDER_PATH'] = [""];
end
end
end

只需将它添加到您的 Podfile 底部并运行 pod install

如果将 Xcode 7Cocoapods v. 0.38.2一起使用,请尝试从您今天的扩展目标中删除 copy pod resources

enter image description here

我的工作空间中有多个项目(GTL、 Pods 和我的主要项目) ,这些项目对我很有效:

选择项目,将有2种类型,有 工程项目目标

对于像 GTLPODS这样不是你主要的项目:

项目:

Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

目标:

Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

对于主项目(通常与您的产品名称同名) :

项目:

Skip Install = NO
Installation Directory = /Applications

目标:

Skip Install = NO
Installation Directory = /Applications

检查每个项目和目标上的 ios 部署目标,以确保它们都是相同的。

如果您只有一个项目,也许这个解决方案将是有用的。 当我复制目标时,出现了这个问题。因此,我建立了两个并行的目标。这就是问题的根源。构建了通用 IOS 归档。

要把平行建立关闭去

  • 管理计划,
  • 编辑计划,
  • 建造,
  • 除掉另一个目标。

我在 iOS 应用程序的项目中添加了一个 OS X 命令行工具后遇到了这个问题,而且命令行工具的目标默认设置为“否”。由于显然不能将 OSX 二进制文件安装到 iOS 设备,所以默认情况下归档为一般的 Xcode 归档。将此目标的跳过安装设置为 YES 修复了问题。

在我的例子中,从目标名称中删除下划线修复了它。

不确定是实际的下划线还是名称更改本身起了作用。

在尝试了所有方法之后:

  • 干净,档案室
  • 删除衍生数据,存档
  • 重新启动 Xcode (我使用的是 XCode7) ,存档
  • 以上的组合。

然后我注意到我的引导分区“空闲磁盘空间不足”... 大约1GB 左右。 我重新启动,然后得到大约18 GB 的免费。

然后打开 Xcode 和 project,执行 Archive... 令人惊讶的是(在尝试构建 Archive 一个小时之后)我最终得到了一个非泛型 Archive。

不知道是因为免费磁盘的问题修复了它,还是因为修复它的 macOS 重启了,但它对我很有用。

如果你有的话。项目 > 目标 > 构建阶段 > 目标依赖关系中的 xcodeproj 文件从那里删除它,然后构建您的 IPA。对我有用。干杯

你可以在这里得到答案: Xcode 正在创建通用的 xcode 归档文件,而不是 iOS 应用程序归档文件

我遇到了类似的问题,但是在一个没有吊舱的 WatchKit 应用程序中。对于 iOS 应用程序,Skip Install 被正确设置为 NO,但是对于 WatchKit 应用程序被错误地设置为 NO。

将 WatchKit 应用程序的 Skip Install 改为 YES (但是对于 iOS 应用程序保持 NO)修复了这个问题,并且 Xcode 正确地生成了一个 iOS 应用程序存档,而不是一般的 Xcode 存档。

在我的例子中,其他30多个答案都不起作用。我们将档案的位置(首选项-> 位置)设置为指向服务器的自定义路径(Windows Server 2008,如果这有什么不同的话)。

一旦我将位置设置回本地机器中的默认位置,它就会生成一个常规的 iOS 应用程序 Archive。我不知道这为什么有效,但我希望它也能帮助其他人。

现在我们商店要搬家了。手动将 xcarchive 文件存储到服务器,但至少不会出现通用归档的问题。

在我的例子中,我有两个目标(Target1和 Target2) ,第一个目标可以归档到“ iOS 应用程序”,但第二个目标只能归档到“其他项目”。因此,对我来说,解决这个问题的最快方法是用 Target1的副本替换 Target2,步骤如下:
1. 将 Target2重命名为 Target2 _ old
2. 复制 Target1并将其重命名为 Target2。
3.更改链接到正确的。Plist 文件(来自旧的目标) ,用于新的 Target2,并在类中检查“ Target Membership”。
4. 打开“ Manage Scheme...”并删除 Target2 _ old 的方案,然后为新的 Target2添加新方案
5. 选择这个新方案,然后 Product-> Archive

在我的情况下,我在复制文件中有一些文件。我只是删除了它们,然后一切都运行良好,我获得了 iOS 应用程序档案。 转到构建阶段-> 复制文件并删除文件。 希望这能解决你的问题。 :)

这种情况发生在我的一个应用程序上,在这个应用程序中,版本是用一个未定义的变量 $(APP _ PRODUCT _ VERION)定义的

我定义了版本,我可以生成一个 iOS 应用程序。

这是为像我这样的可怜人准备的,这些解决方案对他们都不起作用,即使是一个新的单视图应用程序,构建时没有任何错误,但是无法归档。

转到存档位置路径(可在 Xcode-> 首选项-> 位置-> 存档路径) ,删除有问题的日子的文件夹!

该死的苹果!

对我来说,目标-> myApp-> 签名和能力-> 签名证书是 苹果开发代替 iOS 发行