8

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

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

4

2 に答える 2

4

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

その後、実行時にメイン アプリケーションSMLoginItemSetEnabled()で、エージェントのバンドル識別子を指定した呼び出しを使用して、エージェントを有効または無効にすることができます。メイン アプリケーションが終了しても、エージェントは存続します。ユーザーがログアウトして再度ログインするか再起動すると、OS はユーザーが再度ログインしたときにエージェントを再起動します。

更新: Dmitry が指摘しているように、ドキュメントには、私が最初に言及したサンプルは含まれなくなりましたが、App Sandbox 用の別の Appleサンプル コード プロジェクトでは、同じ API が示されています (ファイルを参照NSXPCConnection+LoginItem.m)。

于 2013-08-19T17:03:38.740 に答える
1

ドキュメント ページにはサンプル プロジェクトが含まれていないため、ここにあります: http://rhult.github.io/articles/sandboxed-launch-on-login/

于 2015-04-18T19:36:14.367 に答える