针对编译选项的优化
常见的几种优化方式有下面几种
-
设置Build active architecture only 为 YES
设置为NO时会编译全架构,设置为YES时只编译支持的架构。该处也可以在xcodebuild时通过参数-arch配置对应架构来实现。
-
将Debug Information Format设置为DWARF
设置Debug下不生成dSYM,只在release下生成
-
Build Setting -> Header Search Paths->non-recursive
-
关闭 Enable Index-While-Building Functionality
-
增加编译时使用的线程数
default write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 8
-
使用虚拟内存提升读写速度
可以在通过产生虚拟缓存并与xcode的缓存文件夹进行链接实现
该方法存在的问题为每次重启后就会导致虚拟内存消失,如果服务器不常关机的话影响并不大,可以在系统登录项中增加脚本,具体可参考文章: www.jianshu.com/p/11481ae0e…
**
统计编译时间
如果想统计编译耗时,目前采取了四种方式进行统计。
- 在编译过程中通过time指令输出xcodebuild的耗时
例如:
time xcodebuild –configuration workspace –scheme $scheme –destination genertic/platform=ios
通过time命令能够统计
Real:从进程开始执行到完成所耗费的CPU总时间
User:执行用户态代码所耗费的CPU时间,不包括其他进程使用时间以及本进程阻塞时间
Sys:执行内核系统调用所耗费的CPU时间
time命令更多详细信息可使用man time查看或参考文章:
- 通过xcode自带log进行分析
在xcode编译的过程中点击log能够看到编译的各个步骤以及Compiling每个文件的耗时,也能够在编译缓存中的Logs目录下看到xcactivitylog类型的日志,可以用xcpretty对其进行格式化,但是缺点是格式化后的日志将不带有耗时
- 通过ts/gonmon工具分析
ts/gonmon的原理是监控终端的输出并统计两个输出之间的时间间隔,能够借助xcpretty实现统计编译各个文件耗时的目的。
ts命令使用:
xcodebuild –configuration workspace –scheme $scheme –destination genertic/platform=ios | xcpretty | ts –I %.s | grep Compiling >>Time.txt
gnomon命令使用:
xcodebuild –configuration workspace –scheme $scheme –destination genertic/platform=ios | xcpretty | gnomon -i | grep Compiling >>Time.txt
在生成Time.txt之后通过sort命令排序就可以获取编译耗时较高的文件
- 通过clang增加参数-ftime-report与-ftime-trace,借助ClangBuildAnalyzer进行分析
在build setting中的other C flags与other C++ flags中添加-ftime-trace或-ftime-report能够得到每个文件编译的耗时,其中-ftime-report为一维数据,而-ftime-trace能够得到json数据,通过chrome://tracing进行解析
json文件将与.o文件一同存储于Xcode的缓存文件夹下,由于每个文件都会生成对应的json,不好处理,就需要借助ClangBuildAnalyzer进行分析