iOS编译速度提升
Xcode编译过程
- 预编译pch文件(如果有)
- 编译各种资源文件
- copy静态资源
- compile asset catalogs
- process info.plist
- link
- 生成dSYM文件
- sign app
编译原理
编译器是把一种语言(通常是高级语言)转换为另一种语言(通常是低级语言)的程序
编译器组成
前端
负责解析源码,检查错误,生成抽象语法树(AST),并把AST转换类汇编代码LLVM IR
优化器
将中间代码进行架构无关的优化,提高运行效率,减少代码体积,例如删除if(0)无效分支
后端
把中间代码转换为目标平台的机器码
Xcode中,C/C++/ObjC的编译器是Clang(前端)+LLVM(后端),简称Clang
编译速提升方法
硬件相关
加钱升级机器(最快)
组件二进制
- cocoapods-packager
- cocoapods-binary
- cocoapods-imy-bin(推荐)https://github.com/MeetYouDevs/cocoapods-imy-bin
Xcode设置
- Debug Information Format
Debug改为DWARF,不生成dSYM,注意此相在使用Xcode的Instruments需要改回DWARF with dSYM file,要不然会在Instruments中找不到调用堆栈 - Precompile Prefix Header
全设为YES,此项为预编译头文件,PCH 文件预编译完成后,后面用到 PCH 文件的源文件编译速度也会加快,缺点是 PCH 文件和 PCH 引用到的头文件内容一旦发生变化,引用到 PCH 的所有源文件都要重新编译 - Build Active Architecture Only
Debug改为YES,此项设置的是是否仅编译当前架构的版本,如果为No,会编译所有架构的版本。需要注意的是,此选项在Release模式下必须为Yes。 - Optimizations Level
Debug改为None[-O0],此项为编译优化等级 - Enable Index-While-Building Functionality
全设为YES。此项默认打开,作用是 Xcode 编译时会顺带建立代码索引,但影响编译速度。关闭后整体编译速度快 80s(Xcode 会换回以前的方式,在空闲时间建立代码索引) - WWDC2018/408
并行构建项目
代码相关
- 将常用代码文件打包静态库
代码组件化,切断不同业务代码之间依赖,使得每次编译的时候就只需要编译自己模块下的代码 - 能用@class就用@class,尽量减少文件引用关系
- 减少Storybord和xib文件的使用
- 清理未使用的图片等资源,清理未使用的类,或者合并重复功能的类
网友评论