优化Xcode编译速度
随着项目的不断迭代,工程变得越来越庞大。大项目不仅面临着架构调整的问题,还要面对每次编译时长不断增加的问题。现在我们的项目全量编译要半个小时。
操作环境
操作系统:MacOS 11
开发工具:Xcode12
CPU:i7 2.2GHz 4核8线程
内存:16GB
业务驱动技术提升
查看编译时长
查看总时长
- 关闭Xcode
- 执行如下命令1 defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES 
- 启动Xcode 
查看单个编译单元的时长
该插件会罗列单个编译单元的时长

首次启动该工程,根据配置指导走完后,需重新运行。
优化Xcode配置
以下配置都是在工程对应Target的Build Settings中操作
全模块编译(Whole-Module Optimization,WMO)
在编译项目时,将同属于一个Module(可以理解为一个 Target、一个 Package)的所有源代码都串起来,进行整体的一个分析与优化,区别于 Single-File Optimizatin(单文件优化,以下简称SFO),WMO可以更好的统筹全局,去inline函数调用、排除死函数(即写了却从不调用的函数)等
在User-Define中增加SWIFT_WHOLE_MODULE_OPTIMIZATION选项卡,值为Yes
在
Release模式中,建议打开此选项。
调试信息处理
将Debug Information Format选项中,
- Debug模式的值- DWARF with dSYM改为- DWARF;
- Release模式的值是- DWARF with dSYM,因为一般工程都会集成Bugly,而Bugly问题分析是需要- .dSYM文件的,如果不生成,线上崩溃是没有办法定位信息的。
DWARF意思是矮小的,不作数的。
架构配置
将Build Active Architecture Only选项里的Debug模式的值No改为Yes
Release模式的值必须是No;虽说现在苹果全线都Arm架构了,但是仍然有arm64,armv7,armv7s等区分。
编译优化等级(Optimization Level)

在设置编译优化之后,Xcode断点和调试信息会不正常,所以一般静态库或者其他Target可以这样设置。
系统级提升
增加编译线程数
| 1 | defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4 | 
虚拟盘
使用虚拟磁盘。编译过程中需要大量的磁盘 IO,这主要发生在Derived Data目录下,因此如果内存足够,可以考虑划出4G左右的内存,建一个虚拟磁盘,这样将会把磁盘IO优化为内存IO,从而提高速度。
由于打包机器每次都会重编译,因此不需要担心重启机器后缓存丢失的问题。
代码优化
- 去除警告
- 三目运算符
- 提前计算常量
- 宏定义
- 类型推断