Flutter の iOS をターゲットにしたビルドで Xcode に関係するエラーが起きていて理由も対策もわからなかった。
Failed to build iOS app
Error (Xcode): Sandbox: rsync.samba(87976) deny(1) file-write-create /Users/.../.../.../.../build/ios/Release-iphoneos/Flutter.framework
Error (Xcode): Sandbox: dart(87954) deny(1) file-write-create /Users/.../.../.../.../build/ios/Release-iphoneos/.last_build_id
Error (Xcode): Flutter failed to write to a file at "/Users/.../.../.../.../build/ios/Release-iphoneos/.last_build_id".
以上のような感じ。それこそ chtGPT にきいてもわからない。
メッセージで書き込めない、ということがわかるだけ。
ちなみに、コンソールから
touch /Users/.../.../.../.../build/ios/Release-iphoneos/.last_build_id
とか
mkdir /Users/.../.../.../.../build/ios/Release-iphoneos/Flutter.framework
とかはできる。
google で
flutter build ios Error (Xcode): Sandbox: rsync.samba(87976) deny(1) file-write-create build/ios/Release-iphoneos/Flutter.framework
で検索してみると、まずは日本語の記事がみつかった。
つまり、プロジェクトの中の ios/Runner.xcworkspace または Runner.xcodeproj を Xcode で開いて
中央のペインでなにもタブが開いていなかったら
No selection とあるはずなのでそれをクリックして Runner になったところで再びクリック
そして Runner の Project と Targets が開くようにする。
Targets としての Runner が選択されているはずだが
選ばれていなければ Target としての Runner をクリック
同じ中央のペインの上部の3行めメニューの中から Build Settings をクリック
4行めのフィルタに sandbox と入れると多くの項目がしぼりこまれてその結果から
Build Options の User Script Sandboxing を見つけ出す。
その設定値が Yes になっているはずだがこれを No にする。
これでうまくいった。
この設定はXcodeの側としてSandboxingするかどうか(つまり他には触らせないか)
という意味らしい。Flutterのbuild側から書き換えを許すということは、Xcodeの
Sandboxではなくなるので、No とでもいうことなのだろう。しらんけど。
Xcodeの15になってからこれの初期値がYesになったという。
それ以前は No だったので気が付かなかったというわけ。