2

私は次のコマンドを実行する小さなMacアプリケーション(Obj-Cで)を書いています:

system("killall Finder");

アプリをサンドボックス化すると(6月1日にサンドボックス化が必要になるため)、アプリが機能しなくなった場合にどうなるかを確認したいと思いました。次の応答がありました。

killall: warning: kill -TERM 6524: Operation not permitted

それを回避する方法はありますか?追加する特定の資格や、コマンドを実行する別の方法のように?

前もって感謝します。

4

2 に答える 2

2

アプリはサンドボックスの精神に完全に反しているため、MASレビューアがそれを受け入れる可能性はほとんどありません。また、サンドボックス内から「defaults write com.apple.finder」が実行することに驚かれるかもしれませんが、基本的には何も役に立ちません。ホーム相対/Library/Preferences/com.apple.finder.plistへの一時的な例外資格を使用する必要があります。サンドボックスの影響を受けないAPIを使用して、ホームへのパスを取得します(たとえば、getpwent()-> pw_dir )、plistを直接ロードして保存します。そして、サンドボックス化されたアプリから子以外のプロセスを呼び出す方法はなく、それを回避する方法もありません。システムkillallを実行しようとすると、同じサンドボックス内で実行されることになります。したがって、同じ制限があります。

ただし、システムのkillallが失敗するのを回避する方法があるかどうかについて具体的な質問をしましたが、少なくとも3つあります(10.7.4でプラグインされた、または間もなくプラグインされるサンドボックスの穴は数えません)。

  1. サンドボックス化されていないヘルパーアプリを作成できます。これにより、すべてが実行されます。これを行うためにAppStoreで承認された2つの方法は、XPCとSMLoginItemSetEnabledのみです。また、ユーザーが明示的に指示しない限り、ヘルパーを有効にすることはできません。

  2. Finderに信号を送る代わりに、終了するように求めるAppleイベントをFinderに送信できます。これを行う最も簡単な方法は、Applescriptを実行して「アプリ「Finder」に終了するように指示する」ことです。少なくとも10.7.3以前では、Appleイベントをcom.apple.finderに送信するための一時的な例外資格が必要です。(将来のOSバージョンには異なるメカニズムがあるかもしれませんが、NDAフォーラムの外でそれらについて議論することはできません。)

  3. Apple Eventをシステムイベントなどの他のプロセスに送信して、代わりにFinderを強制終了することができます。

等々。

于 2012-05-30T00:21:32.970 に答える
0

正当な理由がある場合でも、次のようなアプリケーション を強制終了できます。sanboxingが有効になっているヘルパーアプリでアプリを終了するにはどうすればよいですか?

于 2014-10-20T19:26:22.623 に答える