問題タブ [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.
objective-c - 状態を含む XPC サービスをどのように作成する必要がありますか?
私は NSXPC* ドキュメントを読みました。このドキュメントでは、提供されたサービスを可能な限りステートレスにするようアドバイスしています。サービスと呼び出し元のアプリはお互いをシングルトンと見なし、一度に実行されるサービスのインスタンスは 1 つだけなので、少なくとも私が読んだドキュメントと例にとっては良い考えです。これは、メソッドが本質的に非メンバー関数であることを意味します (C++ 用語を使用するため)。
なぜこれを回避したいのですか?ネットワーク コードを XPC に入れたい。XPC は複数のウィンドウを持つ GUI アプリで動作するため、複数の同時接続をサポートする必要があります。少なくとも直接的には、シングルトンでは機能しません。
ネットワーク API は C ベースで、主な状態型は custom へのポインターstruct
です。では、似たようなことをしてみませんか:
- 作成関数に値型などを返すようにし
NSUUID
ます。(プロセス間でポインターを渡すことは、悪い考えです。) - サービスで、と API C ポインターの間の
NSDictionary
(またはstd::map
その他の) マッピングを作成します。NSUUID
- さまざまなサービス API が を受け取り
UUID
、ネットワーク API を使用するために C ポインターに変換します。
余談:トークンはランダムであるため、XPC サービスがクラッシュした場合、XPC の再起動後にメイン アプリにトークンが使用できなくなります。代わりに、URL (再起動するすべての情報が含まれる) を使用する必要があるかもしれません。しかし、2 つの接続がたまたま同じサーバーに接続されている場合、競合が発生する可能性があります。たぶん、URL/UUID ペアであるトークンとアイデアを組み合わせることができます。(UUID 値は、サービスによって返されるものから、メイン アプリによって提供されるものに移動します。)
これは、ステートフル XPC を実装する良い方法でしょうか?
objective-c - Instruments を使用して XPC サービスのメモリ プロファイリングを行う
これが可能かどうか興味があります。私が作成した XPC サービスで重大なメモリ リークまたは放棄されたメモリに苦しんでいますが、追跡できないようです。計測器を XPC サービスに接続する方法がわかりません。
cocoa - XPC サービス、起動エージェントとして起動
バックグラウンドで実行され、定期的なタスクを作成する XPC サービスを作成しました
パス /Users/Peter/Library/Application Support/AGENT TEST APPS/CS Agent.xpc に配置しました
ファイルを直接実行することで実行できます
私は.plistをLaunchAgentsに配置し、実行可能ファイルを参照しました
/li>
しかし、起動時に起動しません
アップデート
手動でロードしようとしました
しかし、アクティビティモニターには表示されず、生成されるはずの出力もありません(ファイルを作成します)
launchctl list を実行すると表示される
objective-c - NSWorkspace runningApplications が XPC マッハ サービスを返さない
実行中のアプリケーションとエージェントを返しますが、実行中の XPC mach サービスが表示されません (ただし、実行中であり、アクティビティ モニター プロセスで表示されます)。
アクティビティモニターでPIDを調べても
私は res nil を取得しますが、他のプロセスではこれはうまく機能します
macos - バンドル XPC ヘルパーを終了/リセットするには?
XPCヘルパーを終了またはリセットする方法を知っている人はいますか? Apple のドキュメントによると、launchd は XPC ヘルパーがクラッシュした場合に対処します。ただし、実行中のヘルパーを中断またはキャンセルする必要がある場合に何をすべきかについての指示はありません。
たとえば、32 ビットの QuickTime ムービーをレンダリングしている XPC クライアントがある場合、64 ビットの「親」アプリケーションから XPC ヘルパーにジョブをキャンセルしてクリーンアップするよう信号を送るにはどうすればよいですか?
また、XPC ヘルパー アプリが "Quit" を持つ親を処理する適切な方法は何ですか?
現在、親アプリ側で終了するために、(NSXPCConnection) を使用しています。
- (無効)一時停止
- (無効)無効にする
これらは接続を閉じているようです。しかし、ヘルパー アプリが注意を払っているという証拠は見当たりません。
前もって感謝します!