7

ドキュメントや SMJobBless の例、インターネットでのさまざまな議論を読んでいます。私のアプリは、を使用して特権ヘルパーをインストールするようSMJobBless()になりましたが、ヘルパーはまったく実行されません。

ヘルパーの全体的な目的は、アプリケーションが起動するたびに、アプリの重要なコンポーネントである kext をロードすることです。XPC を介してヘルパーに接続しようとするとヘルパーが起動するという例を見てきましたが、ヘルパーはシンプルで愚かなままにしておきたいと思います。

API doc は、SMJobSubmit()関数があることを示しています。それは正確に何をしますか?によって以前にインストールされた特権ヘルパーを起動するために使用できますSMJobBless()か?

私は周りのすべての用語に混乱しています。launchdたとえばService Management Framework、「RunAtLoad」plist オプションは、「ジョブがロードされたときにジョブが 1 回起動されるかどうか」を制御します。「ロード」と「起動」とは正確には何ですか? また、「bless/install」および「submit」とどのように関連していますか?

4

1 に答える 1

10

SMJobBless は、ジョブを launchd のシステムに追加します。これを行うには、SMJobBless サンプル コードを参照してください。

http://developer.apple.com/library/mac/#samplecode/SMJobBless/Introduction/Intro.html

ただし、launchd の全体的な目的は、ジョブがいつどのように起動されるかを制御することです。デフォルトでは (サンプル コードでは)、実際にいつジョブを起動するかの指定がないため、実際にはジョブが起動されることはありません。 .

Nathan de Vries は、SBJobBless を使用し、XPC を使用して特権ジョブと通信するための非常に優れた記事とサンプル コードを書きました。もちろん、インポート側の影響の 1 つは、launchd サービスと通信しようとすると、launchd が実際にサービスを開始するため、これで問題が解決することです。

http://atnan.com/blog/2012/02/29/modern-privileged-helper-tools-using-smjobbless-plus-xpc/

そして、具体的にあなたの質問に答えるために、SMJobSubmit は特権ヘルパーを実行できます。理解するのに長い時間がかかりましたが、この 2 つの違いは、SMJobSubmit では launchd を使用して特権付きで実行可能ファイルを実行できるのに対し、SMJobBless では LaunchDaemon を永続的に追加することです。SMJobBless のインストール済み実行可能ファイルは bless されたままになりますが、SMJobSubmit では毎回再認証が必要になります。

どちらの場合も、新しいバージョンが確実に使用されるように、以前のものを SMJobRemove する必要があることに注意してください。

したがって、次のいずれかが必要だと思います。

  • SMJobRemove、SMJobSubmit は、アプリケーションを起動するたびにユーザーに認証を求めます。作成したディクショナリで RunAtLoad プロパティを使用して、ヘルパーをすぐに実行します。

また

  • Nathan のコード、XPC 接続を使用し、バージョン番号を尋ねます。更新されていない場合は終了し、次に SMJobRemove、SMJobBless 新しいバージョンを作成し、XPC 接続して kext のインストールを依頼します。そうすれば、ユーザーは新しいバージョンを認証するだけで済みます。
于 2012-08-06T03:57:03.443 に答える