178

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

4

40 回答 40

321

检查构建设置:

  1. 跳过安装对于主要项目目标是否
  2. 对于框架(子项目)目标,跳过安装是 YES
  3. 在子项目的 Build Phases 中,Copy Headers 需要在 Project 中,而不是 Public (如果构建静态库则不适用)
  4. Deployment 下的安装目录有效(例如 /Applications)
于 2012-11-29T07:15:57.193 回答
76

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

于 2012-05-23T20:41:57.380 回答
64

除了Skip InstallYes之外,如果您在应用程序项目中打开了另一个 lib/framwork 项目,您必须将标头(如果有)从公共移动到Build Phase / Copy Headers中的项目

lib/framework 目标的构建阶段

于 2012-05-29T02:31:58.853 回答
45

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

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

就是这样!

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

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

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

在此处输入图像描述

所以我可以说它与加密ssl库有关.. 搜索它们:

在此处输入图像描述

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

于 2013-02-27T19:01:18.427 回答
21

如果您导出存档,请打开它并/urs/local/include产品中查看尝试此建议

在每个 pod 下PackagingPrivate Headers Folder PathPublic Headers Folder Path设置为/usr/local/include。如果我清除它们,那么我会得到一个有效的存档。

在此处输入图像描述

在将我的 React Native 应用程序升级到0.11.0Xcode7和 CocoaPods后为我工作0.39.0.beta.4

于 2015-09-19T00:34:15.010 回答
12

如果您使用 CocoaPods 以及 WatchKit 或 Today Extension,那么 CocoaPods 存储库中有一个未解决的问题,解释了您的问题可能是什么。

我的解决方案Copy Pod ResourcesBuild Phases. 一旦我这样做了,项目就会按预期编译和存档。

希望这对某人有所帮助,这让我难过了一整天!

于 2015-09-16T15:03:08.133 回答
10

如果上述任何答案都不起作用,则您的问题可能与cocoaPods. 最新的更新0.38.1让我搞砸了,但后来我降级了0.37.1,事情又恢复了正常。使用Xcode 6.3.1

稍后编辑:更新到0.38.2也将解决此问题。有关导致此问题的原因的更多信息:Cocoapods 0.38.1 failed to create valid Archive

于 2015-07-27T05:07:44.127 回答
7

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

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

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

于 2013-12-17T12:20:09.157 回答
7

如果您只有一个项目,也许这个解决方案会很有用。当我复制目标时,出现了这个问题。结果,我有两个并行构建的目标。这导致了这个问题。通用 IOS 存档已构建。

要关闭并行构建,请访问

  • 管理方案,
  • 编辑方案,
  • 建造,
  • 移除另一个目标。
于 2015-11-19T15:37:03.643 回答
5

更新到 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

于 2015-10-01T14:57:18.327 回答
4

我有这个问题。就我而言,这是由于将 Mac 应用程序目标保留为 iOS 应用程序的依赖项所致。

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

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

于 2013-05-30T00:02:04.667 回答
4

在我的场景中,只有在我开始在我主要的 Objective-C 项目中包含 Swift 代码之后,我才得到错误的“通用存档”。在对 Xcode 吐出的存档文件进行大量故障排除和检查后,我注意到该SwiftSupport文件夹​​(包含 Swift 运行时所需的 dylib)在我的存档中与香草全新的 Swift 项目应用程序存档中的位置不同.

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

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

于 2015-06-18T17:12:35.843 回答
4

我的工作区中有多个项目(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 部署目标,以确保它们都相同。

于 2015-10-29T07:18:12.253 回答
3

把它留在这里是为了从同样的旅程中拯救其他人。

我发现我也需要从我的工作区中的静态库目标中删除相同的 Copy Pod Resources 构建阶段。

于 2015-09-25T11:35:14.453 回答
2

除了 Alex L 的回答。

点 3. 将 'Build Settings' -> 'Public Header Folder Path' 更改为 'include/xxx' 也可以。

于 2014-01-29T13:33:25.157 回答
2

如果以上都没有帮助你......经过很多时间......

我删除了 Bundle Version 的 Info.plist 中的值,因为我对 Bundle Version Short 1.0 很满意。坏的。不要这样做。

*注意我实际上是通过在右侧的 UI 中编辑它来做到这一点的,没有意识到它会在 Info.plist 文件中放置一个空键。我认为这使它无效。我的捆绑包在存档时显示为其他项目并且没有图标,我无法上传到任何地方。

这归结为 Info.plist 中的无效值。如果它不是有效的存档,请尝试解压缩旧存档并放入/覆盖您当前的存档,并查看它是否在重建存档时修复它。

于 2015-09-12T22:27:03.553 回答
1
  1. 转到构建设置并添加

    yourAppName/Resources/dist.plist代码签名权利

  2. cmd + B并选择iOS 设备真实设备作为构建目标

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

  4. 选择“在 Finder 中显示”

  5. 使用 Name Payload大写“P”)创建一个文件夹

  6. yourAppName 复制到您的有效负载文件夹中

  7. 从您的有效负载文件夹创建一个 zip

  8. 将zip重命名为yourAppName.ipa

完毕

于 2014-06-12T12:13:17.537 回答
1

在尝试了几乎所有事情之后:

  • 清理,存档
  • 删除 DerivedData,存档
  • 重新启动 Xcode(我使用的是 XCode7),存档
  • 以上组合...

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

然后打开 Xcode 和项目,执行存档......令人惊讶的是(在尝试构建存档一个小时后)我终于得到了一个非通用存档。

不知道是空闲磁盘问题修复了它还是重新启动了修复它的 macOS,但它对我有用。

于 2016-10-28T15:27:32.070 回答
1

如果您在 Project>Targets>Build Phases>target dependencies 中有任何 .xcodeproj 文件,请将其从那里删除,然后构建您的 ipa。这个对我有用。干杯

你可以在这里得到答案:xcode is created generic xcode archive instead of iOS App Archive

于 2016-11-28T14:34:28.697 回答
0

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

于 2013-01-21T09:47:17.307 回答
0

为了彻底,我发布了我的解决方案。

我在尝试在 Xcode 5.1.1 (5B1008) 中构建 iOS 项目的存档时遇到了完全相同的问题。上述建议都没有解决问题,而且大多数都无关紧要(我没有添加任何框架,并且在我的构建阶段的复制标题部分中没有任何公共条目)。

在我的情况下,解决问题包括简单地关闭我的项目,删除我之前制作的所有存档,转到 Preferences > Accounts,删除我的开发者帐户,退出 Xcode,重新启动,重新添加我的开发者帐户,启动存档过程再次。这立即解决了我的问题。

于 2014-06-23T11:14:34.407 回答
0

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

于 2014-03-01T17:28:20.597 回答
0

因为那是因为我在工作区工作。该项目确实已存档,但不会显示在管理器窗口中。我关闭了工作区并自行打开了项目。存档已在组织者中打开...希望对您有所帮助。

于 2014-11-13T17:18:40.430 回答
0

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

有 2 个单独的项目、一个框架或共享库和一个 iOS 应用程序,我必须打开 2 个不同的 XCode 窗口,每个窗口都通过直接打开.xcodeproj文件而不是常见的.xcworkspace来打开,以便预先构建每个。

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

背景:我正在创建一个开源 SDK 和一个演示 iOS 应用程序。我都在一个工作区中打开过。在 SDK 目标上将Skip install设置为YES会阻止任何人创建存档,因为它会是空的,所以这不是一个选项。使用Project而不是Public头文件会导致存档丢失应该分发的头文件,因此这也不是一个选项。

于 2014-11-05T18:35:52.820 回答
0

这在(Xcode 5)中对我有用的方式我有 2 个目标,当我编辑方案时,在方案编辑器的左窗格中,您将看到 [BUILD, RUN, TEST, PROFILE XXX.APP, ANALYZE, ARCHIVE ] 从 BUILD 窗格中,您将看到列表中列出的项目目标。在最右端,您将看到 ARCHIVE 选项,确保只选择一个目标进行归档。

我在我的项目中选择了 2 个目标,我只检查了产品中我想要的目标,它成功了!

于 2014-07-24T23:16:51.510 回答
0

另一种解决方案,因为以上所有对我都不起作用......

User Header Search Paths(我想Header Search Paths也可以优雅地工作)更改为"$(BUILT_PRODUCTS_DIR)/BlocksKit".

背景

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

于 2014-06-25T04:33:17.967 回答
0

就我而言,我有一个自定义脚本将一些临时文件复制到:

${TARGET_BUILD_DIR}/myTempDir

这意味着,在调查存档以检查其内容后,我在 .app 文件旁边发现了一个 myTempDir 文件夹。一旦我修改了脚本以保存其他地方,事情就被排序了。

于 2014-11-18T00:20:09.563 回答
0

尝试在 Framework projet 的 Public Headers 文件夹路径中设置 $(PROJECT_NAME)Headers。您必须去构建库目标的设置,然后将公共标题文件夹路径编辑为 $(PROJECT_NAME)Headers。

于 2015-06-06T14:31:26.963 回答
0

这些解决方案都不适合我。就我而言, Targets->myApp->Signing & Capabilities->Signing Certificate 是Apple Development 而不是 iOS Distribution

于 2020-03-03T19:41:54.403 回答
0

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

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

于 2016-08-10T06:49:13.407 回答
0

我遇到了类似的问题,但在没有 pod 的 WatchKit 应用程序中。对于 iOS 应用程序,跳过安装已正确设置为 NO,但对于 WatchKit 应用程序,则错误地设置为 NO。

将 WatchKit 应用程序的 Skip Install 更改为 YES(但对于 iOS 应用程序保持它为 NO)解决了问题,并且 Xcode 正确生成了 iOS App Archive 而不是 Generic Xcode Archive。

于 2016-11-29T16:13:02.513 回答
0

就我而言,我在复制文件中有一些文件。我刚刚删除了它们,然后一切正常,我实现了 iOS App Archive。转到 Build Phases->Copy Files 并删除文件。希望这能解决您的问题。:)

于 2017-09-15T06:13:50.930 回答
0

它发生在我使用未定义变量 $(APP_PRODUCT_VERSION) 定义版本的应用程序上

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

于 2018-07-31T11:12:41.167 回答
0

这适用于像我这样的可怜人,这些解决方案都不起作用,即使是新的单一视图应用程序,构建时也没有任何错误但无法存档。

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

该死的苹果!

于 2018-12-06T10:34:55.700 回答
0

在将 OS X 命令行工具添加到我的 iOS 应用程序项目后,我遇到了这个问题,并且默认情况下,命令行工具的目标将跳过安装设置为 NO。由于您显然无法将 OS X 二进制文件安装到 iOS 设备,因此存档默认为通用 Xcode 存档。将此目标的“跳过安装”设置为“是”解决了该问题。

于 2016-06-07T21:50:42.543 回答
0

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

在此处输入图像描述

于 2015-10-13T05:04:40.280 回答
0

就我而言,其他 30 多个答案都不起作用。我们将存档的位置(首选项 -> 位置)设置为指向我们服务器的自定义路径(如果有任何区别,则为 Windows Server 2008)。

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

现在我们存储必须手动将 .xcarchive 文件移动到服务器进行存储,但至少通用存档没有问题。

于 2017-01-23T22:30:56.503 回答
0

就我而言,我有两个目标(Target1 和 Target2),其中第一个可以归档到“iOS 应用程序”,但第二个只能归档到“其他项目”。因此,对我来说,解决此问题的更快方法是通过以下步骤将 Target2 替换为 Target1 的副本:
1. 将 Target2 重命名为 Target2_old
2. 复制 Target1 并将其重命名为 Target2。
3. 将链接更改为新 Target2 的正确 .plist 文件(来自旧目标),并在您的类中检查“目标成员资格”。
4. 打开“管理方案...”并删除 Target2_old 的方案,然后为新的 Target2 添加新方案
5. 选择这个新方案,然后选择产品 -> 存档

于 2017-02-15T19:39:16.140 回答
-2

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

于 2012-05-29T12:47:31.087 回答
-10

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

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

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

确保选择Save for Enterprise or Ad-Hoc Deployment选项而不是选项Export as Xcode Archive

在此处输入图像描述

于 2012-05-23T07:30:23.363 回答