Xcode 15中cp命令操作不被允许,构建失败如何解决?
解决Xcode 15构建脚本磁盘权限问题的方案
1. 改用绝对路径替代相对路径
Xcode 15对相对路径的沙箱限制更严格,放弃./MyProject/SupportingFiles/这类写法,直接用Xcode提供的环境变量${SRCROOT}(项目根目录)拼接绝对路径,避免路径解析错误导致的权限问题。示例脚本:
# 根据配置选择对应密钥文件 if [ "${CONFIGURATION}" = "Debug" ]; then SOURCE_FILE="${SRCROOT}/MyProject/SupportingFiles/SecretsDev.json" else SOURCE_FILE="${SRCROOT}/MyProject/SupportingFiles/SecretsProd.json" fi TARGET_FILE="${SRCROOT}/MyProject/SupportingFiles/Secrets.json" cp "${SOURCE_FILE}" "${TARGET_FILE}"
2. 调整脚本执行阶段到Pre-build
将你的Run Script阶段拖到Xcode Build Phases的Pre-build区域(在Target Dependencies之后,Compile Sources之前)。Pre-build阶段的脚本未进入严格的构建沙箱,拥有更高的磁盘访问权限,能避免后续阶段的权限限制。
3. 临时关闭本地构建沙箱(仅本地调试)
如果是本地开发临时排查问题,可在项目Build Settings中搜索ENABLE_USER_SCRIPT_SANDBOXING,将其设置为NO。注意:Xcode Cloud会强制开启沙箱,此方案仅适用于本地,不要用于CI环境。
4. 检查文件的目标成员配置
选中SecretsDev.json、SecretsProd.json文件,在右侧File Inspector中确认:
- Target Membership勾选了你的主应用目标
- Location设置为
Relative to Project,确保路径解析一致
Xcode Cloud 额外配置要点
- 拉取密钥的步骤必须放在Pre-build阶段执行,不要放在后续的Run Script阶段
- 确认Xcode Cloud的环境变量中
SRCROOT等路径变量能正常获取,避免路径拼接错误
内容的提问来源于stack exchange,提问作者Clément Cardonnel
相关产品推荐
相关产品推荐

