iOS 编译时间优化

2021-03-01 14:29:21 浏览数 (1)

一、查看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)

0 人点赞