2013-06-23 11 views
7

サンドボックス内にはどのようにLaunchAgentを使用しますか?私は、主なアプリケーションの中にUIレスのLaunchAgentアプリバンドルを配布して、オンデマンドで起動できるようにしたいと考えています。私がXPCサービスの代わりにこれを望む理由は、KeepAliveオプションのため、launchdがアイドル時にプロセスを自動的に終了させないようにします。このオプションはXPCサービスには存在しません。Macアプリのサンドボックス内でLaunchAgentを使用

ドキュメントには、~/Library/LaunchAgentsにコピーする必要のあるplistがありますが、これは明らかにサンドボックス内では不可能です。私のためにplistのコピーを扱うシステムAPIがありますか?私はAppleのSMJobBlessサンプルコードを見てきましたが、それは特権のあるLaunchAgentではなく、特権を持つLaunchDaemonを登録するためのものです。

答えて

4

あなたが探しているAPIはSMLoginItemSetEnabled()です。長時間実行しているエージェントを通常の.appバンドルとしてパッケージ化し、メインのアプリケーションバンドルのContent/Library/LoginItemsに配置する必要があります。

メインアプリケーションの実行時に、エージェントのバンドル識別子を使用してSMLoginItemSetEnabled()コールを使用して、エージェントを有効または無効にすることができます。メインアプリケーションが終了すると、エージェントは稼働したままになります。ユーザーがログアウトして再起動すると、OSがログインしたときにエージェントを再起動します。

アップデート:ドミトリーは次のように説明しています。 App SandboxのApple sample code projectは、同じAPIを示しています(ファイルNSXPCConnection+LoginItem.mを参照)。

関連する問題