在开发 iOS 应用时,开发者常会遇到因 macOS 系统 沙盒机制(Sandbox) 导致的文件写入权限问题,典型错误如:
css
Sandbox: rsync.samba(...) deny(1) file-write-create ...

这类错误通常发生在构建 Flutter、React Native 或集成第三方库(如 RxCocoa、Realm、MobileVLCKit)的项目中。本文将从原理、解决方案和实践技巧三个方面,帮助你快速定位并解决问题。
一、问题原理
1. 沙盒机制的作用
macOS 的沙盒机制是系统安全策略的一部分,限制应用程序对文件系统、网络等资源的访问权限。Xcode 在构建 iOS 应用时,默认启用沙盒保护,防止恶意行为。但某些场景下(如 Flutter 插件、第三方库的构建脚本),沙盒限制可能导致文件写入失败。
2. 常见触发场景
- Flutter/React Native 项目 :构建过程中需生成临时文件(如
.xcframework
、dSYM
文件),沙盒可能阻止写入。 - CocoaPods/Carthage 集成 :依赖库的构建脚本(如
rsync
)可能因权限不足失败。 - Xcode 版本升级:Xcode 15+ 引入更严格的沙盒策略,部分旧配置失效。
- 多 Targets 项目 :未统一配置所有 Target 的
ENABLE_USER_SCRIPT_SANDBOXING
设置。
二、通用解决方案
1. 禁用用户脚本沙盒
这是最直接的解决方案,适用于大多数场景:
操作步骤
- 打开 Xcode 项目。
- 进入 Project Navigator → 选择项目 → Build Settings。
- 搜索
ENABLE_USER_SCRIPT_SANDBOXING
。 - 将值设为
No
(适用于所有 Build Configurations:Debug/Release)。
示意图

注意事项
- 需同时修改所有 Target :包括主工程(Runner)、Pods 工程(如
CleverPushNotificationServiceExtension
)等。 - 重启 Xcode:修改后需重启 Xcode 生效。
2. 清理缓存并重新安装依赖
沙盒错误可能由旧缓存或依赖残留导致:
操作步骤
-
删除 DerivedData :
bashrm -rf ~/Library/Developer/Xcode/DerivedData
-
清理 Flutter 缓存 (针对 Flutter 项目):
bashflutter clean flutter pub get
-
重新安装 CocoaPods 依赖 :
bashcd ios pod deintegrate pod install --repo-update
参考资料: