問題タブ [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.
cocoa - ブラウザから選択した HTML を取得してアプリにプルする方法
サードパーティのブラウザーで Web サイトから選択したテキストを取得できる Cocoa アプリを作成し (つまり、自分のアプリ内で実行されている埋め込み Webkit インスタンスからではなく)、それをアプリのデータベースに保存したいと考えています。 . 私が知る限り、Textedit で選択したテキストをサービスを介して新しい付箋に変換する方法など、何らかのサービスを使用する必要があります。ただし、App Store を通じてこのアプリを提供できるようにしたいと考えています。XPC サービスを使用する必要があるということですか?
それは私が得た限りです。XPC サービスを使用する必要がある場合、誰かが役立つ方向性を教えてもらえますか? サービス実装ガイドは完全に私の頭の中にあります。
macos - プラグイン内で XPC サービスを実行できますか? (例: Print Dialog Extension プラグイン)
Print Dialog Extension (PDE) プラグインを作成しています。このプラグインは、ユーザーがさまざまなアプリ (TextEdit、Preview、Xcode など) から印刷するときに呼び出されて表示されます。プラグインは、印刷プラグイン (TextEdit など) を呼び出したアプリの上で実行されることに注意してください。
プラグイン内で、XPC サービスを実行する必要があります。ネットワークに接続する必要があるのに、TextEdit にはネットワーク接続に必要な資格がないなど、メイン アプリの資格が私のニーズに十分ではない可能性があるため、XPC サービスが必要です。
問題は、XPC 接続を作成できないことです。ハンドラーは常に XPC_ERROR_CONNECTION_INVALID で起動します。
1.) これは、PDE プラグインがメイン バンドル/メイン アプリ (テキスト編集など) 内にないためですか?
2.) はいの場合、どうすれば PDE プラグイン内で XPC サービスを実行できますか?
3.) いいえの場合、XPC 接続を正常に作成できないのはなぜですか?
objective-c - XPC を使用したマルチ ユーザー コア データ
こんにちは、
これは私の最初の投稿です。これがどこかに回答されている場合は、ご容赦ください (検索しました)。
問題: システム上の複数のユーザー アカウント間で 1 つの Core Data データベースを共有する必要がある Cocoa アプリがあります。
アイデア: ユーザーからの要求を処理するデーモンを作成して (ユーザー特権の境界を越えるため)、Core Data からデータを保存/取得します。アプリケーションで使用される共有管理オブジェクト コンテキストを作成し、その MOC を NSXPCConnection を介してデーモンに渡します。デーモンには、完全に実現された Core Data Stack があります。次に、アプリで作成された MOC を、デーモンによって作成された MOC の子として設定できます。保存を押して完了ですか?
質問: これでも機能しますか? これは単なるばかげた考えですか?他の解決策は何ですか?NSManagedObjectContext は NSCoder プロトコルに準拠していますが、XPC で使用するには、サブクラス化して NSSecureCoding プロトコルに準拠させる必要がありますか? また、ManagedObject サブクラスが NSXPConnection で使用する NSSecureCoder プロトコルに準拠していることを確認する必要がありますか? コンテキストをすべて捨てて、管理対象オブジェクトを送信するだけでよいと思います。
NSXPCConnection がポインターを使用する代わりにオブジェクトをコピーすると仮定していますか? これは正しいです?また、オブジェクトは完全に実現されたオブジェクトとしてコード化/デコードされ、障害が発生しないため、おそらくパフォーマンスを念頭に置く必要があります。これは正しいです?
よろしくお願いいたします。
objective-c - XPC経由で任意の構造体を渡す方法はありますか?
Cocoa アプリがデータベース サーバーと通信できるようにしたいと考えています。アプリのサンドボックス設計の原則に従って、DB 通信を XPC サービスに分割することは理にかなっています。
XPC サービスはステートレスであると想定されているため、接続情報 ( MySQL 接続ハンドルなど) を含む構造体をメイン アプリで保持し、必要に応じて XPC サービスに渡す必要があります。ただし、ハンドルは不透明なタイプであり、XPC サービスではサポートされていないようです。基本的な算術/ロジック/コレクション タイプのみが許可されています。
XPC サービスに渡すことができるように、接続ハンドル (または他の不透明な型) をボックス化する方法はありますか?
objective-c - launchd がプロセスを強制終了するときに、XPC 割り込みハンドラーが呼び出されますか?
interruptionHandler
状態ブロックのドキュメントNSXPCConnection
:
リモート プロセスが終了またはクラッシュした場合に呼び出される割り込みハンドラ。
ただし、Daemons and Services Programming Guideには次のように記載されています。
XPC サービスは、launchd によって管理されます。launchd は、必要に応じて起動し、クラッシュした場合は再起動し、アイドル状態の場合は (SIGKILL を送信して) 終了します。これは、応答を必要とするメッセージの処理中にサービスがクラッシュした場合を除き、サービスを使用するアプリケーションに対して透過的です。その場合、launchd によってサービスが再起動されるまで、アプリケーションは XPC 接続が無効になったことを確認できます。
アイドル状態であるために XPC プロセスが強制終了された場合、 でコールバックを取得できますinterruptionHandler
か? または、メッセージの処理中にアプリがクラッシュした場合にのみコールバックを取得しますか? このテスト ケースはシミュレートできないように思われるので質問します。残念ながら、XPC サービスのライフサイクルは非常にブラック ボックスです。
macos - Mac アプリ サンドボックス内で LaunchAgent を使用する
サンドボックス内でLaunchAgentをどのように使用しますか? オンデマンドで起動できるメイン アプリケーション内で、UI のない LaunchAgent アプリ バンドルを配布したいと考えています。XPC サービスの代わりにこれが必要な理由は、アイドル時にプロセスが自動的に強制終了されるのKeepAlive
を防ぐオプションのためです。launchd
このオプションは、XPC サービスには存在しません。
ドキュメントには、にコピーする必要がある plist があると書かれていますが~/Library/LaunchAgents
、これはサンドボックス内では明らかに不可能です。私のためにplistのコピーを処理するシステムAPIのようなものはありますか? Apple のSMJobBlessサンプル コードを見たことがありますが、特権のない LaunchAgent ではなく、特権のある LaunchDaemon を登録するためのもののようです。
ios - キャンセル ハンドラが自身を参照している場合、-dealloc で XPC 接続をキャンセルする
私のプロジェクトでは、対象のプラットフォームで NSXPCConnection を使用できないため、C ベースの XPC API を使用しています。現在、次のように、弱参照を使用して、接続ハンドラー ブロックが を保持しないself
ようにしています。
-dealloc
ただし、クラスのメソッド内で接続がキャンセルされるたびに問題が発生します。
XPC 接続のキャンセルは非同期操作であるため、クラス インスタンスが既に割り当て解除された後に接続ハンドラーが呼び出され、proxy
存在しなくなったオブジェクトを指すことになります。
接続を安全にキャンセルし、キャンセル-dealloc
後に接続ハンドラにデリゲート メソッドを呼び出させる方法はありますか?
objective-c - opaque 型の NSSecureCoding の採用
NSSecureCoding
XPC 接続を介したトランスポートに採用する必要がある Objective-C クラスがあります。このクラスには、不透明なタイプのプロパティがいくつかあります (dispatch_queue_t
およびdispatch_group_t
)。
この場合、どのように実装-initWithCoder:
し-encodeWithCoder:
ますか?ドキュメントには、これらはオブジェクトのような構造であると書かれているので、エンコード/デコード時に生のバイトとの間で変換する必要があると思いますか? この場合、これを行うためにどのメソッドを使用すればよいかわかりません。別のオプションは、単純にそれらをエンコードすることをまったく避けて、内部で再作成すること-initWithCoder:
です。