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 能够解决这个问题?很高兴提供例如的输出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 构建系统,但是 "regular" 构建设置也会出现此问题。另外,Xcode 的构建步骤和 xcodebuild
在这两种情况下的输出之间应该没有区别。此外,sqlite3.framework 是通过 CocoaPods 构建的,但这也不重要。
看起来额外的数据是由于 xcodebuild
添加编译器选项 -profile-generate -profile-coverage-mapping
而注入的代码覆盖率数据。 "solution" 是取消选中 "Test" 方案操作中的 "Gather coverage data" 选项,即使 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 能够解决这个问题?很高兴提供例如的输出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 构建系统,但是 "regular" 构建设置也会出现此问题。另外,Xcode 的构建步骤和 xcodebuild
在这两种情况下的输出之间应该没有区别。此外,sqlite3.framework 是通过 CocoaPods 构建的,但这也不重要。
看起来额外的数据是由于 xcodebuild
添加编译器选项 -profile-generate -profile-coverage-mapping
而注入的代码覆盖率数据。 "solution" 是取消选中 "Test" 方案操作中的 "Gather coverage data" 选项,即使 xcodebuild
不是为测试而构建。