問題タブ [xpc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1602 参照

objective-c - XPC または MACH を介して OSX でサービスを起動するように話しかける

サードパーティの開発者が XPC または Mach を介して起動エージェントやデーモンと対話する方法があるかどうか疑問に思っていました。私の理解では、サードパーティは XPC の辞書形式を知っているか、Mach の .defs ファイルにアクセスできる必要があります。これらのいずれかは、プリインストールされている起動サービスで利用できますか? そうでない場合、コードを介してサービスと対話する他の方法はありますか?

0 投票する
1 に答える
961 参照

cocoa - NSXPCConnection または XPCKit

0 投票する
3 に答える
2167 参照

ipc - XPC が XPC サービスのプロセスを作成しない

XPC サービスを作成しようとしていますが、サービスが作成されていないようです。サービスのメイン メソッドで最初に行うことは、サービスが実行を開始するかどうかを確認できるように、syslog を呼び出すことです。これらのログ メッセージがログに表示されることはありません。

すべてのバンドル識別子、実行可能ファイル名、およびバンドル階層を確認しましたが、まだサービスが作成されていないようです。アプリケーションで、メッセージを作成して XPC サービス接続経由で送信した直後に、イベント ハンドラーが XPC_ERROR_CONNECTION_INVALID エラーで呼び出されます。C ベースの XPC API を使用しています。

少なくとも XPC サービスが確実に作成されるようにするために他にできることはありますか?

0 投票する
0 に答える
941 参照

launchd - Launchd で起動された特権ヘルパーを終了する

私のアプリ (Cocoa) には、 Nathan de Vries によるSMJobBlessXPC サンプル コードSMJobBlessをモデルにした、 を使用してインストールされる特権ヘルパー ツール (C) が含まれています。エクスポートされた Mach XPC 接続への接続試行で正常に起動します。ここまでは順調ですね。

私が理解できないのは、後でそのプロセスを終了する方法です。私のアプリケーションが終了すると、ヘルパー ツールはもはやビジネスを実行していません。しかし、私はそれを終了する方法を一生理解できません。

XPC イベントのハンドラーからの呼び出しexit(0)は効果がないようです。おそらく、プロセスではなく現在のスレッドexitを終了するドキュメントの状態が原因です。私の関数は次のようになります。main

戻らないことはわかっdispatch_mainているので、それと関係がある可能性がありますが、プロセスを正常に終了させる方法がいくつかあるはずです。を使用するように切り替える必要がありCFRunLoopますか?

結果として、プロセスが途中で終了しないようにするにはどうすればよいですか? ヘルパー ツールまたはメイン アプリのいずれかが、終了する適切なタイミングを正確に認識します。ジョブが開始されると、終了するまで実行し続けますか? 私はlaunchdのライフサイクル管理について少し曖昧であり、(私が見つけることができる) launchd.plist(5).

0 投票する
5 に答える
3504 参照

objective-c - 同じ XPC サービス (NSXPCConnection) の複数のインスタンスの実行

NSXPCConnectionFoundation.framework (など)にある XPC API を使用して、同じ XPC サービスの複数のインスタンスを実行することはできますか? ドキュメントは、この問題について多くの洞察を提供していません。

編集:簡単なテストを行ったところ、2 つの XPC 接続を作成したにもかかわらず、サービスのインスタンスが 1 つしか実行されていないようです。別のインスタンスを実行させる方法はありますか?

0 投票する
1 に答える
1477 参照

objective-c - nSXPCConnectionを介してxpc_object_tを渡します

XPCサービスプログラミングは初めてで、XPCサービスで作成されたIOSurfaceをホストアプリケーションと共有しようとしています。NSXPCConnection APIを使用して単純なホストとサービスをセットアップできます。次に、IOSurfaceをホストに渡すために次の2つのメソッド( IOSurfaceAPI.hにあります)を使用することになっていると思います。

NSXPCConnection APIを使用してxpc_object_tを渡す方法はありますか、またはC API(xpc.hで定義されている)を使用する必要がありますか?

0 投票する
1 に答える
907 参照

objective-c - NSXPCConnection と xpc C API を混在させる

ラッパーを使用して XPC サービスを操作していNSXPCConnectionますが、Objective-C ラッパーはIOSurfaceRefオブジェクトを処理できないため、xpc.h で定義された C API への直接関数呼び出しを行いたいと考えています。しかし、基になる参照を取得する方法が見つかりませんxpc_connection_t(NSXPCConnection.h で確認できるように、必要な参照になる可能性のあるプライベート ivar が呼び出され_xconnectionています)。それとも、Objective-C ラッパーと C API を単純に一緒に使用できないのでしょうか?

0 投票する
1 に答える
247 参照

macos - XPC は MAS にサンドボックス化を必要としますか?

サンドボックス化されたアプリがあります。

このアプリには、サンドボックス化されていない XPC サービスがあります。

Mac App Store に提出できるようにするには、XPC サービスもサンドボックス化する必要がありますか?

0 投票する
2 に答える
1013 参照

xcode - フレームワークの単一のコピーを複数のバンドルと共有する

アプリケーションで使用されているフレームワークに加えて、アプリケーションバンドル内に含まれているいくつかのXPCサービスがあります。すべてのバンドルを、アプリケーションのFrameworksフォルダー内に含まれるフレームワークの単一のコピーにリンクするにはどうすればよいですか(フレームワークをすべてのバンドルにコピーするのではありません)?すべてのサービスとアプリケーションはサンドボックス化されているため、XPCサービスがサンドボックスの外部にあるため、メインのアプリバンドルのフレームワークにアクセスできるかどうかはわかりません。

0 投票する
1 に答える
5848 参照

objective-c - NSXPCConnection はプロキシによってオブジェクトを渡します

Daemons and Services Programming Guidesは、応答ブロック パラメーターとしても、開いている XPC 接続を介してプロキシ オブジェクトを返すことが可能であると述べています。

プロキシによるオブジェクトの受け渡し

ほとんどの場合、オブジェクトをコピーして接続の反対側に送信することは理にかなっています。ただし、これは常に望ましいとは限りません。特に:

クライアント アプリケーションとヘルパーの間でデータの 1 つのインスタンスを共有する必要がある場合は、オブジェクトをプロキシで渡す必要があります。オブジェクトがアプリケーション内の他のオブジェクトのメソッドを呼び出す必要があり、そのメソッドを接続を介して渡すことができない、または渡したくない場合 (ユーザー インターフェイス オブジェクトなど)、プロキシによってオブジェクトを渡す必要があります。可能)、またはその目的のために特別に作成したリレー オブジェクト。プロキシによるオブジェクトの受け渡しの欠点は、パフォーマンスが大幅に低下することです (オブジェクトへのすべてのアクセスでプロセス間通信が必要になるため)。このため、オブジェクトをコピーして渡すことができない場合にのみ、オブジェクトをプロキシで渡す必要があります。

初期接続の remoteObjectInterface プロパティを構成した方法と同様に、追加のプロキシ オブジェクトを構成できます。まず、プロキシによってメソッドに渡す必要があるパラメータを特定し、次にそのオブジェクトのインターフェイスを定義する NSXPCInterface オブジェクトを指定します。

最初の質問は、プロキシによって渡されるオブジェクトをどのように定義する必要があるかということです。NSXPCProxyCreatingプロトコルに準拠したオブジェクトとして? remoteObjectProxy と remoteObjectProxyWithErrorHandler: メソッドを実装する必要がありますか?

以下に例を示しますが、それは私にはまったくわかりません。特に、パラメーターをプロキシとしてホワイトリストに登録するには、NSXPCInterface メソッド (setInterface:forSelector:argumentIndex:ofReply:) をどこで呼び出す必要があるかわかりません: XPC サービス コードまたはホストで?

メソッドの最初のパラメーターはパラメーター 0 で、その後にパラメーター 1 が続きます。

この場合、このコードはメソッド自体のパラメーターの 1 つのホワイトリストを変更しているため、ofReply パラメーターに値 NO が渡されます。メソッドの応答ブロックのパラメーターのクラスをホワイトリストに登録する場合は、代わりに YES を渡します。

質問は、XPC メソッド呼び出しのブロック応答でオブジェクトをプロキシとして返す方法について、明確なチュートリアルを提供してくれる人はいますか?