优化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
,从而提高速度。
由于打包机器每次都会重编译,因此不需要担心重启机器后缓存丢失的问题。
代码优化
- 去除警告
- 三目运算符
- 提前计算常量
- 宏定义
- 类型推断