Xcode优化编译时间

一、如何查看编译时间

终端执行下面命令

defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES

编译时,Xcode编译进度条走完后,会展示编译时间

二、可优化点

  1. build setting中 Optimization Level 设置优化
配置项 含义
None 编译器不执行优化,不改善代码性能,编译耗时较少
Fast 编译器执行简单的优化来提高代码性能,相对增加编译耗时
Faster 编译器执行所有优化,提升代码性能,但增加编译耗时
Fastest 编译器执行所有优化,改善代码的速度,但会增加代码长度,编译速度慢
Fastest,Smallest 编译器执行所有优化,不会增加代码长度,它是执行文件占用更少内存的首选方案,干的事儿越多,需要的时间就越长

基于上述情况,在 Develop(开发环境)下,Optimization Level 可配置为None,来提高代码编译速度,cocoapods 做同样设置,在podfile文件中,增加下面代码:

post_install do |installer|
 installer.pods_project.targets.each do |target|
   target.build_configurations.each do |config|
       # Develop 为开发环境scheme
       if config.name.include?("Develop")
           config.build_settings['GCC_OPTIMIZATION_LEVEL'] = '0'
       end
   end
 end
end 
  1. 符号表优化

    依然在 build setting 中,搜索 Debug Information Format,将DevelopAdHocBeta均设置为不输出dysm符号表,以节约编译和打包时间。

  2. Build Active Architecture Only改为Yes

    是否仅编译当前架构的版本,如果为No,会编译所有架构的版本。FBI WARNING,此选项在Release模式下必须为No,否则发布的ipa在部分设备上将不可用。这一项更改完之后,可以显著提高编译速度。

  3. 设置Xcode编译线程数

    在终端执行下面语句:

defaults write xcodebuild PBXNumberOfParallelBuildSubtasks 8
defaults write xcodebuild IDEBuildOperationMaxNumberOfConcurrentCompileTasks 8
defaults write com.apple.xcode PBXNumberOfParallelBuildSubtasks 8
defaults write com.apple.xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 8
  1. 预编译头文件 Precompile Prefix Header

    Xcode目前已经不推荐使用pch方式,并且提供了 Enable Modules 用以替代。

    如果项目中使用了 pch,Precompile Prefix Header 默认为YES,即 pch 参与预编译,预编译完成后,pch会被缓存起来,从而提高编译速度;当设置为 NO 时,pch 不会被预编译,而是在每个用到它导入的框架类库中编译一次(即每个引用了pch内容的.m文件都要编译一次pch,这样会降低项目的编译速度)。

  2. Link-Time Optimizations 链接时优化

    Link-Time Optimization执行链接时优化(LTO)。在Clang/LLVM领域,这意味着链接器获得的是LLVM字节码,而不是通常的目标文件。这些字节码在一种更抽象的层次上代表程序这里写链接内容的执行过程,允许LTO得以进行,但是坏处是,仍然需要将他们转换成机器代码,在链接时需要额外的处理时间。

    参数设为YES时,能够优化链接时间;目标文件以LLVM二进制文件格式存储,在链接期间,优化了整个程序。

    将其设为NO时,可以减少Link阶段的时间。对于Link阶段耗时较长的项目,整体编译优化体现较为明显。

你可能感兴趣的:(iOS开发)