Xcode 6打包并将“共享扩展”添加到目标时,出现警告“跳过复制阶段剥离,二进制文件已签名”。

20
我在添加分享扩展到我的项目并进行归档时遇到了这个警告: 警告:跳过复制阶段剥离,二进制代码已被签名。 /Users/xxxx/xxx/xxxx/Build/xxxx/Build/Intermediates/ArchiveIntermediates/xxxx/IntermediateBui ldFilesPath/UninstalledProducts/XXX.appex/XXXX
旧问题没有提供正确解决方案。所以我决定再次提问。 在 Xcode 6 中归档 iOS 8 扩展应用程序时出现警告 有人能解释一下为什么会发生这种情况吗?是否因为扩展目标已经被签名了?如果是这样,如何解决?
我知道将“复制过程中去除调试符号”设置为“NO”可以清除此警告。但实际上它并没有解决问题。不去除调试符号的缺点是什么?因为无论我将其设置为YES还是NO,我的归档文件大小都是相同的。
5个回答

20

不要禁用应用程序项目中的Strip Debug Symbols During Copy。如果您有其他未签名的依赖项,这将使您的应用程序变得臃肿。

这会发生是因为构建应用程序项目尝试剥离框架,但由于框架已经被代码签名,所以不能剥离。然而,在其构建期间,框架已经被剥离,因此警告是无害的。Xcode似乎无法检测到已被代码签名的框架已经被剥离。

你应该保持原样。


1
谢谢您的回答。您能详细说明一下在“复制期间不剥离调试符号”设置为“否”会使应用程序变得臃肿的细节吗? - Kong Hantrakool
4
我认为你混淆了COPY_PHASE_STRIP(在Xcode构建设置中显示为“拷贝期间剥离调试符号”)和 STRIP_INSTALLED_PRODUCT (“剥离连接的产品”)。 - Daniel Rinser
4
这句话的意思是:“这只会影响到被复制的二进制文件,而不会影响到链接后生成的产品本身。”下面是原文说明:“是的:被复制的二进制文件将被去除调试符号。这并不会导致链接器生成的二进制文件被去除。使用STRIP_INSTALLED_PRODUCT可以让链接器去除该二进制文件。” - Daniel Rinser
2
在编程方面,我认为丹尼尔是正确的。Xcode 项目现在的默认设置是在 Debug 和 Release 两种模式下,COPY_PHASE_STRIP 都设置为 NO。但是 STRIP_INSTALLED_PRODUCT 在 Debug 和 Release 两种模式下都设置为 YES。这个设置可以消除错误,并在发布时仍可以剥离调试信息。 - Simone Manganelli
1
如果我(Daniel)没记错的话,我们需要将STRIP_INSTALLED_PRODUCT设置为NO以进行调试。默认情况下,所有的STRIP_INSTALLED_PRODUCT(剥离已安装产品)都是YES,但调试符号仍然存在。 - cyanide
显示剩余4条评论

14
编译代码通常包含调试信息。这些调试信息对于在调试器中检查运行代码很有帮助,但对于您要在分发版本中发布的优化代码则没有那么有用。因此,在进行存档构建时,它会被剥离。
问题在于,由于这会使数字签名无效,所以PBXCp无法从已签名的二进制文件中剥离调试符号。因此,如果您有一个在Xcode 6.3之前创建的项目,现在会收到如下警告。
为了解决警告,只需将两个值都更改为NO即可。删除它们是不起作用的,因为默认值仍然是YES。随Xcode 6.3一起提供的项目模板默认关闭了这些选项。只有使用旧模板启动的项目才会在“Release”行上保留YES。
来源: https://www.cocoanetics.com/2015/04/skipping-copy-phase-strip/

9
我也遇到了同样的警告,通过在应用程序(而不是扩展)的Build Settings中将“Strip Debug Symbols During Copy”设置为“NO”,解决了这个问题。
另一方面,更改扩展相同的设置没有效果。 这澄清了警告的实际含义。即,剥离符号并不意味着将要剥离目标的符号,但确实意味着目标将尝试剥离嵌入二进制文件的符号。
因此,我认为该警告的实际含义是,Xcode无法在归档容器应用程序时剥离扩展二进制文件的调试符号,因为需要嵌入容器应用程序中的扩展二进制文件在代码签名之前已经被编译和冻结。
看起来Xcode默认的构建设置与剥离嵌入式扩展二进制文件的调试符号有关,需要正确更新以避免出现此警告。

6
将“复制期间剥离调试符号”设置为否,是否会使某些应用程序组件的调试符号泄露风险? - pupeno

1
在我的情况下,与2个AppIcons有关(我忘记填充它们),请检查xxx.xcassets文件中是否具有正确的xxpt所有AppIcons。从这里开始,我恳求苹果改进此检查或启用自动工具以完成所有AppIcons集。这太疯狂了。

1
如果您正在使用Xcode 9.34.1,请点击项目设置。使用过滤器查找正确的设置:输入“strip debug”。您将找到COPY_PHASE_STRIP设置。可能已设置为“Yes”。将其设置为“No”以消除警告。

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