【问题标题】:Xcode 9.2: Size Discrepancy between Release builds inside Xcode and using xcodebuildXcode 9.2:Xcode 内部的 Release 构建和使用 xcodebuild 之间的大小差异
【发布时间】: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,它不应该出现在发布版本中:

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

附: 我正在将此命令用于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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 2020-01-15
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      相关资源
      最近更新 更多