做了这么久的老项目,被蜗牛般的编译速度折磨很久。估计很多同学也会遇到类似的问题。这里把平时自己如何加快
XCode
编译速度的方法整理一下。
1. 增加XCode执行的线程数(👌)
可以根据自己Mac
的性能,更改线程数设置5
:defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 5
另外也有一个设置可以开启:defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
XCode默认使用与CPU核数相同的线程来进行编译,但由于编译过程中的IO操作往往比CPU运算要多,因此适当的提升线程数可以在一定程度上加快编译速度。
2.将Debug Information Format改为DWARF(👌👌👌)
在工程对应Target
的Build Settings
中,找到Debug Information Format
这一项,将Debug时的DWARF with dSYM file
改为DWARF
。
如图:
这一项设置的是是否将调试信息加入到可执行文件中,改为DWARF后,如果程序崩溃,将无法输出崩溃位置对应的函数堆栈,但由于Debug模式下可以在XCode中查看调试信息,所以改为DWARF影响并不大。这一项更改完之后,可以大幅提升编译速度。
比如在目前本人负责的项目中,由于依赖了多个Target
,所以需要在每个Target
的Debug Information Format
设置为DWARF
。顺便提一下,如果通过Cocoapod
引入第三方则Debug Information Format
默认就是设置为DWARF
的。
-
SDWebImage
通过Cocoapod``Debug Information Format
的默认设置
注意:将
Debug Information Format
改为DWARF
之后,会导致在Debug
窗口无法查看相关类类型的成员变量的值。当需要查看这些值时,可以将Debug Information Format
改回DWARF with dSYM file
,clean(必须)
之后重新编译即可。
3.将Build Active Architecture Only改为Yes(👌)
在工程对应Target
的Build Settings
中,找到Build Active Architecture Only
这一项,将Debug
时的NO
改为Yes
。
这一项设置的是是否仅编译当前架构的版本,如果为NO
,会编译所有架构的版本。需要注意的是,此选项在Release
模式下必须为NO`,否则发布的ipa在部分设备上将不能运行。这一项更改完之后,可以显著提高编译速度。
4.设计编译优化等级(👌)
不要再项目中或者静态库中使用-O4
,因为这会让Clang
链接Link Time Optimizations (LTO)
使得编译更慢,通常使用-O3
。
注意:在设置编译优化之后,XCode断点和调试信息会不正常,所以一般静态库或者其他Target
这样设置。