为什么未签名的 xcarchive 比签名的大?

Why unsigned xcarchive is larger than signed?

我使用下面的命令生成signed 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 而有签名的 xcarchive 有 222 MB?

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

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

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

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

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

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

Ignoring --strip-bitcode because --sign was not passed

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