3

rootとして実行する必要があり、launchdによって起動されるデーモンがあります。このデーモンは、ユーザーが指定したクレデンシャルを保存する必要があるため、SecKeychainOpenおよび同様の関数を使用してシステムキーチェーンに書き込みます。

これはrootとして実行されるため、システムキーチェーンを使用する必要があると確信しています(通常のユーザーとしては実行されないため、ユーザーのログインキーチェーンの使用は正しくありません)。

私のインストーラーは、インストールの最後にlaunchctlを使用してこれをlaunchdにロードします。問題は、再起動するまで実際には起動しないことです。plistでOnLOadをtrueに設定しましたが、システムキーチェーンを使用する場合、それを機能させるには再起動する必要があるようです。

再起動が必要ない場合はユーザーエクスペリエンスがはるかに向上するため、これに対処する方法を誰かが知っているかどうか疑問に思いました。明確にするために、再起動せずにlaunchdを使用してデーモンからシステムキーチェーンにプログラムでアクセスできますか?

アドバイスやアイデアをありがとう。

4

1 に答える 1

4

やがて自分の問題は自分が思っていたものではないことがわかったので、ここで解決策を考えるべきだと思います。

(いくつかのサイトで読んだことにもかかわらず)再起動せずにlaunchdを使用してデーモンでシステムキーチェーンにプログラムでアクセスすることは完全にOKであることがわかりました。通常の方法で(もちろんroot権限を使用して)plistをロードするだけで、すべて機能します。

私の問題は、インストール後のスクリプトが実行されておらず、特定のMacでビルドするときに.pkgインストーラーに含まれていなかったことです。どうやら、PackageMaker.appがインストールされていない場合でも、macportsはインストーラーを使用してdmgを作成しますが、インストーラーは適切な単一ファイルではなくディレクトリであり、特定の部分(インストール後のスクリプトなど)が不足している可能性があります。

PackageMaker.appは、AppleDeveloperサイトのXcodeAuxToolsパッケージにあります(その後、/ Applicationsまたはmacportsが見つけることができる場所に配置する必要があります)。

于 2013-03-15T21:26:54.433 に答える