Xcode 9.2:Xcode 内部版本与使用 xcodebuild 之间的大小差异

Xcode 9.2: Size Discrepancy between Release builds inside Xcode and using xcodebuild

似乎在使用 Xcode 9.2 构建时,使用 xcodebuild 生成的二进制文件比使用 Xcode 的常规 'Build for Profiling' 命令生成的二进制文件稍大。两者都设置为生成 Release 构建,命令行构建的配置也设置为 'Release' 而这在 Xcode.

的早期版本中没有发生

这些是从 Xcode:

内部构建时具有各自大小的框架

这些是由xcodebuild生成的:

我怀疑使用 xcodebuild.

时某些框架中遗留了一些调试或代码覆盖率数据

仅供参考:以前的版本有更大的 C 二进制文件(例如 sqlite3.framework 有几兆字节)。发现 https://github.com/Carthage/Carthage/issues/2056 后,我在构建方案的 'Test' 操作中禁用了代码覆盖,并禁用了 "Undefined Behavior" 清理程序。在此之前,框架甚至更大(再次注意 sqlite3.framework)并且有一个来自 "Undefined Behavior" 消毒剂的 dylib,它不应该出现在发布版本中:

有没有人遇到类似的问题 and/or 能够解决这个问题?很高兴提供例如的输出nmotool 如果有帮助(你告诉我将哪些选项传递给这些工具以生成有意义的信息)。

P.S.: 我将此命令用于 xcodebuild:

xcodebuild -workspace Timing.xcworkspace -scheme 'Timing 2' -configuration 'Release' -derivedDataPath build clean build  

我确实启用了并行构建

defaults write com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsExclusively -bool NO  

并且正在使用新的 Xcode 构建系统,但是 "regular" 构建设置也会出现此问题。另外,Xcode 的构建步骤和 xcodebuild 在这两种情况下的输出之间应该没有区别。此外,sqlite3.framework 是通过 CocoaPods 构建的,但这也不重要。

看起来额外的数据是由于 xcodebuild 添加编译器选项 -profile-generate -profile-coverage-mapping 而注入的代码覆盖率数据。 "solution" 是取消选中 "Test" 方案操作中的 "Gather coverage data" 选项,即使 xcodebuild 不是为测试而构建。