我从应用程序生成 iOS 应用程序存档时遇到问题。该应用程序编译得很好,甚至可以在模拟器中运行。现在我想做一些临时测试并且无法生成 iOS App Archive。当我单击 Product -> Archive 时,它会生成一个通用的 xcode 存档。谁能帮我。我应该提一下,我已经生成了这个应用程序的 iOS App Archive。由于某种原因,它刚刚停止生成 iOS 存档。非常感谢。
40 回答
检查构建设置:
- 跳过安装对于主要项目目标是否
- 对于框架(子项目)目标,跳过安装是 YES
- 在子项目的 Build Phases 中,Copy Headers 需要在 Project 中,而不是 Public (如果构建静态库则不适用)
- Deployment 下的安装目录有效(例如 /Applications)
如果您添加了框架/库,则可能会发生这种情况......您需要编辑该库的目标->构建设置并将“跳过安装”设置设置为“是”。当您重新归档时,XCode 应该再次开始生成“iOS App Archive”而不是“通用 xcode 归档”。
除了Skip Install到Yes之外,如果您在应用程序项目中打开了另一个 lib/framwork 项目,您必须将标头(如果有)从公共移动到Build Phase / Copy Headers中的项目。
我做了以下工作以使其适合我:
- 我有一个 three20 静态库,我使用cocoapods将文件包含在主项目中
- 遵循所有其他子项目/静态库的跳过安装,并将复制标头从公共切换到项目,如上所述
- 最重要的是:在您的项目使用的每个库中,转到构建阶段 -> 复制文件并确保目标从更改
Absolute path
为products directory
. 注意:请参阅下面的提示以缩小搜索范围以找到导致此错误的库。
就是这样!
提示:要了解导致存档创建存档文件而不是 ipa 的违规文件,请执行以下操作:
- 选择存档并单击分发按钮。
- 选择“保存已构建产品”选项。
- 点击下一步并保存。
- 在 Finder 中浏览创建的目录。
- “libraries”子目录将标识您需要将 Skip Install 设置为 Yes 的库。
- 在某些情况下,
usr/local/include
将识别您需要从 Public 移动到 Project 的罪魁祸首头文件,或者您必须从绝对路径更改为产品目录的文件(甚至是您忘记将跳过安装设置为 yes 标志的文件)。但该目录(即 usr/local/include)因您的子库目录结构而异。在许多情况下.. 您将在此处列出上述步骤 3 中的“复制文件”下列出的所有文件。如果您在这里找到它们,那么您对问题的原因有一个明确的答案。
更新提示:让生活更简单..上面提示中第 4 步下出现的任何文件.. 只需在 xcode 的全局搜索中搜索它.. 你应该立即得到你想要的结果.. 例如,这是我的文件夹的内容(按照上面提示中的步骤):
所以我可以说它与加密和ssl库有关.. 搜索它们:
让我意识到我忘记将跳过安装设置为是。
如果您导出存档,请打开它并/urs/local/include
在产品中查看尝试此建议:
在每个 pod 下
Packaging
,Private Headers Folder Path
和Public Headers Folder Path
设置为/usr/local/include
。如果我清除它们,那么我会得到一个有效的存档。
在将我的 React Native 应用程序升级到0.11.0
Xcode7
和 CocoaPods后为我工作0.39.0.beta.4
。
如果您使用 CocoaPods 以及 WatchKit 或 Today Extension,那么 CocoaPods 存储库中有一个未解决的问题,解释了您的问题可能是什么。
我的解决方案是Copy Pod Resources
从Build Phases
. 一旦我这样做了,项目就会按预期编译和存档。
希望这对某人有所帮助,这让我难过了一整天!
如果上述任何答案都不起作用,则您的问题可能与cocoaPods
. 最新的更新0.38.1
让我搞砸了,但后来我降级了0.37.1
,事情又恢复了正常。使用Xcode 6.3.1
稍后编辑:更新到0.38.2
也将解决此问题。有关导致此问题的原因的更多信息:Cocoapods 0.38.1 failed to create valid Archive
虽然我使用的是 Xcode5 并且为我排序的是编辑构建方案 - 尝试所有适用的上述建议对我的情况没有帮助。
我有两个目标,比如“App”和“App FREE”。当我尝试存档免费版本时,我的通用存档问题发生了,我在应用程序的“正常”版本之后添加了该版本。在我的例子中,当我在工具栏中选择它的方案并选择编辑方案时......我看到构建部分有两个目标,即 App 和 App FREE。
我取消选中 App 的所有列,只选中 App FREE 的列,然后单击 OK。下次我选择产品 > 存档时,我的应用程序是免费的,而不是通用存档。:)
如果您只有一个项目,也许这个解决方案会很有用。当我复制目标时,出现了这个问题。结果,我有两个并行构建的目标。这导致了这个问题。通用 IOS 存档已构建。
要关闭并行构建,请访问
- 管理方案,
- 编辑方案,
- 建造,
- 移除另一个目标。
更新到 iOS 9 和 Xcode 7 后我遇到了这个问题。Josh H 的解决方案对我有用:
在每个 pod 中,在 Packaging 下,Private Headers 文件夹路径和 Public Headers 文件夹路径设置为 /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
我有这个问题。就我而言,这是由于将 Mac 应用程序目标保留为 iOS 应用程序的依赖项所致。
如此设置的原因是 Mac 应用程序是一个用于为 iOS 应用程序生成一些数据的工具,然后将其包含在捆绑包中。
在构建 iOS 应用程序本身之前,我必须删除该依赖项并单独构建该工具。
在我的场景中,只有在我开始在我主要的 Objective-C 项目中包含 Swift 代码之后,我才得到错误的“通用存档”。在对 Xcode 吐出的存档文件进行大量故障排除和检查后,我注意到该SwiftSupport
文件夹(包含 Swift 运行时所需的 dylib)在我的存档中与香草全新的 Swift 项目应用程序存档中的位置不同.
我找到了Installation Directory
构建设置,并注意到它在我的项目中设置为自定义路径。我只是删除了它(将其设置为它的通用值/Applications
),下一个 Build -> Archive 我确实按预期工作,并给了我一个适当的 iOS App Archive。
TL; DR:确保您的Installation Directory
构建设置设置为/Applications
在您的应用程序中包含 Swift 代码时的默认值,特别是如果您从可能有一些意外遗留构建设置的旧项目文件开始。
我的工作区中有多个项目(GTL、Pods 和我的主项目),这对我有用:
选择项目,那里将有 2 种类型,项目和目标。
对于不是您主要喜欢的项目GTL
或PODS
:
项目:
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 部署目标,以确保它们都相同。
把它留在这里是为了从同样的旅程中拯救其他人。
我发现我也需要从我的工作区中的静态库目标中删除相同的 Copy Pod Resources 构建阶段。
除了 Alex L 的回答。
点 3. 将 'Build Settings' -> 'Public Header Folder Path' 更改为 'include/xxx' 也可以。
如果以上都没有帮助你......经过很多时间......
我删除了 Bundle Version 的 Info.plist 中的值,因为我对 Bundle Version Short 1.0 很满意。坏的。不要这样做。
*注意我实际上是通过在右侧的 UI 中编辑它来做到这一点的,没有意识到它会在 Info.plist 文件中放置一个空键。我认为这使它无效。我的捆绑包在存档时显示为其他项目并且没有图标,我无法上传到任何地方。
这归结为 Info.plist 中的无效值。如果它不是有效的存档,请尝试解压缩旧存档并放入/覆盖您当前的存档,并查看它是否在重建存档时修复它。
转到构建设置并添加
yourAppName/Resources/dist.plist到代码签名权利
按cmd + B并选择iOS 设备或真实设备作为构建目标
完成后 -> 滚动到“产品”文件夹并右键单击 yourAppName.app
选择“在 Finder 中显示”
使用 Name Payload(大写“P”)创建一个文件夹
将yourAppName 复制到您的有效负载文件夹中
从您的有效负载文件夹创建一个 zip
将zip重命名为yourAppName.ipa
完毕
在尝试了几乎所有事情之后:
- 清理,存档
- 删除 DerivedData,存档
- 重新启动 Xcode(我使用的是 XCode7),存档
- 以上组合...
然后我注意到我的引导分区“可用磁盘空间不足”......大约 1GB 左右。我重新启动,然后获得了大约 18GB 的空闲空间。
然后打开 Xcode 和项目,执行存档......令人惊讶的是(在尝试构建存档一个小时后)我终于得到了一个非通用存档。
不知道是空闲磁盘问题修复了它还是重新启动了修复它的 macOS,但它对我有用。
如果您在 Project>Targets>Build Phases>target dependencies 中有任何 .xcodeproj 文件,请将其从那里删除,然后构建您的 ipa。这个对我有用。干杯
你可以在这里得到答案:xcode is created generic xcode archive instead of iOS App Archive
就我而言,我不得不将 FMDB 和 BlocksKit 都移到静态库中。以前,它们是作为子项目构建的。请记住,您可以使用 lipo 创建通用库。在构建最终产品时,模拟器代码将被自动剥离。
为了彻底,我发布了我的解决方案。
我在尝试在 Xcode 5.1.1 (5B1008) 中构建 iOS 项目的存档时遇到了完全相同的问题。上述建议都没有解决问题,而且大多数都无关紧要(我没有添加任何框架,并且在我的构建阶段的复制标题部分中没有任何公共条目)。
在我的情况下,解决问题包括简单地关闭我的项目,删除我之前制作的所有存档,转到 Preferences > Accounts,删除我的开发者帐户,退出 Xcode,重新启动,重新添加我的开发者帐户,启动存档过程再次。这立即解决了我的问题。
另一个可能的原因是在“目标依赖项”中引用了不同平台的项目。在我的特殊情况下,我正在开发一个共享 OSX 和 iOS 代码的项目。在其中一个 iOS 目标中,我不小心添加了一个 OSX 目标作为依赖项。
因为那是因为我在工作区工作。该项目确实已存档,但不会显示在管理器窗口中。我关闭了工作区并自行打开了项目。存档已在组织者中打开...希望对您有所帮助。
我通过仅在 XCode 中打开应用程序项目解决了这个错误,即。不打开包含应用程序和其他项目/库/框架的工作区。
有 2 个单独的项目、一个框架或共享库和一个 iOS 应用程序,我必须打开 2 个不同的 XCode 窗口,每个窗口都通过直接打开.xcodeproj文件而不是常见的.xcworkspace来打开,以便预先构建每个。
作为一个很好的副作用,在我执行Clean之后,XCode 不再重建每个项目的每个目标,从而缩短了构建时间。
背景:我正在创建一个开源 SDK 和一个演示 iOS 应用程序。我都在一个工作区中打开过。在 SDK 目标上将Skip install设置为YES会阻止任何人创建存档,因为它会是空的,所以这不是一个选项。使用Project而不是Public头文件会导致存档丢失应该分发的头文件,因此这也不是一个选项。
这在(Xcode 5)中对我有用的方式我有 2 个目标,当我编辑方案时,在方案编辑器的左窗格中,您将看到 [BUILD, RUN, TEST, PROFILE XXX.APP, ANALYZE, ARCHIVE ] 从 BUILD 窗格中,您将看到列表中列出的项目目标。在最右端,您将看到 ARCHIVE 选项,确保只选择一个目标进行归档。
我在我的项目中选择了 2 个目标,我只检查了产品中我想要的目标,它成功了!
另一种解决方案,因为以上所有对我都不起作用......
将User Header Search Paths
(我想Header Search Paths
也可以优雅地工作)更改为"$(BUILT_PRODUCTS_DIR)/BlocksKit"
.
背景:
在 BlockKit 中,开发人员在主项目中对标头的结构与部署结构不同。因此,您不能引用项目中的标头,而必须引用复制到构建目录中的标头。
就我而言,我有一个自定义脚本将一些临时文件复制到:
${TARGET_BUILD_DIR}/myTempDir
这意味着,在调查存档以检查其内容后,我在 .app 文件旁边发现了一个 myTempDir 文件夹。一旦我修改了脚本以保存其他地方,事情就被排序了。
尝试在 Framework projet 的 Public Headers 文件夹路径中设置 $(PROJECT_NAME)Headers。您必须去构建库目标的设置,然后将公共标题文件夹路径编辑为 $(PROJECT_NAME)Headers。
这些解决方案都不适合我。就我而言, Targets->myApp->Signing & Capabilities->Signing Certificate 是Apple Development 而不是 iOS Distribution。
在我的情况下,从目标名称中删除下划线修复了它。
不确定是实际的下划线还是名称更改本身起到了作用。
我遇到了类似的问题,但在没有 pod 的 WatchKit 应用程序中。对于 iOS 应用程序,跳过安装已正确设置为 NO,但对于 WatchKit 应用程序,则错误地设置为 NO。
将 WatchKit 应用程序的 Skip Install 更改为 YES(但对于 iOS 应用程序保持它为 NO)解决了问题,并且 Xcode 正确生成了 iOS App Archive 而不是 Generic Xcode Archive。
就我而言,我在复制文件中有一些文件。我刚刚删除了它们,然后一切正常,我实现了 iOS App Archive。转到 Build Phases->Copy Files 并删除文件。希望这能解决您的问题。:)
它发生在我使用未定义变量 $(APP_PRODUCT_VERSION) 定义版本的应用程序上
我定义了版本,我可以生成一个 iOS 应用程序。
这适用于像我这样的可怜人,这些解决方案都不起作用,即使是新的单一视图应用程序,构建时也没有任何错误但无法存档。
转到存档位置路径(在 Xcode -> 首选项 -> 位置 -> 存档路径中可用)并删除有问题的日子的文件夹!
该死的苹果!
在将 OS X 命令行工具添加到我的 iOS 应用程序项目后,我遇到了这个问题,并且默认情况下,命令行工具的目标将跳过安装设置为 NO。由于您显然无法将 OS X 二进制文件安装到 iOS 设备,因此存档默认为通用 Xcode 存档。将此目标的“跳过安装”设置为“是”解决了该问题。
就我而言,其他 30 多个答案都不起作用。我们将存档的位置(首选项 -> 位置)设置为指向我们服务器的自定义路径(如果有任何区别,则为 Windows Server 2008)。
一旦我将位置设置回本地机器中的默认位置,它就会生成一个常规的 iOS 应用程序存档。我不确定为什么会这样,但我希望它对其他人也有帮助。
现在我们存储必须手动将 .xcarchive 文件移动到服务器进行存储,但至少通用存档没有问题。
就我而言,我有两个目标(Target1 和 Target2),其中第一个可以归档到“iOS 应用程序”,但第二个只能归档到“其他项目”。因此,对我来说,解决此问题的更快方法是通过以下步骤将 Target2 替换为 Target1 的副本:
1. 将 Target2 重命名为 Target2_old
2. 复制 Target1 并将其重命名为 Target2。
3. 将链接更改为新 Target2 的正确 .plist 文件(来自旧目标),并在您的类中检查“目标成员资格”。
4. 打开“管理方案...”并删除 Target2_old 的方案,然后为新的 Target2 添加新方案
5. 选择这个新方案,然后选择产品 -> 存档
这不是正确的解决方案,但是,我能够生成 App 存档。我删除了整个项目并重新结帐(我知道,真的很愚蠢,但是经过几个小时的 xcode 拒绝生成应用程序存档后,我会做任何事情)。一旦我设置了正确的代码签名,它就起作用了。所以很可能,xcode 在配置中有一些不匹配。如果有人知道,什么(可能的配置)实际上可以阻止 xcode 生成应用程序存档,我会很高兴听到它。无论如何,谢谢你们。
创建存档后,在 Xcode 的管理器中,选择您的存档项目文件并选择Distribute
.
这会打开另一个窗口,让您可以Save for Enterprise or Ad-Hoc Deployment
.
这是您想要的选项,在选择“下一步”后,您可以选择要使用的分发配置文件,然后是您希望将 .ipa 保存到的位置。
确保选择Save for Enterprise or Ad-Hoc Deployment
选项而不是选项Export as Xcode Archive
: