NSXPCConnection
Foundation.framework (など)にある XPC API を使用して、同じ XPC サービスの複数のインスタンスを実行することはできますか? ドキュメントは、この問題について多くの洞察を提供していません。
編集:簡単なテストを行ったところ、2 つの XPC 接続を作成したにもかかわらず、サービスのインスタンスが 1 つしか実行されていないようです。別のインスタンスを実行させる方法はありますか?
NSXPCConnection
Foundation.framework (など)にある XPC API を使用して、同じ XPC サービスの複数のインスタンスを実行することはできますか? ドキュメントは、この問題について多くの洞察を提供していません。
編集:簡単なテストを行ったところ、2 つの XPC 接続を作成したにもかかわらず、サービスのインスタンスが 1 つしか実行されていないようです。別のインスタンスを実行させる方法はありますか?
少し遅れましたが、この質問に対する決定的な答えはxpcservice.plist
マンページで提供されています:
ServiceType (デフォルト: アプリケーション)
XPC サービスのタイプは、サービスをインスタンス化する方法を指定します。値は次のとおりです。
• アプリケーション: 各アプリケーションは、このサービスの一意のインスタンスを持ちます。
• ユーザー: ユーザーごとに作成されたサービス プロセスのインスタンスが 1 つあります。
• システム: システム全体に対してサービス プロセスのインスタンスが 1 つあります。システム XPC サービスは、システム フレームワーク内に存在するように制限されており、root が所有する必要があります。
結論: ほとんどの場合、XPC サービスのインスタンスは 1 つだけであり、異なるアプリケーションが同じサービスに接続できる場合 (サービスがアプリにバンドルされている場合でも接続できない場合) にのみ、複数のインスタンス (1 つのインスタンス) が存在します。 -アプリごとのインスタンス)。
XPCサービスは、複数の接続ごとに1つのインスタンス用に設計されていると思います。おそらく、1つの実行可能ファイルで名前付きパイプを管理する方が便利です。したがって、ほとんどの場合、複数のインスタンスを同時に作成することは不可能です。
XPC サービスには状態がないため、1 つ以上のインスタンスが実行されているかどうかは問題ではありません。
XPC サービスは、launchd によって管理されます。launchd は、オンデマンドでサービスを起動し、クラッシュした場合は再起動し、
SIGKILL
アイドル状態の場合は (を送信して) 終了します。これは、応答を必要とするメッセージの処理中にサービスがクラッシュした場合を除き、サービスを使用するアプリケーションに対して透過的です。その場合、launchd によってサービスが再起動されるまで、アプリケーションは XPC 接続が無効になったことを確認できます。XPC サービスはいつでも突然終了する可能性があるため、最小限の状態を保持するように設計する必要があります。理想的には、サービスは完全にステートレスである必要がありますが、これが常に可能であるとは限りません。
–– <a href="https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html" rel="nofollow">XPC サービスの作成
必要なすべての状態情報を xpc 呼び出しに入れ、永続化する必要がある場合はそれをクライアントに返します。