无法在xcode中生成iOS应用程序存档

从应用程序生成iOS应用程序存档时遇到问题。 应用程序编译得很好,甚至可以在模拟器中运行。 现在我想做临时testing,不能生成iOS应用程序档案。 当我点击产品 – >存档时,它会生成一个通用的xcode存档。 任何人都可以帮助我 我应该提到,我已经生成了这个应用程序的iOS应用程序存档。 它刚刚停止生成iOS档案出于某种原因。 非常感谢。

检查生成设置:

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

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

除了跳过安装 ,如果您在应用程序项目中打开另一个lib / framwork项目,则必须在构build阶段 / 复制标题中将标头(如果有的话)从公共移动项目

建立你的lib / framwork目标的阶段

我做了以下工作为我工作:

  1. 我有一个three20静态库,我用cocoapods包含主项目中的文件
  2. 接下来是所有其他子项目/静态库的跳过安装,并将复制标题从公共项目切换到项目,如上所述
  3. 最重要的是:在你的项目使用的每个库中,都将build立阶段 – >复制文件,并确保目标Absolute path改变为products directory 。 注意:请参阅下面的提示来缩小search范围,以查找导致此错误的库。

就是这样!

提示:要了解导致档案创build归档文件而不是ipa的有问题的文件,请执行以下操作:

  1. select存档,然后单击分发button。
  2. select“保存build筑产品”选项。
  3. 点击下一步并保存。
  4. 在Finder中浏览创build的目录。
  5. “库”子目录将标识您需要将“跳过安装”设置为“是”的库。
  6. 在某些情况下, usr/local/include会识别你需要从Pu​​blic移动到Project的罪魁祸首头文件或者你必须从绝对path改变到产品目录的文件(或者甚至是你忘记将skip install设置为yes的文件旗)。 但该目录(即usr / local / include)取决于您的子库目录结构。 在很多情况下,您会看到上面第3步中的“ 复制文件”下列出的所有文件。 如果你在这里find他们,那么你对问题的原因有一个明确的答案。

更新提示:使生活更简单..任何文件出现在第4步提示上面..只需在全球searchxcode ..search它,你应该得到你想要的即时结果..例如,这是我的文件夹的内容(按照上面提示的步骤):

在这里输入图像描述

所以我可以告诉它与cryptossl库有关…寻找它们:

在这里输入图像描述

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

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

在每个窗格中的“ Packaging下,“ Private Headers Folder Path和“ Public Headers Folder Path均设置为/usr/local/include 。 如果我清除他们,那么我得到一个有效的档案。

在这里输入图像描述

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

如果您使用的是CocoaPods以及WatchKit或Today Extension,那么CocoaPods回购协议中存在一个公开的问题 ,解释您的问题可能是什么。

我的解决scheme是从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未能创build有效的存档

虽然我使用的是Xcode5,但是对于我来说,编辑Build Scheme的方法 – 尝试以上所有适用的build议对我来说都没有帮助。

我有两个目标,比如“App”和“App FREE”。 当我试图存档免费版本时,我遇到了一般存档问题,这是我在“正常”版本的应用程序之后添加的。 在我的情况下,当我在工具栏中select了Scheme并selectEdit Scheme …时,我看到Build部分有两个目标,即App和App FREE。

我没有选中App的所有列,只保留了App FREE的列,并点击OK。 下一次我select产品>存档我得到了我的应用程序免费而不是通用档案。 🙂

更新到iOS 9和Xcode 7后,我遇到了这个问题。Josh H的解决scheme为我工作:

在每个窗格中的“打包”下,“私有头文件夹path”和“公用头文件夹path”均设置为/ usr / local / include。 如果我清除他们,那么我得到一个有效的档案。

我也为我的Podfile做了一个post安装脚本来自动完成这个工作!

  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

我的工作区有多个项目(GTL,Pods和我的主项目),这对我来说是有效的:

select项目,将有2种types,有项目目标

对于不是像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部署目标,以确保它们完全相同。

我有这个问题。 就我而言,这是由于Mac应用程序的目标是iOS应用程序的依赖。

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

在构buildiOS应用程序本身之前,我必须单独删除该依赖关系并单独构build工具。

在我的情况下,我只是在我的主要Objective-C项目中开始包含Swift代码之后才得到错误的“Generic Archive”。 在对Xcode正在吐出的归档文件进行了大量的故障排除和检查之后,我注意到SwiftSupport文件夹(带有Swift运行时所需的dylib)在我的压缩文件中位于另一个地方,而不是来自于全新的Swift项目应用程序存档。

我发现Installation Directory构build设置,并注意到它被设置为我的项目中的自定义path。 我只是删除它(设置它的通用值/Applications )和下一个生成 – >存档我没有按预期工作,给了我一个适当的iOS应用程序档案。

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

如果你只有一个项目,也许这个解决scheme是有用的。 这个问题发生时,我重复了目标。 结果我有两个平行的目标。 这是造成这个问题。 通用的IOS档案build成。

打开closures的并行去

  • pipe理计划,
  • 编辑scheme,
  • build立,
  • 移除另一个目标。

除了Alex L的回答。

第3点。更改“生成设置” – >“公共头文件夹path”“包含/ xxx”也适用。

  1. 转到生成设置并添加

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

  2. 按下cmd + B ,将iOS设备或select的实际设备作为生成目标

  3. 完成后 – >滚动到“产品”文件夹,然后右键单击您的AppName.app

  4. select“在Finder中显示”

  5. 创build名称有效内容大写“P” )的文件夹

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

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

  8. zip 重命名yourAppName.ipa

DONE

离开这里来拯救别人从同一个旅程。

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

在尝试了一切之后:

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

然后我注意到我的启动分区在可用磁盘空间上很低…大约1GB左右。 我重新启动,然后获得约18GB的免费。

然后打开Xcode和项目,执行存档…和令人惊讶的(一个小时后,试图build立一个档案)我终于得到了非通用档案。

不知道它是一个免费的磁盘问题修复它,或重新启动修复它的macOS,但它为我工作。

如果您在Project> Targets> Build Phases>目标依赖关系中有任何.xcodeproj文件,请将其从此处删除,然后构build您的ipa。 它适用于我。 干杯

你可以在这里得到答案: Xcode是创build通用的Xcode档案,而不是iOS应用程序档案

就我而言,我必须将FMDB和BlocksKit都移动到静态库。 以前他们被build造成子项目。 请记住,您可以使用lipo来创build通用库。 在构build最终产品时,模拟器代码将被自动剥离。

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

为了彻底,我张贴我的解决scheme。

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

在我的情况下,解决问题包括简单地closures我的项目,删除我以前做的任何档案,去首选项>帐户,删除我的开发人员帐户,退出Xcode,重新启动,重新添加我的开发人员帐户,启动存档过程再次。 这立即解决了我的问题。

还有一个解决scheme,因为以上所有都不适合我…

更改User Header Search Paths (我认为Header Search Paths将工作一样优雅) "$(BUILT_PRODUCTS_DIR)/BlocksKit"

背景

在BlockKit中,开发人员在主项目中的标题与在部署中的结构不同。 所以,你不能引用项目中的头文件,并且必须引用复制到构build目录中的头文件。

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

我在我的项目中select了2个我的目标,我只检查了我想要的产品中的目标,它的工作!

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

有2个独立的项目,一个框架或共享库和一个iOS应用程序,我不得不打开2个不同的XCode窗口,每个窗口直接打开.xcodeproj文件,而不是通用的.xcworkspace ,以便正确地构build每个。

作为一个很好的副作用,XCode不再重build每个项目的每个目标后,我做一个清洁 ,导致短的生成时间。

背景:我正在创build一个开源的SDK和一个演示iOS应用程序。 我都在一个工作区打开了。 在SDK目标上将跳过安装设置为YES会阻止任何人创build归档,因为它将是空的,所以这不是一个选项。 使用项目而不是公共标题会导致归档文件丢失应该分发的头文件,所以这也不是一个选项。

因为我在工作区工作。 该项目已存档,但不会显示在组织者窗口中。 我closures了工作区,并自行打开了该项目。 存档已经在组织者打开…希望它的帮助。

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

 ${TARGET_BUILD_DIR}/myTempDir 

这意味着,在调查存档以检查其内容之后,我在.app文件的旁边find了一个myTempDir文件夹。 一旦我修改脚本保存在其他地方的东西sorting。

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

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

我删除了Info.plist中Bundle Version的值,因为我只用Bundle Version Short 1.0就够快乐了。 坏。 不要这样做。

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

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

如果使用Xcode 7cocoapods v.0.38.2 。 尝试从今天的扩展程序目标中移除copy pod resources

在这里输入图像描述

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