💬

【Flutter】Sandbox: ... deny(1) file-read-data が出た時の解決方法 〜Runnerに注意〜

2023/10/31に公開

こんにちは。今回は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の設定

参考記事がありました
https://zenn.dev/feb19/articles/c3e6ec545383bb

問題は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