为啥 unsigned xcarchive 比有符号大?

Posted

技术标签:

【中文标题】为啥 unsigned xcarchive 比有符号大?【英文标题】:Why unsigned xcarchive is larger than signed?为什么 unsigned xcarchive 比有符号大? 【发布时间】:2019-05-09 11:31:15 【问题描述】:

我使用以下命令生成签名 xcarchive:

xcodebuild -workspace app.xcworkspace -scheme app -configuration 'Release' -sdk iphoneos archive -archivePath build/signed.xcarchive

构建 unsigned xcarchive 我只是在末尾附加:

CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO

我很好奇为什么未签名的 xcarchive 有 332 MB 和签名的 222 MB?

我发现,例如 libswiftCore.dylib 在已签名的 xcarchive 中只有 23.3 MB,而在未签名的情况下只有 95.4 MB。奇怪的。

Xcode 10.2.1 斯威夫特 4 部署目标:10.0 使用CocoaPods 其他依赖项:Alamofire

【问题讨论】:

我想知道它是否剥离了不同的架构。我无法重现您的问题,但我的猜测是 libswiftCore.dylib 的签名版本中缺少架构。你介意发布otool -L [PATH TO libswiftCore.dylib] 的输出吗 @ThomasBartelmess 的签名和未签名 libswiftCore.dylib 的输出完全相同。 【参考方案1】:

通过使用opendiff 比较每个构建的输出进行进一步调查后,我发现对于签名构建xcodebuild 在每个dylib 上运行bitcode_strip,这显着减小了大小。

这就是这两个版本之间存在大小差异的原因。

在未签名的构建 xcodebuild 运行的情况下更具体:

builtin-swiftStdLibTool --copy --verbose ...

并且没有参数--sign 它不会剥离位码。来自构建输出的消息:

忽略--strip-bitcode,因为--sign未通过

因此,这似乎是xcodebuild 的预期行为。

【讨论】:

以上是关于为啥 unsigned xcarchive 比有符号大?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中,unsigned int型数据的取值范围是

芯片前端verilog语法中的有符号数signed的本质是什么?

为啥更喜欢二进制补码而不是有符号数的符号和大小?

无符号数与有符号数的转换

关于C语言中unsigned变量的问题?

有符号数和无符号数在一起如何处理的