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

问题描述 投票:1回答:1

看来,当使用Xcode 9.2构建时,使用xcodebuild生成的二进制文件比使用Xcode的常规“Build for Profiling”命令稍微大一些。两者都设置为生成版本构建,命令行构建的配置也设置为“发布”,并且在以前版本的Xcode中不会发生这种情况。

在Xcode中构建时,这些是具有各自大小的框架:

enter image description here

这些是由xcodebuild生成的:

enter image description here

我怀疑使用xcodebuild时,某些框架中会留下一些调试或代码覆盖率数据。

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

enter image description here

有没有人遇到类似的东西和/或能够解决这个问题?很高兴提供例如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构建系统,但问题也出现在“常规”构建设置中。另外,在任何一种情况下,Xcode的构建步骤和xcodebuild的输出之间不应该存在差异。此外,sqlite3.framework是通过CocoaPods构建的,但这也无关紧要。

xcode clang xcode9 xcodebuild strip
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.