So-net無料ブログ作成

'NSInvalidArgumentException' (reason 'launch path not accessible')はSandboxの設定をいじって解決 [MacOSX]

ドラッグ&ドロップしたファイルのパスを取得して、Process()でコマンドラインのツールに渡していた。以下のエラーが出た。色々したがエラーが取れない。

*** Canceling drag because exception 'NSInvalidArgumentException' (reason 'launch path not accessible') was raised during a dragging session


起動させるコマンドにアクセスできないと言っている。見つけられないと言っているのか、言っている通りにあるけどアクセスできない状態になっているのかいまいちわからない。

        let task:Process = Process()
        task.launchPath = "/usr/local/bin/MP4Box"

としていたのだが上のエラーが出て見えないと言われる。
だけど
        let task2:Process = Process()
        task2.launchPath = "/usr/bin/open"

は見つからないエラーは出ず、openコマンドが普通に動作した。Homebrewのコマンドだから使えないようだ。なぜだ?

/usr/local/bin/MP4Box
の実体はファイルのリンクなのだが、
/usr/local/Cellar/gpac/0.8.0/bin/MP4Box
と直接パスを指定してもエラーが出る状況は変わらず。

下のリンク先ではファイルのパーミッションがダメだと直さないといけないよと言っていたけど

https://stackoverflow.com/questions/36732874/command-line-launch-path-not-accessible

コマンドをデスクトップのフォルダにコピーしてきて、ファイルもフォルダも777あたりにパーミッションを設定したけどダメだった。実行バイナリがダメになっているわけじゃないもんなぁ、と八方塞がりなのでした。


試行錯誤をやめてググることに集中してみたんだけど、どうやらSandboxとやらの設定らしかった。

https://qiita.com/YutakaMatsui/items/f83b272402a4699f72c2

.entitlementsというファイルの
App Sandbox
をYESからNOに変更するとファイルが見つからないよというエラーはあっさり消える。

なんというかXcodeの仕様に振り回されていたってことなのでした。セキュリティの向上に役に立っているのかもしれないけど、エラーが指定したパスが見つからないと出ているので、セキュリティの問題だとは気づかないよな。前にはこんなファイル無かったと思うし。

またNOからYESに戻そうとするとBuild Failedと出てきてビルドできなくなるんだけど、一回Clean Build Folderかなんかしてからビルドし直すとビルドできた。そういうところも嫌な感じ。とにかく、正しいファイルパスでlaunchできないのなら、Sandboxの設定が問題になっているかもよというお話でした。launch path not accessibleというメッセージは間違っていなかった…。

タグ:SWIFT
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0