xcode构建系统及编译优化(终)

1,141 阅读2分钟

增量构建技巧

摘要:介绍在增量构建中的一些技巧,减少增量构建的时间

1.使用@class 声明,减少.d中的依赖,详情见(一);

2.避免脚本重复执行

run script 默认选择 Based on dependency analysis;

Screen Shot 2022-05-30 at 3.41.22 PM.png

以下情况会导致script在每次build之后执行

  • 没有声明input文件
  • input文件changed
  • 缺失output文件

6.png

所以补足input及output,可避免script的每次build之后执行。

xcode 12 新构建系统报错,有的同学会删除[CP] Copy Pods Resources脚本中所有的output file,这样会导致每次build之后,执行[CP] Copy Pods Resources脚本(还会导致asset重新编译),耗时巨长,建议只删除报错的文件,例如Assets.car,保留output file

3.修改code sign编译参数 (debug环境下)

  1. 更改代码签名的hash算法,用较简单的算法代替默认算法
--digest-algorithm=sha1
  1. 修改资源文件规则,不对资源文件code sign (Apple API只关心二进制文件是否code sign) 新建plist文件,里面内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
       <key>rules</key>
       <dict>
               <key>.*</key>
               <false/>
       </dict>
</dict>
</plist>

配置:

Screen Shot 2022-06-07 at 6.01.17 PM.png

优化后,工程的code sing时间从3秒下降到0.6秒

  1. 避免ValidateEmbeddedBinary阶段耗时 (debug环境,没有widget需求下) 总耗时13.7秒,但是widgt校验是并发的,实际对编译时间的影响应该在2秒左右,可考虑优化掉

Screen Shot 2022-06-07 at 5.44.16 PM.png

build Phases -> Embed App Extensions 中移除widget。

  1. debug环境下不需要dsym

优化前增量构建时间:

Screen Shot 2022-06-09 at 9.21.24 AM.png

优化后增量构建时间:

Screen Shot 2022-06-09 at 9.21.40 AM.png

总结: 对于build with timeing summary中的各个阶段,考虑其中可优化的地方

参考: