繁体   English   中英

无法在 xcode 中生成 iOS App 存档

[英]Cannot generate iOS App archive in xcode

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

检查构建设置:

  1. 对于主要项目目标,跳过安装是否
  2. 对于框架(子项目)目标,跳过安装是 YES
  3. 在子项目的构建阶段,复制标题需要在项目中,而不是公共(如果构建静态库不适用)
  4. 部署下的安装目录有效(例如/Applications)

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

除了Skip Install to Yes 之外,如果您在应用程序项目中打开了另一个 lib/framework 项目,您必须在Build Phase / Copy Headers中将标题(如果有)从public 移动项目

你的 lib/framework 目标的构建阶段

我做了以下工作以使其对我有用:

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

就是这样!

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

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

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

在此处输入图片说明

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

在此处输入图片说明

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

如果导出存档,打开它,看看/urs/local/include产品尝试这个建议

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

在此处输入图片说明

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

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

我的解决方案是从Build Phases下的 WatchKit Extension 和 Today Extension 目标中删除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”。 我在尝试存档免费版本时发生了通用存档的问题,这是我在应用程序的“正常”版本之后添加的。 就我而言,当我在工具栏中选择它的 Scheme 并选择 Edit Scheme 时......我看到 Build 部分有两个目标,即 App 和 App FREE。

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

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

要关闭并行构建,请转到

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

更新到 iOS 9 和 Xcode 7 后我遇到了这个问题。Josh H 的解决方案对我有用:

在每个 pod 中,在 Packaging 下,Private Headers Folder Path 和 Public Headers Folder Path 设置为 /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 应用程序本身之前,我必须删除该依赖项并单独构建该工具。

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

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

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

我的工作区中有多个项目(GTL、Pods 和我的主项目),这对我有用:

选择 Project ,那里会有 2 种类型,有ProjectTargets

对于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 部署目标以确保它们都相同。

离开这里是为了从同一旅程中拯救其他人。

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

除了 Alex L 的回答。

Point 3. 将“Build Settings”->“Public Header Folder Path”更改为“include/xxx”也有效。

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

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

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

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

  1. 转到构建设置并添加

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

  2. iOS 设备或选择为构建目标的真实设备的情况下cmd + B

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

  4. 选择“在 Finder 中显示”

  5. 创建一个名称为Payload大写“P” )的文件夹

  6. yourAppName复制到您的 Payload 文件夹中

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

  8. zip重命名yourAppName.ipa

完毕

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

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

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

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

不知道它是否是修复它的免费磁盘问题,或者修复了它的 macOS 重新启动,但它对我有用。

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

你可以在这里得到答案: xcode 正在创建通用 xcode 存档而不是 iOS 应用存档

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

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

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

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

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

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

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

背景

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

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

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

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

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

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

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

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

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

${TARGET_BUILD_DIR}/myTempDir

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

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

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

在此处输入图片说明

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM