在Xcode 6中,使用iOS 8扩展程序归档应用时出现警告

58

我在归档应用时遇到了问题。

我为iOS 8扩展创建了一个新的目标。

当我归档应用程序时,会收到警告。

警告信息如下:

"PBXCp Warning","warning: skipping copy phase strip, binary is code signed: /Users/Library/Developer/Xcode/DerivedData/App/Build/Intermediates/ArchiveInter mediates/AppName/IntermediateBuildFilesPath/UninstalledProducts/AppExtappex/AppE xt"

该应用程序使用Objective-C语言。


我也遇到了这个问题。不确定是否会在提交过程中导致任何问题。 - Gui Moura
4
我也在针对一个应用程序小部件收到这个警告,但是应用程序已经通过审核,在应用商店中运行良好。 - Graham Dawson
没有,我还没有找到任何解决方案... - gianpispi
3
是的,应用程序提交成功了,并且应用已经被批准。 - gianpispi
这对我有用:https://dev59.com/eW035IYBdhLWcg3wT-RC - artie
显示剩余2条评论
9个回答

25

在您的Xcode目标构建设置中勾选“复制期间去除调试符号”选项。它是说无法剥离调试符号,因为扩展已经被签名。


1
我不理解那个设置的含义,但它起作用了。谢谢! - Nicholas
2
对于调试版本,请将其设置为NO,对于Adhoc/Release版本,请将其设置为YES。 - perezda
@Locutus 你是否通过比较大小来检查应用程序包中的应用程序二进制文件?在我的测试中,当使用产品归档时,将该值设置为NO没有任何效果。 - Mark Edington
如果由于某种原因您引用了未签名、未剥离的依赖项,它将会膨胀。 - Monstieur

8
如果您在Xcode 6.2中创建全新的示例项目和Today Extension,那么剥离调试符号的默认值将设置为NO。 enter image description here

8

来源: https://dev59.com/jV4c5IYBdhLWcg3w6Nw7#30459703

编译后的代码通常包含调试信息。这些调试信息有助于在调试器中检查运行代码,但在您发布的优化代码中却不太有用。因此,在进行存档构建时会将其剥离。

问题在于,PBXCp无法从已签名的二进制文件中剥离调试符号,因为这会使数字签名失效。因此,如果您有一个在Xcode 6.3之前创建的项目,则现在会收到类似于此的警告。

要解决此警告,只需将两个值都更改为NO即可。删除它们无效,因为默认值仍为YES。附带的Xcode 6.3项目模板默认关闭了它们。只有使用旧模板启动的项目才会在发布行上保留YES。

来源: https://www.cocoanetics.com/2015/04/skipping-copy-phase-strip/


我在使用Apple手表扩展时遇到了类似的问题,这个解决方案对我有效。 - kelin

6

该框架/扩展默认已经被剥离并进行了代码签名。应用程序项目无法检测到框架已经被剥离,会产生一个无害的警告。您不应该禁用它,否则您的应用程序将不会被剥离。


这似乎是正确的解释,因为其他答案都没有解决问题。但是你有没有任何文档证明“框架/扩展已经默认剥离和代码签名了?” - Ilias Karim
1
工作区中的项目(框架和应用程序)是单独构建的。应用程序项目仅引用框架项目的输出二进制文件。在发布配置中,如果启用了该设置,则将剥离框架二进制并进行代码签名。对于应用程序项目,同样的事情也会发生,只不过框架二进制文件将使用应用程序项目证书重新签名。从技术上讲,您可以为应用程序项目提供未剥离和未签名的调试框架二进制文件,而应用程序项目会进行剥离和签名。 - Monstieur
当你说不应该禁用它时,是指我们应该将其值保留为“否”还是“是”? - mfaani

3

有关Strip Debug Symbols During Copy构建设置的影响存在一些混乱,我建议阅读这篇文章以获得更多信息:跳过复制阶段剥离

以下是我在研究此问题时得出的关键点:

  • 当您使用Xcode 6.2或更高版本创建新项目时,默认的构建配置(调试和发布)中该设置的值均为NO
  • 将Release配置中的值设置为YES,然后执行Product Archive对生成的应用程序二进制大小没有影响(我鼓励您通过自己的项目进行测试进行验证)。
  • 用于iOS崩溃报告符号化的调试符号来自于一个外部的.dsym文件,该文件与应用程序包分开,因此我不希望符号表包含在二进制文件中。

1
在Xcode目标的构建设置中,检查"Strip Style"选项。如果它是"非全局符号",则将其更改为"所有符号"。这可以解决问题,但我不知道是否会因此更改而导致其他问题。

1
在目标的构建设置中的“部署”部分,查找Strip Debug Symbols During Copy并将其设置为YES以进行任何生产构建。

enter image description here


我在WatchKit Extension和WatchKit App中将Release设置为Yes,但是收到了更多相同的警告,这次是针对Extension以及App本身。我还没有在部署部分看到AppStore行。 - Andrew Duncan
@AndrewDuncan AppStore的配置并非由XCode创建,而是由开发者或其他工具添加的。在查看iOS项目时,我经常见到这种情况。它为自动化App Store构建提供了更多灵活性。 - Mark Edington

0

对我有效的方法如下:

我编辑了我要归档的方案。在那个窗口中,我选择了“运行”,然后选择了“信息”选项卡。在“构建配置”中,我将其更改为“发布”。我只是将其更改为“调试”(默认选项),然后警告就消失了。

希望这可以帮到你。


-2

这可能是因为您使用了DEBUG方案进行归档。 如果您选择RELEASE方案,则选项“复制时剥离调试符号”设置为YES,您就不会收到此警告。

我建议您使用DEBUG设置进行Beta测试的归档,但使用RELEASE设置进行发布到App Store。


我也收到了这个警告,但我使用发布方案进行存档。 - Peter Johnson
嗨,彼得。请看下面保罗的回答。 - Darth Philou

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