已缓存Cocoa Pods,如何用AZ Pipeline缓存缩短Xcode构建时间?
核心排查方向与解决方案
未缓存Xcode构建中间产物
CocoaPods缓存仅解决依赖安装耗时,但Xcode的DerivedData目录包含编译生成的中间文件、框架等,若未缓存会导致每次全量编译。
解决方案:在流水线中添加DerivedData目录缓存,路径通常为~/Library/Developer/Xcode/DerivedData或项目自定义的DerivedData路径。需根据项目Bundle ID/名称精准匹配缓存目录,避免跨项目冲突。强制全量构建而非增量
部分流水线默认执行xcodebuild clean后再构建,这会清空之前的构建状态,触发全量编译。
解决方案:移除流水线中的xcodebuild clean命令,直接执行xcodebuild build(或对应归档命令),保留增量构建状态。冗余编译选项拖慢速度
若项目开启了不必要的编译选项,比如Debug模式下启用Whole Module Optimization、强制生成未缓存的Debug符号、开启过多静态分析规则等,都会增加耗时。
解决方案:针对CI环境调整配置:Debug构建关闭Whole Module Optimization(仅Release构建启用);缓存dSYM符号文件目录(若需保留符号);暂时关闭非核心的静态分析规则。第三方依赖未预编译
即使Pods目录存在,部分Swift依赖仍会每次重新编译,未生成预编译二进制框架。
解决方案:在Podfile中为Swift依赖添加use_frameworks! :linkage => :static,或使用CocoaPods Binary插件将依赖预编译为二进制包,减少编译环节。CI机器资源不足
CI机器CPU核心数少、内存不足,或Xcode版本与本地不一致,都会降低编译效率。
解决方案:升级CI机器配置,统一Xcode版本与本地开发环境,关闭CI机器上其他占用资源的进程。
验证方法
- 手动在CI机器执行构建,通过
xcodebuild -showBuildTimingSummary查看各模块编译耗时明细,定位最耗时的环节。 - 确认
DerivedData缓存已正确恢复,构建时是否跳过了已编译模块的重复编译。
内容的提问来源于stack exchange,提问作者TechStack

