场景:
今年初换了家公司,Swift项目,一次全量编译时间在222s+,调试增量编译时间在85s-110s左右,哪怕你在UI阶段,修改了A.swift类中某个View的背景颜色,同样需要85s-110s左右的时间才能看到效果,这无疑是对开发人员的一种折磨,也在很大程度上给开发很大挫折感,当然,最重要的是太影响效率了。所以抽空着手进行编译优化。把过程和方向分享给有需要的iOSer,也作为来掘金的第一篇输出
PS:经过以上优化,我们现在一次增量编译在15s左右,全量在140s左右,代码层面的优化还在进一步进行,最后全部完成后会更新下最终时间
一、 cocopod组件静态化
在这里推荐美柚团队开源的插件cocoapods-imy-bin,github地址,能大大减少构建时间,集成过程坑比较多,多在Issues区转转,后面抽空我会补充上来一波爬坑经验
二、Hmap
头文件映射,快速定位头文件,减少编译时间,github。它和cocoapods-imy-bin插件同样优化的是cocopod组件
三、Injection 工具
一个免费的简单的工具,属于iOSer的热重载,之前一直有用,很方便,很强大,能大大减少UI阶段调试时间。github,AppStore, 使用教程
四、代码优化
通过大量反复探索,swift代码书写方面会造成很大的编译问题,总原则为尽可能的明确到告诉编译起你想做什么,保持代码清晰明了,长期按照这个要求执行,不但能减少编译时间,而且能大大减少后期代码维护以及迭代,查找耗时代码并进行优化可以使用Build Time Analyzer工具来精准定位,进行优化
1、尽量使用简单表达式
2、尽量减少类型推导的使用
3、尽可能少的使用懒加载
4、避免数组,字符串等拼接时+ 操作
5、可选值在表达式的正确使用
比如:let str :String? = nil
lab.text = str ?? "test"
会比第二种写法耗时
let str :String? = nil
let aStr = str ?? ""
lab.text = aStr
五、 开发工具设置的优化
1、取消Find Implicit Dependencies
设置:Product > Scheme > Edit Scheme > Build
取消隐式依赖的编译,如果framworks文件做了修改,需要勾选编译一次后才取消,让framworks文件生效
2、修改Debug Information Format(新版本Xcode中的已做了默认设置)
设置:Build Settings-Debug Information Format-Debug改为DWARF
3、修改 Build Active Architecture Only(新版本Xcode中的已做了默认设置)
设置:Build Settings-Build Active Architecture Only-Debug 改为YES
六、硬件设置
1、增加编译线程
1.获取当前内核数:
sysctl -n hw.ncpu
2.设置编译线程数:默认是cpu核数相同,一般设置为核数2倍效果比较好(个人测试2倍效果好,可以自己测试效果)
defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 16
3.获取编译线程数:
defaults read com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks
4.Xcode显示编译时长:
defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES//设置后重启Xcode
2、Xcode设置专属内存盘(如果是全固态硬盘,设置意义不大)
1、创建ramdisk.sh文件 ramdisk.sh:https://www.aliyundrive.com/s/KXbGiQE4cMp 下载后去掉多余的后缀名
2、执行ramdisk.sh文件
sh ramdisk.sh 16 RamDisk //16是专属盘的大小,RamDisk盘名称
3、设置Xcode