GitHub Runner执行xcodebuild报错:无法删除scheme 进程禁止保存
问题触发原因
该报错是Xcode 13.x系列版本在无交互CI环境下的典型权限问题:
xcodebuild执行测试任务前,会默认尝试清理全局缓存路径下的旧运行上下文(过期scheme配置)。本地执行时,登录用户对Xcode默认缓存路径(~/Library/Developer/下的相关目录)有完整读写权限,流程可正常运行。但GitHub Runner的无交互执行环境默认限制了进程对全局缓存路径的写入权限,xcodebuild尝试删除旧scheme时被权限拦截,就会抛出Cannot modify data because the process disallows saving错误。
修复方案
按优先级从高到低选择即可:
- 优先方案:给xcodebuild追加参数关闭自动scheme管理逻辑,直接跳过触发报错的旧scheme清理步骤,修改后的测试命令如下:
/Applications/Xcode_13.3.1.app/Contents/Developer/usr/bin/xcodebuild test -scheme BokenEngine -destination "platform=iOS Simulator,name=iPhone 11" -enableCodeCoverage YES -derivedDataPath .DerivedData -IDEDisableSwiftPackageAutomaticSchemeManagement=YES
- 备选方案1:执行xcodebuild前,强制指定Xcode的临时数据存储路径到工作区可写目录,避免写入全局受限路径,在测试命令前执行以下脚本:
mkdir -p .xcode-tmp defaults write com.apple.dt.Xcode IDECustomDataStorageLocation -string "$(pwd)/.xcode-tmp"
- 备选方案2:执行测试命令前,给Xcode全局缓存目录补全CI运行用户的读写权限:
sudo chown -R runner:staff ~/Library/Developer/Xcode sudo chmod -R u+rw ~/Library/Developer/Xcode
如果CI环境允许升级Xcode版本,直接升级到Xcode 14及以上版本可彻底解决该问题,苹果已在新版本中修复了无交互环境下的权限判断逻辑bug。
*注意:升级Xcode版本会同步升级内置Swift版本,升级前需要确认项目代码完成对应适配。
内容的提问来源于stack exchange,提问作者Jose Celano
相关产品推荐
相关产品推荐

