【发布时间】:2017-12-19 17:34:22
【问题描述】:
使用 Xcode 9.2 构建时,使用 xcodebuild 生成的二进制文件似乎比使用 Xcode 的常规“构建分析”命令略大。两者都设置为生成 Release 构建,命令行构建的配置也设置为“Release”,这在以前版本的 Xcode 中没有发生。
这些是在 Xcode 中构建时具有各自大小的框架:
这些是由xcodebuild生成的:
我怀疑在使用xcodebuild时,某些框架中会留下一些调试或代码覆盖率数据。
仅供参考:以前的版本具有更大的 C 二进制文件(例如 sqlite3.framework 的大小为几兆字节)。在发现https://github.com/Carthage/Carthage/issues/2056 之后,我在构建方案的“测试”操作中禁用了代码覆盖,并禁用了“未定义行为”清理程序。在此之前,框架甚至更大(再次注意 sqlite3.framework),并且有一个来自“未定义行为”清理程序的 dylib,它不应该出现在发布版本中:
是否有人遇到过类似的情况和/或能够解决此问题?很高兴提供例如的输出nm 或 otool 如果有帮助(你告诉我哪些选项传递给这些工具以生成有意义的信息)。
附:
我正在将此命令用于xcodebuild:
xcodebuild -workspace Timing.xcworkspace -scheme 'Timing 2' -configuration 'Release' -derivedDataPath build clean build
我确实启用了并行构建
defaults write com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsExclusively -bool NO
并且正在使用新的 Xcode 构建系统,但是问题也出现在“常规”构建设置中。另外,在任何一种情况下,Xcode 的构建步骤和xcodebuild 的输出都不应该有区别。此外,sqlite3.framework 是通过 CocoaPods 构建的,但这也不重要。
【问题讨论】:
标签: xcode clang xcode9 xcodebuild strip