Xcode 15中ENABLE_USER_SCRIPT_SANDBOXING新选项详解及相关疑问
Xcode 15
ENABLE_USER_SCRIPT_SANDBOXING 常见问题解析 一、这个选项的核心影响
- 启用后,构建阶段的用户脚本(Run Script)会被限制在沙箱环境内,仅能访问项目目录、Xcode指定的临时目录,以及你明确授权的路径,权限被严格管控。
- 本质是为了提升构建安全性,防止恶意或有bug的脚本随意修改系统文件;同时保证构建一致性,避免不同开发者本地环境差异导致构建结果不一致。
- 禁用时,脚本拥有和Xcode进程相同的系统权限,可访问大部分本地文件,灵活性高,但安全性和构建稳定性缺乏保障。
二、何时启用/禁用
建议启用的场景
- 团队协作项目:统一构建环境,避免成员本地环境差异引发的构建失败。
- 准备上架App Store的项目:符合苹果安全规范,降低审核风险。
- 脚本仅处理项目内文件:比如生成代码到项目目录、处理项目内资源,无需访问外部文件。
可考虑禁用的场景
- 脚本必须访问项目外的特定文件:比如读取全局工具目录的依赖、系统级配置文件。
- 旧项目脚本未适配沙箱:暂时无法修改脚本,先禁用,等适配完成后再开启。
三、配置SwiftGen这类工具会怎样
- 如果SwiftGen是通过CocoaPods、Swift Package Manager集成到项目内的,启用沙箱后基本能正常工作——工具二进制文件在项目目录内,脚本可访问项目内文件,生成的代码也能输出到指定路径。
- 如果是全局安装的SwiftGen(比如通过Homebrew安装在
/usr/local/bin),启用沙箱后脚本会找不到工具,因为沙箱默认不允许访问全局目录。解决办法:- 将SwiftGen集成到项目内(推荐,保证团队成员环境一致)。
- 在Run Script的沙箱设置里添加授权路径:勾选“Sandbox”后,点击“+”添加
/usr/local/bin这类路径的访问权限。 - 暂时禁用沙箱,等完成工具迁移后再开启。
内容的提问来源于stack exchange,提问作者Michal Šrůtek
相关产品推荐
相关产品推荐

