Xcode サンドボックスエラー「deny file-write-data」の解決方法
エラー概要
XcodeでReact NativeやIonicプロジェクトのビルド時に発生する以下のSandboxエラー:
Sandbox: bash(72986) deny(1) file-write-data
/Users/XXX/ios/Pods/resources-to-copy-XXXShareExtension.txt
このエラーはファイル操作のパーミッション問題が原因で、主にUser Script Sandboxingの設定に関連しています。
根本的な解決策: User Script Sandboxingの無効化
最も効果的な解決方法は、Xcodeのビルド設定でENABLE_USER_SCRIPT_SANDBOXING
を無効にすることです。
手順
- Xcodeでプロジェクトを開く
- 左ペインのプロジェクトナビゲータから対象のターゲットを選択
- "Build Settings"タブに移動
- 検索バーに
ENABLE_USER_SCRIPT_SANDBOXING
と入力 - 設定値をYesからNoに変更
Targets → [Your Target] → Build Settings
→ (検索: ENABLE_USER_SCRIPT_SANDBOXING) → No に設定
注意点
- この設定はメインアプリターゲットと拡張機能ターゲットの両方で変更が必要な場合があります
- 一部のバージョンでは
Allow User Script Sandboxing
という表記の場合もあり
CI/CD環境での特別な対策
CIパイプラインで発生する場合
最近のCI環境でこのエラーが発生する場合、Xcodeproj
gemのバージョンが原因の可能性があります。
解決手順
- Gemfileに以下を追加:
gem 'xcodeproj', '< 1.26.0' # バージョン固定
- バンドルを更新:
bundle update xcodeproj
追加検証方法(ファイル権限確認)
エラーが解決しない場合、file-read-data系のエラーではファイル権限を確認:
ls -l /パス/対象ファイル.txt
# 正しい権限例: -rw-r--r--@ 1 user group 1234 Jan 1 12:34 file.txt
権限がない場合は次のコマンドで修正:
chmod +r /パス/対象ファイル.txt
補足事項
- 複数ターゲット対応: メインアプリとShare Extensionなど、全ターゲットで設定を確認
- クリーンビルド: 設定変更後は
Product > Clean Build Folder
を実行 - 依存関係更新:
pod install
やpod update
の再実行が有効な場合も
:::success 設定効果 この修正により、サンドボックス制限が緩和されファイル操作が正常に行えるようになります。一時的な対処に比べ、プロジェクト全体で持続的に機能します。 :::
まとめ
発生状況 | 解決方法 |
---|---|
ローカルビルドエラー | ENABLE_USER_SCRIPT_SANDBOXING = NO |
CIパイプラインエラー | xcodeproj gemバージョンを1.26.0未満に固定 |
特定ファイルエラー | ファイル読み取り権限の確認(chmod +r ) |
設定変更後はXcodeを再起動し、エラーが解消していることを確認してください。React Native/Ionicに限らず、Xcode15以降でスクリプト関連機能を使用する全てのプロジェクトで発生する可能性のある問題です。