10

MacのSandboxでLSOpenApplication()を使用して別の独自のアプリケーションを起動したいと思います。

もちろん、起動用のエンタイトルメントファイルの「com.apple.security.temporary-exception.files.absolute-path.read-write」に行を追加しました。

ただし、起動時に、コンソールは、プロセスxxxxが「foo.app」を起動することを許可していないというエラーを出力します。これは、ユーザーが以前に起動したことがないためです。プロセスを手動で一度起動した後、エラーなしで起動できます。

以前に起動していなくても、どうすればプロセスを起動できますか?これはサンドボックスとは関係ありませんか?

4

2 に答える 2

15

別のアプリケーションを起動して目的の結果を得ることができる条件はほとんどありません。com.apple.security.temporary-exception.files.absolute-path.read-write は、LaunchServices に関して何も得られないため、その資格を削除できます。

サンドボックス化されたアプリケーションとして、実際にサブ起動できるものはかなり制限されています。別のアプリケーションを起動することは技術的にサンドボックス モデルに違反しているため、これは意図的な動作です。利用可能な方法は次のとおりです。

  1. XPC サービスをアプリケーションに組み込み、それを launchd launch してもらいます
  2. NSTask を介してアプリケーションを実行できます。これにより、このアプリケーションは起動時にサンドボックスを継承します。
  3. 名前でアプリケーションを起動できますが、私が見たところ、これは通常、アプリケーションが /Applications フォルダーにある場合にのみ機能します。つまり、-[NSWorkspace launchApplication:]
  4. アプリを同封するアプリケーションを起動できますが、SMLoginItemSetEnabled() を行っている場合のみです。

-[NSWorkspace launchApplication:] とほぼ同じことを行っているため、osascript 呼び出しが機能すると思います。バンドル識別子または絶対/相対パスを受け入れる LS 呼び出しはどれも機能しません。

于 2012-12-16T17:00:36.933 に答える
0

使用する osascript

osascript -e 'tell application "foo" to open'
于 2012-09-26T06:55:14.980 に答える