6

Appleが提供するSandboxedHelperAppの例とまったく同じように実行しましたが、すべて正常に実行されているようです。オブジェクトを正常に作成しNSXPCConnection、リモートオブジェクトを(経由でremoteObjectProxyWithErrorHandler)取得することもできます。

ただし、(プロトコル定義で定義されている)プロキシオブジェクトのメソッドを呼び出すと、次のエラーが返されます。

Failed to connect to launch agent: Error Domain=NSCocoaErrorDomain Code=4099 "Couldn’t communicate with a helper application.

基本的に、何をしてもヘルパーアプリと通信できません。私は特別なことは何もしていません。NSLog()にヘルパーアプリを呼び出すだけです。しかし、それは機能しません。不思議なことに、内部からの出力も表示されません。

- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection

何が間違っている可能性がありますか?

更新:メインアプリで[アプリのサンドボックスを有効にする]のチェックを外すと、うまくいくようです。したがって、サンドボックスを有効にすると、ヘルパーアプリと通信したくないという問題が発生します。もっと資格が必要ですか?私はそれらすべてをxcodeで試しました!

4

2 に答える 2

12

ヘルパー アプリケーションはサンドボックス化されています。したがって、Xcode ではデバッグ目的で許可されていますが、マッハ サービスを動的に登録することはできません。

ただし、(SMLoginItemSetEnabled() を使用して) ヘルパー アプリケーションをログイン項目に追加すると、launchd はバンドル ID で指定された mach サービスを自動的に登録します。

これで、メイン アプリケーションがサンドボックス化されました。したがって、ランダムマッハ通信は許可されません。それを機能させる唯一の方法は、一時的なマッハ ルックアップ資格を追加することでした。

10.7.4 以降。Apple は、アプリケーションがヘルパー アプリと通信する必要があるこのケースのソリューションとして、アプリケーション グループ資格を導入しました。

両方のアプリケーションが同じアプリケーション グループ資格を共有する必要があります。任意の値を指定できますが、Apple では、この値はチーム ID で始まる必要があります (例: Team-id.myApp)。次に、ヘルパー アプリケーション バンドル ID は同じ権利で始まる必要があります (例: Team-id.myApp.myHelperApp)。その後、メイン アプリケーションは、ヘルパー アプリケーション バンドル識別子 (つまり、Team-id.myApp.myHelperApp) で指定されたサービスとの XPC 通信を使用して、ヘルパー アプリケーションと自由に通信できます。また、2 つのアプリケーションは、アプリケーション グループの資格 (例: ~/Library/Group Containers/Team-id.myApp) で名前が付けられたグループ コンテナー フォルダーへのアクセスを共有します。これは、必要に応じて手動で作成する必要があります。

于 2012-09-01T19:38:57.963 に答える
4

さて、私は難しい方法を学びました.SandboxingとXPCには、ヘルパーアプリや、いわゆる「共有グループディレクトリ」を使用したデータベースの共有は言うまでもなく、自動的に作成されず(ドキュメントに誤って記載されているように)も作成されない問題がたくさんあります。NSURLドキュメントで主張する方法を提供します。

ドキュメントには、エンタイトルメントでは、形式の「共有アプリ識別子」として任意の文字列を指定できると書かれていますが<TEAM_ID>.whatever、形式を使用する場合にのみ機能するようです:<TEAM_ID>.com.yourcompany

それ以外は機能しません。コンパイルされ、アーカイブされ、実行されますが、ヘルパー アプリと対話することはできません。約 30 時間費やした後、最後の変更を試してみようと思いました。ひどく書かれたサンドボックスのドキュメント (Apple の開発者フォーラムで多くの人が不満を言っている) についてレーダーを提出する.

于 2012-09-01T18:36:33.290 に答える