一、查看iOS项目编译时间
代码语言:javascript复制// 1. close and quit Xcode
// 2. open terminal
// 3. copy command to terminal then return
defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES
// then open Xcode, command B compile, the time will show as below
使用BuildTimeAnalyzer-for-Xcode查看每个编译单元的耗时。
▲ -Xfrontend: 如果编译或类型检查时耗时多长,则在Xcode中输出警告。
▲ -debug-time-function-bodies:输出每个函数的编译时长
二、优化编译时间
从Xcode配置优化
a. 将 Debug Information Format 改为 DWARF,Debug时不需要生成符号表
b. 将Build Active Architecture Only设置为YES,Debug时不需要生成全架构
c. 优化头文件搜索路径,避免工程Header Search Paths设置了路径递归引用
d. 关闭Enable Index-While-Building Functionality,作用是使用Xcode时会顺便建立索引。
e. 使用pch预编译头文件
f. 设置Xcode编译线程数
从代码中优化
a. 使用静态库代替源码进行编译,cocoapods-binary
b. 减少引用的第三方库,删除无用的头文件引用,
c. 使用@Clang modules技术,使用@import来代替#import
d. 使用Forward declar将.h中导入改为声明,#import改为@class
e. 去除三目预算符、减少类型推断、拆解复杂的 Swift 表达式
1. 优化工程配置
a. 将 Debug Information Format 改为 DWARF
Debug时不需要生成符号表
after changd:
b. 将 Build Active Architecture Only设为Yes
Debug时不需要生成全架构,可以检查子工程(尤其是开源库)有没有设置正确。
c. 优化头文件搜索路径
避免工程 Header Search Paths 设置了路径递归引用:
Xcode 编译源文件时,会根据 Header Search Paths 自动添加 -I 参数,如果递归引用的路径下子目录越多,-I 参数也越多,编译器预处理头文件效率就越低,所以不能简单的设置路径递归引用。同样 Framework Search Paths 也类似处理。
Ps: header search paths 和 user header search paths的区别:
编码的时候通过#include引入头文件的方式有两种<>和""。<>是只从Header Search Paths中搜索,而""则能从Header Search Paths和 User Header Search Paths中搜索。
d. 关闭 Enable Index-While-Building Functionality
默认打开,作用是Xcode编译时会顺带建立代码索引,影响编译速度。关闭后Xcode会换回以前的方式,在空闲时间建立代码所以。
2. 使用PCH预编译头文件
PCH(Precompile Prefix Header File)文件,预编译头文件,其文件中的内容能被其他所有源文件访问。通常放通用的宏和头文件。PCH文件预编译完成后,后面用到PCH文件的源文件编译速度也会加快。缺点是PCH文件和PCH引用到的头文件内容一旦发生变化,引用到PCH的所有源文件都要重新编译。
在Xcode里设置 Prefix Header 和 Precompile Prefix Header即可使用PCH文件:
3. 设置Xcode编译线程数
代码语言:javascript复制defaults write xcodebuild PBXNumberOfParallelBuildSubtasks 8
defaults write xcodebuild IDEBuildOperationMaxNumberOfConcurrentCompileTasks 8
defaults write com.apple.xcode PBXNumberOfParallelBuildSubtasks 8
defaults write com.apple.xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 8
参考:
[iOS 微信编译速度优化分享](https://mp.weixin.qq.com/s/-wgBhE11xEXDS7Hqgq3FjA)