前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 编译时间优化

iOS 编译时间优化

原创
作者头像
莫空9081
修改2021-03-01 14:29:21
2.2K0
修改2021-03-01 14:29:21
举报
文章被收录于专栏:iOS 备忘录iOS 备忘录

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、查看iOS项目编译时间
    • 二、优化编译时间
      • 从Xcode配置优化
      • 从代码中优化
      • 1. 优化工程配置
      • 2. 使用PCH预编译头文件
      • 3. 设置Xcode编译线程数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com