使用命令行xcodebuild能否实现和Xcode前端一致的增量编译?
xcodebuild 默认开启增量编译能力,你当前每次执行都全量构建的核心原因是构建缓存无法被正常识别或读取,可通过以下调整解决:
解决跨用户执行的缓存权限问题
你使用sudo -u $loggedInUser切换用户执行编译命令,xcodebuild 默认将构建缓存存放在当前用户的~/Library/Developer/Xcode/DerivedData路径下,若执行用户对对应项目的缓存目录没有完整读写权限,就会无法读取历史构建产物,触发全量编译。可通过手动指定项目内的缓存路径规避该问题,在编译命令中添加-derivedDataPath参数即可。优化后的编译命令参考
sudo -u $loggedInUser xcodebuild -project "${REPO_DIR}/MyProj.xcodeproj" -alltargets -configuration Release -derivedDataPath "${REPO_DIR}/build/DerivedData"
- 排查其他触发全量编译的场景
- 检查你的脚本是否在编译前自动执行了清理DerivedData、删除build目录的操作,哪怕仅删除部分缓存文件都会导致增量构建失效
- 检查项目构建阶段是否存在自定义脚本,会在构建前修改源文件、自动更新版本号/Info.plist内容,这类操作会被xcodebuild识别为源文件变更,触发全量重编译
- 若有自定义构建输出路径的需求,可同步添加
-archivePath参数统一输出路径,避免多次执行的输出路径不一致导致缓存无法匹配
内容的提问来源于stack exchange,提问作者Alfonso Tesauro
相关产品推荐
相关产品推荐

