Skip to content

Xcode サンドボックスエラー「deny file-write-data」の解決方法

エラー概要

XcodeでReact NativeやIonicプロジェクトのビルド時に発生する以下のSandboxエラー:

bash
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を無効にすることです。

手順

  1. Xcodeでプロジェクトを開く
  2. 左ペインのプロジェクトナビゲータから対象のターゲットを選択
  3. "Build Settings"タブに移動
  4. 検索バーにENABLE_USER_SCRIPT_SANDBOXINGと入力
  5. 設定値をYesからNoに変更
swift
Targets  [Your Target]  Build Settings 
 (検索: ENABLE_USER_SCRIPT_SANDBOXING)  No に設定

注意点

  • この設定はメインアプリターゲットと拡張機能ターゲットの両方で変更が必要な場合があります
  • 一部のバージョンではAllow User Script Sandboxingという表記の場合もあり

CI/CD環境での特別な対策

CIパイプラインで発生する場合

最近のCI環境でこのエラーが発生する場合、Xcodeproj gemのバージョンが原因の可能性があります。

解決手順

  1. Gemfileに以下を追加:
ruby
gem 'xcodeproj', '< 1.26.0' # バージョン固定
  1. バンドルを更新:
bash
bundle update xcodeproj

追加検証方法(ファイル権限確認)

エラーが解決しない場合、file-read-data系のエラーではファイル権限を確認:

bash
ls -l /パス/対象ファイル.txt
# 正しい権限例: -rw-r--r--@ 1 user  group  1234 Jan 1 12:34 file.txt

権限がない場合は次のコマンドで修正:

bash
chmod +r /パス/対象ファイル.txt

補足事項

  • 複数ターゲット対応: メインアプリとShare Extensionなど、全ターゲットで設定を確認
  • クリーンビルド: 設定変更後はProduct > Clean Build Folderを実行
  • 依存関係更新: pod installpod updateの再実行が有効な場合も

:::success 設定効果 この修正により、サンドボックス制限が緩和されファイル操作が正常に行えるようになります。一時的な対処に比べ、プロジェクト全体で持続的に機能します。 :::

まとめ

発生状況解決方法
ローカルビルドエラーENABLE_USER_SCRIPT_SANDBOXING = NO
CIパイプラインエラーxcodeproj gemバージョンを1.26.0未満に固定
特定ファイルエラーファイル読み取り権限の確認(chmod +r)

設定変更後はXcodeを再起動し、エラーが解消していることを確認してください。React Native/Ionicに限らず、Xcode15以降でスクリプト関連機能を使用する全てのプロジェクトで発生する可能性のある問題です。