看来,当使用Xcode 9.2构建时,使用xcodebuild
生成的二进制文件比使用Xcode的常规“Build for Profiling”命令稍微大一些。两者都设置为生成版本构建,命令行构建的配置也设置为“发布”,并且在以前版本的Xcode中不会发生这种情况。
在Xcode中构建时,这些是具有各自大小的框架:
这些是由xcodebuild
生成的:
我怀疑使用xcodebuild
时,某些框架中会留下一些调试或代码覆盖率数据。
仅供参考:以前的版本有更大的C二进制文件(例如sqlite3.framework的大小是几兆字节)。在发现https://github.com/Carthage/Carthage/issues/2056后,我在构建方案的“Test”操作中禁用了代码覆盖,并禁用了“Undefined Behavior”清理程序。在此之前,框架甚至更大(再次注意sqlite3.framework)并且“未定义行为”清理程序中存在一个dylib,它不应出现在Release版本中:
有没有人遇到类似的东西和/或能够解决这个问题?很高兴提供例如nm
或otool
如果有帮助(并告诉我哪些选项可以传递给这些工具以生成有意义的信息)。
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构建系统,但问题也出现在“常规”构建设置中。另外,在任何一种情况下,Xcode的构建步骤和xcodebuild
的输出之间不应该存在差异。此外,sqlite3.framework是通过CocoaPods构建的,但这也无关紧要。
看起来额外的数据是由于xcodebuild
添加编译器选项-profile-generate -profile-coverage-mapping
而注入的代码覆盖率数据。 “解决方案”是取消选中“测试”计划操作中的“收集覆盖数据”选项,即使xcodebuild
没有构建用于测试。