💬
【Flutter】Sandbox: ... deny(1) file-read-data が出た時の解決方法 〜Runnerに注意〜
こんにちは。今回はiOSの実機でFlutterアプリをビルドした際に生じた、上記エラーの解決方法を紹介します。
結論
- Xcodeを開き、Build SettingsのENABLE_USER_SCRIPT_SANDBOXINGをNoに設定することで解決しました。
- 注意すべきは、TargetのRunnerとProjectのRunner、それぞれのBuild Settingsで設定を変更する必要があることです。
環境
- Xcode 15.0.1
- VSCode 1.79.1
- iPhone 12 mini 実機 (iOS 17.1)
- Flutter 3.10.2
なお、この環境で本件のエラーは解決できますが、他のエラーも発生する可能性がある点には注意が必要です。
エラー内容
VSCodeでiPhone実機にビルドした際に、以下のエラーが発生し、ビルド失敗しました。
Error (Xcode): Sandbox: cp(18087) deny(1) file-read-data /Users/username/project/pj-name/ios/Runner/dev/GoogleService-Info.plist
エラーメッセージから察するに、Firebase用のGoogleService-Info.plistへのアクセスが拒否されているようです。
原因はSANDBOXの設定
参考記事がありました
問題はXcodeのSANDBOX設定にあるようです。SANDBOXはアプリのセキュリティ境界を設定する機能で、アプリのファイルアクセスを制限します。
Xcodeでの修正方法
先ほどの記事を参考に、XcodeのBuild SettingsにおいてUser Script Sandboxing (ENABLE_USER_SCRIPT_SANDBOXING) をNoに変更します。
重要なのは、ProjectのRunnerとTargetのRunnerの両方でこの設定が存在するため、両方ともNoに変更する必要があったという点です。私のケースでは、最初に1箇所のみ変更していましたが、両方をNoにすることで問題が解決しました。
そうそう、Sandoboxではなく、Sandboxなのでタイポにも注意しましょう。
まとめ
以下のようなエラーが発生した場合は、
Error (Xcode): Sandbox: cp(18087) deny(1) file-read-data /Users/osanaidaisuke/project/art-tunes-android/ios/Runner/dev/GoogleService-Info.plist
次の手順で解決することができます:
- Xcodeを開き、Build SettingsのUser Script SandboxingをNoに設定
- 操作はProjectのRunnerとTargetのRunnerの2箇所で行う必要があるかもしれません
Discussion