3

Objective C で作成した Mac OSX 上のカスタム Cocoa ベースの setup.app は、ハード ドライブ全体をスキャンする必要があるためルート権限が必要なウイルス対策プログラムなどの昇格された権限タスクを実行するために、LaunchDaemon をインストールする必要があります。セットアップ アプリケーションで顧客に管理者ログインを要求し、その LaunchDaemon を /Library/LaunchDaemons にインストールするにはどうすればよいですか (~/Library/LaunchDaemons という意味ではないことに注意してください)。

私が現在それを処理している方法は、管理者権限で AppleScript を使用することです。このログインを求めるプロンプトが表示され、AppleScript は OS から文句を言われることなく、このフォルダへのコピーを実行します。しかし、それは適切な手法ではないと思います - どうにかしてこれを完全にObjective Cで行うべきでしょうか?

この場合、SMBlessJob を使用できないことに注意してください。なぜなら、最初に Launch Daemon を作成するのはこのためです。

背景情報

ノートンの AV アプリケーションがカスタム setup.app を使用するのと同じように、カスタム setup.app を作成する特別な必要があります。これは、Apple PKG および DMG インストーラーが、インストール中にサーバーから非常に大きなファイル (ウイルス定義など) をダウンロードすることを許可していないためです。つまり、Perl スクリプトまたは Bash スクリプトを実行しているときに、PKG ファイルにサーバーからファイルをダウンロードさせることができますが、インストーラーは、ダウンロードにかかる時間の間、進行状況バーをハングアップさせるだけで、他のフィードバックは何も提供しません。プログレスバーがハングしたことを除いて、ユーザーはインストーラーが壊れていると思っていますが、そうではありません。そのため、Norton が AV アプリケーションで行ったように、独自のカスタム setup.app を作成する必要がありました。

4

1 に答える 1

4

通常、SMJobBless はこれを行うための手法です。これは、2016 年現在、Apple が推奨しているものです。Apple のサンプル プロジェクトの readme.txt は次のとおりです。

https://developer.apple.com/library/mac/samplecode/SMJobBless/Listings/ReadMe_txt.html

ただし、これが唯一の方法ではありません。もう 1 つの方法は、インストーラーに AppleScript を使用してプロンプトを表示し、昇格された特権で Bash または Perl スクリプトを実行して、LaunchDaemon もインストールすることです。(これは実際には SMJobBless よりも簡単です。)

基本的に、どちらの手法でも LaunchDaemon (「サービス」など) を特別なフォルダーにインストールし、そのデーモンに昇格した特権を設定して、必要なもの (コマンド ライン コマンドも含む) を実行できます。LaunchDaemons と LaunchAgents の非常に素晴らしい説明は次のとおりです。

http://launchd.info/

さて、問題は、インストール後にアプリケーションからどのように通信するかです。そこはおまかせで、いろいろなテクニックがあります。ただし、これを保護して攻撃ベクトルにならないようにすることもユーザーに任せています。

IPC (アプリケーションとこのサービス間のプロセス間通信) の実行方法に関する素晴らしい記事は次のとおりです。

http://nshipster.com/inter-process-communication/

OSX 上の IPC プロトコルの 1 つは分散オブジェクトです。これは、アーキテクチャの観点からは非常にスムーズです。他の IPC プロトコルのように「メッセージをやり取りする」のではなく、「コーディング」しているように感じるでしょう。これについてスタック オーバーフローの投稿を書きました。これは、ドキュメントが粗雑で、Apple サイトやその他の既存の例が古くなっているためです (OSX 10.10 以降の XCode7.1 ではコンパイルされません)。

アプリケーションとデーモン/サービス間の通信プロトコルでは、長いパスワードを使用して AES256 で暗号化され、Base64 エンコーディングに変換されたキー/値、XML、または JSON メッセージを回避し、さまざまな IPC メカニズムのいずれかを使用できます。 . ただし、それはまったく別のトピックです。

于 2016-03-31T01:00:51.927 に答える