ルートレベルのデーモン (/Library/LaunchDaemons から起動) として実行される実行可能ファイルと、それがロードする動的ライブラリがあります。どちらも同じ識別子で署名されており、同じキーチェーンにアクセスする必要があります。動的ライブラリのコードから呼び出すとSecKeychainItemExport()
、エラー コードが表示されます-25308
。これは、errSecInteractionNotAllowed
基本的に権限の問題につながります。
代わりにデーモン プロセスをターミナル ウィンドウからルートとして実行すると、次のようなプロンプトが表示されます。これらのプロンプトで [Always Allow] をクリックすると、すべてがエラーなしで続行されます。プロセスがヘッドレスで実行されている場合、プロンプトを表示できないため、単にエラーで失敗するようerrSecInteractionNotAllowed
です。
実行可能ファイルとライブラリの両方が同じ証明書と同じ識別子で署名されている場合、キーチェーンなどのリソースに同等にアクセスできると想定していましたが、何かが欠けているようです。
コード署名の場合、これは動的ライブラリで実行されるコマンドです。
codesign -s "$CertName" -i com.abc.xyz -r='designated => anchor trusted and identifier com.abc.xyz and certificate leaf[subject.O]="My Company" and certificate leaf[subject.CN]="My Company"' ${PROJECT_ROOT_DIR}/library.dylib
codesign -dvvv ${PROJECT_ROOT_DIR}/library.dylib
実行可能ファイルとライブラリ間で同等のアクセスを許可するには、コード署名に対して何を行う必要がありますか?