无法在xcode中生成iOS应用程序存档
从应用程序生成iOS应用程序存档时遇到问题。 应用程序编译得很好,甚至可以在模拟器中运行。 现在我想做临时testing,不能生成iOS应用程序档案。 当我点击产品 – >存档时,它会生成一个通用的xcode存档。 任何人都可以帮助我 我应该提到,我已经生成了这个应用程序的iOS应用程序存档。 它刚刚停止生成iOS档案出于某种原因。 非常感谢。
检查生成设置:
- 对于主项目目标,跳过安装是NO
- 对于框架(子项目)目标,跳过安装为YES
- 在子项目的构build阶段中,复制标题需要在项目中,而不是公有(如果构build静态库,则不适用)
- 部署下的安装目录是有效的(例如,/应用程序)
如果您添加了框架/库,则可能发生这种情况…您需要编辑该库的目标 – >生成设置,并将“跳过安装”设置设置为“是”。 重新归档时,XCode应该再次开始生成“iOS App Archive”,而不是“通用xcode归档”。
除了跳过安装到是 ,如果您在应用程序项目中打开另一个lib / framwork项目,则必须在构build阶段 / 复制标题中将标头(如果有的话)从公共移动到项目 。
我做了以下工作为我工作:
- 我有一个three20静态库,我用cocoapods包含主项目中的文件
- 接下来是所有其他子项目/静态库的跳过安装,并将复制标题从公共项目切换到项目,如上所述
- 最重要的是:在你的项目使用的每个库中,都将build立阶段 – >复制文件,并确保目标从
Absolute path
改变为products directory
。 注意:请参阅下面的提示来缩小search范围,以查找导致此错误的库。
就是这样!
提示:要了解导致档案创build归档文件而不是ipa的有问题的文件,请执行以下操作:
- select存档,然后单击分发button。
- select“保存build筑产品”选项。
- 点击下一步并保存。
- 在Finder中浏览创build的目录。
- “库”子目录将标识您需要将“跳过安装”设置为“是”的库。
- 在某些情况下,
usr/local/include
会识别你需要从Public移动到Project的罪魁祸首头文件或者你必须从绝对path改变到产品目录的文件(或者甚至是你忘记将skip install设置为yes的文件旗)。 但该目录(即usr / local / include)取决于您的子库目录结构。 在很多情况下,您会看到上面第3步中的“ 复制文件”下列出的所有文件。 如果你在这里find他们,那么你对问题的原因有一个明确的答案。
更新提示:使生活更简单..任何文件出现在第4步提示上面..只需在全球searchxcode ..search它,你应该得到你想要的即时结果..例如,这是我的文件夹的内容(按照上面提示的步骤):
所以我可以告诉它与crypto和ssl库有关…寻找它们:
让我意识到,我忘了将跳过安装设置为是。
如果您导出存档,请打开它并查看产品中的/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,有项目和目标 。
对于不是像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部署目标,以确保它们完全相同。
我有这个问题。 就我而言,这是由于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”也适用。
-
转到生成设置并添加
yourAppName / Resources / dist.plist添加到代码签名权利
-
按下cmd + B ,将iOS设备或select的实际设备作为生成目标
-
完成后 – >滚动到“产品”文件夹,然后右键单击您的AppName.app
-
select“在Finder中显示”
-
创build名称有效内容 ( 大写“P” )的文件夹
-
将您的AppName 复制到Payload文件夹中
-
从Payload文件夹创build一个zip文件
-
将 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 7和cocoapods v.0.38.2 。 尝试从今天的扩展程序目标中移除copy pod resources
。
在我的iOS应用程序的项目中添加了一个OS X命令行工具后,我遇到了这个问题,并且Skip Install被默认设置为NO作为命令行工具的目标。 由于您显然无法将OS X二进制文件安装到iOS设备,因此归档默认为通用的Xcode存档。 对于这个目标,将跳过安装设置为YES解决了这个问题。