无法在xcode中生成iOS App存档

Fil*_*nik 170 iphone macos xcode ios

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

Ale*_*x L 307

Check Build Settings:

  1. Skip install is NO for the main project target
  2. Skip install is YES for framework (sub-projects) targets
  3. In Build Phases for sub-projects, Copy Headers needs to be in Project, not Public (does not apply if building static library)
  4. Installation Directory under Deployment is valid (/Applications for example)

  • #3解决了我的问题但我还需要在将我的存档构建为iOS App Archive之前将文件从Private移动到Project. (7认同)
  • 美丽!我认为这是配置文件的问题,但这很有用.子项目是route-me/MapView的mapbox分支.复制标题是关键,如下面的帖子所述,它可以在子项目的构建阶段中找到. (4认同)
  • 从技术上讲,问题不在于标题在Public Headers下是Public,而是Build Setup> Public Headers Folder Path被设置为默认的`/ usr/local/include`.如果你正在构建一个静态库,那么标题_must_是公共的,所以如果#3将Public Headers文件夹路径更改为更合理的东西,比如`include/$(TARGET_NAME)`,那就更正确了.@CopperCash在下面的答案中注明了这一点. (4认同)
  • 作为一个元问题,你是怎么想出来的?好像我依靠Stackoverflow来解决所有与构建相关的问题. (3认同)
  • 这是包含上述部分答案的最完整答案.谢谢Alex L!我认为这应该是这个问题的选择答案. (2认同)

del*_*any 75

如果您添加了框架/库,则可能会发生这种情况......您需要编辑该库的Target-> Build Settings并将"Skip Install"设置为"Yes".当您重新存档时,XCode应该再次开始生成"iOS App Archive"而不是"通用xcode存档".

  • 这同样适用于添加的捆绑包. (2认同)

ebt*_*kyo 62

除了Skip Install to Yes之外,如果你在app项目中打开另一个lib/framwork项目,你必须在Build Phase/Copy Headers中将标题(如果有的话)从public移动project.

构建lib/framwork目标的阶段

  • 为了帮助您本地化错误的Xcode子项目,您可以在Finder中显示Generic Xcode Archive并浏览包.在.xcarchive中,您将看到Products/usr/local/include中的错误标题. (10认同)
  • 我即将失去希望,因为Skip Install to Yes对我不起作用.将标题复制到Project对我来说是个窍门.谢谢! (3认同)

abb*_*ood 44

我做了以下工作让它适合我:

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

就是这样!

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

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

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

在此输入图像描述

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

在此输入图像描述

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


Jos*_*das 21

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

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

在此输入图像描述

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


reb*_*o95 12

如果您正在使用CocoaPods以及WatchKit或Today Extension,那么CocoaPods repo上存在一个未解决的问题,解释您的问题可能是什么.

我的解决方案Copy Pod Resources从WatchKit Extension和Today Extension目标中删除相位Build Phases.一旦我这样做,该项目按预期编译和存档.

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


Ehm*_*air 10

如果上述任何一个答案不起作用,您的问题可能就是cocoaPods.最新的更新0.38.1为我搞砸了,但后来我降级到了0.37.1,事情恢复正常.运用Xcode 6.3.1

稍后编辑:更新到0.38.2也将修复此问题.有关此问题的更多信息,请访问:Cocoapods 0.38.1无法创建有效的存档

  • 我更新到`0.38.2`仍然有问题.你在Xcode 7吗? (3认同)
  • 我将Build Phases/Headers中的每个pod标题从公共部分移动到项目部分,并且它工作正常.确实问题可能在于CocoaPods. (3认同)

Ste*_*son 7

虽然我正在使用Xcode5,但为我编制的是编辑构建方案的内容 - 尝试所有适用的上述建议对我的情况没有帮助.

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

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


小智 7

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

要转换并行内置去

  • 管理计划,
  • 编辑方案,
  • 建立,
  • 删除其他目标.


wyz*_*207 5

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

在每个窗格中,在"打包"下,"私有标头文件夹路径"和"公共标头文件夹路径"设置为/ 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
Run Code Online (Sandbox Code Playgroud)

只需将其添加到Podfile的底部并运行即可 pod install


Bry*_*n P 5

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

选择项目,那里会有两种类型,那就是项目,还有目标.

对于不是您喜欢的项目GTLPODS:

项目:

Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""
Run Code Online (Sandbox Code Playgroud)

目标:

Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""
Run Code Online (Sandbox Code Playgroud)

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

项目:

Skip Install = NO
Installation Directory = /Applications
Run Code Online (Sandbox Code Playgroud)

目标:

Skip Install = NO
Installation Directory = /Applications
Run Code Online (Sandbox Code Playgroud)

检查每个项目和目标上的ios部署目标,以确保它们完全相同.