在Xcode中归档项目会错误地创建多个应用程序包

170

在Xcode中归档我的项目会创建一个多应用程序包,而不是打包我想要发布的主目标。具体来说,当我在组织者中验证我的归档时,它会给我以下消息:

"[项目名称] 不包含单一捆绑应用程序或包含多个产品。请选择另一个存档或调整您的方案以创建单一捆绑应用程序。"

这似乎是方案中需要调整的某些设置,但我找不出导致其他目标被包含的原因。

顺便说一下,我正在使用Xcode 4.0。


http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/XcodeBuildSystem/100-Targets/bs_targets.html - Brandon Frohbieter
5个回答

251

1
您,先生,是我的英雄!我不会轻易找到那个的 :P - Andrew Natoli
6
改成了“是”的状态,但仍然失败了。 :( - Joe D'Andrea
8
只需将 "Skip Install" 设置为“是”即可在静态库上进行操作,而不是在项目或目标上进行操作。这篇关于特定的分发方式的博客文章同样适用于应用商店版本,并有一个关于 "Skip Install" 的部分:http://www.musicalgeometry.com/?p=1237 - jj0b
8
有些库(比如CorePlot)需要你也修改它们构建阶段的"Copy Headers"部分。因此,请确保您也查看了Ryan的回答。 - Tim Swast
2
我还需要将所有静态库的头文件移动到目标“Build Phases”中,在“Copy Headers”中,我将它们从“Public”移动到“Project”。 - Hlung
显示剩余6条评论

151

解决此问题需要在子项目中进行两项修复:

  1. 正如Jared发现的那样,在“构建设置”下,将“跳过安装”设置为“是”。
  2. 在“构建阶段”中检查“复制头文件”部分。如果有任何标记为私有或公共的头文件,请将它们拖到项目部分。

5
我修复了所有的“跳过安装”设置,但我忽略了复制标头部分。谢谢! - Thomas Einwaller
2
我正在使用three20。该项目有列为私有或公共的头文件,但如果我将它们移动到项目部分,则无法编译。有什么建议吗? - Breezeight
19
即使你成功解决了Xcode的问题,也请停止使用Three20。我是非常认真的! - Adam Eberbach
1
@Breezeight:你是否成功创建了一个用于提交的three20存档?如果是这样,我们会非常感激您能告诉我们您是如何解决它的,因为我们在其中一个项目中使用了three20(不幸的是),目前无法提交。 - fulvio
2
如果您有许多库项目,就像我们一样,并且难以确定哪个库的跳过安装设置为“否”,或者哪些头文件导致问题,请尝试以下方法:选择档案并单击“分发”按钮。 选择“保存构建产品”选项。点击下一步并保存。在Finder中浏览创建的目录。 'libraries'子目录将标识需要将Skip Install设置为Yes的库。usr/local/include将确定您需要将其从Public移动到Project的罪犯头文件。 - Sunil Gowda
显示剩余12条评论

10
我做了以下步骤才使它对我起作用:
  1. 对于three20静态库,我使用cocoapods将文件包含在主项目中。这消除了three20给我的所有麻烦(而且很多)。顺便说一句,我尝试用Nimbus替换three20,但Nimbus在一些我的项目使用three20的功能上缺乏帮助,所以Nimbus没有什么用。
  2. 在所有其他子项目/静态库的构建设置中,将跳过安装设置为是,并在构建阶段下切换从公共到项目的复制标头。
  3. 最重要的是:在子库的构建阶段下,我确保复制文件目标从Absolute path更改为products directory

就是这样!

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

  1. 选择归档文件,点击“分发”按钮。
  2. 选择“保存已构建的产品”选项。
  3. 点击“下一步”并保存。
  4. 在Finder中浏览创建的目录。
  5. “libraries”子目录将标识需要将“跳过安装”设置为“是”的库。
  6. 在一些情况下,usr/local/include将确定你需要从公共移动到项目中的有问题的头文件,或者你需要将文件从绝对路径改为产品目录的文件。但该目录(即usr/local/include)取决于你的子库目录结构。

我会给你10颗星,这是我阅读了无数的解决方案后找到有帮助的一个。我只需点击在第6步中发现的文件,并将它们从公共成员身份区域标记为项目,无需任何其他操作。 - Cristi Băluță
很高兴能帮到你!我写这篇文章的原因是因为我经历过和你一样的情况。在开始理解发生了什么之前,我大概读了20个答案.. :) - abbood
有人可以解释一下第六步吗?我不明白“usr/local/include将识别罪魁祸首的头文件”是什么意思,以及我应该在哪里/如何检查这些文件。 - Andrei F
@CristiBăluță,您是如何找到文件的?在哪个设置/菜单中?我也遇到了XCode 11.2.1的同样问题,但我对xcode并不熟悉。谢谢。 - Andrei F
我发现的是/usr/local/include是存档文件夹中的一个文件夹(以及库文件夹),但我的通用存档文件没有这些。 - Andrei F
@AndreiF 很不幸,我正在查看这条消息,但不知道自己当时在说什么,听起来似乎并不是我们想要做的事情。我在多年的 Mac 应用程序中看到过这个错误,通常是由于启动器上的“跳过安装”选项引起的。 - Cristi Băluță

1

0

我也遇到了同样的问题:“[项目名称]不包含单一捆绑应用程序或包含多个产品。请选择另一个存档文件,或调整您的方案以创建单一捆绑应用程序。”在升级到xcode5后。

问题是我的“发布”构建设置中有一堆字段为空。我猜xcode4自动切换到了调试设置。

无论如何 - 我的解决方法是找到所有那些空白的“发布”设置,并将它们设置为调试设置。特别是Info.plist文件设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接