Xcode で Run Script 時 Sandbox: ... deny(1) file-read-data 的なエラーが出た時の対処法


Swift Lint や Swift Format をする時表題のエラーがでてビルドできなくなった時、Build Settings の User Script Sandboxing (ENABLE_USER_SCRIPT_SANDBOXING) を No にすると実行することができました。(Apple 的には非推奨だと思うので後述の方法が推奨)

(Xcode 15 のデフォルトは Yes。Xcode 14 のデフォルトは No)


Sandbox と正しく付き合う

Xcode 14 から導入された内容で、リリースノートに記載がありました。

You can now enable sandboxing for shell script build phases using the ENABLE_USER_SCRIPT_SANDBOXING build setting. Sandboxing blocks access to files inside the source root of the project as well as the Derived Data directory unless you list those files as inputs or outputs. When enabled, the build fails with a sandbox violation if a script phase attempts to read from or write to an undeclared dependency, preventing incorrect builds. (90506067)

Run Scripts の inputs と outputs の指定をちゃんとすれば User Script Sandboxing を No にしなくてもよさそうです。