明示的には言いませんが、取得している出力から、マルチアーキテクチャの kext をコード署名しようとしているように見えますか? もしそうなら、それをしないでください!
このコマンドcodesign --verify -vvvv abc.kext
は、私が構築して署名した kext に対して機能し、明示的なアーキテクチャは必要ありません。kextutil -n
は、コード署名を含む非互換性に関する非常に優れた指標ですが、OS X の実行中のバージョンにのみ適用されるため、サポートする予定のすべてのバージョンで確認する必要があります。
何らかの理由で、ソース コードではなく既存のユニバーサル バイナリに基づいて kext の署名付きバージョンを作成する必要がある場合は、バイナリの 64 ビット部分を抽出し、そこから kext バンドルを作成して署名する必要があります。インストーラーは、この署名付き 64 ビット kext を に配置できます。インストーラーが/Library/Extensions
、OS X 10.8 以前を含むボリュームにインストールしていることを検出した場合は、既存のユニバーサル kext を にさらに配置し/System/Library/Extensions
ます。(さらに、アップグレードが発生した場合に、kext が突然動作を停止したり、署名の警告を生成したりしないようにします。)
64 ビット バイナリを抽出するには、次を使用します。
lipo -thin x86_64 abc.kext/Contents/MacOS/abc -output ./abc-64.kext/Contents/MacOS/abc
ここで、abc.kext は元のユニバーサル kext であり、abc-64.kext は署名する新しい kext です。署名された kext には同じバンドル ID を指定する必要がありますが、機能的には同じであっても、ユニバーサル バージョンよりも高いバンドル バージョン番号を指定する必要があります。OS でロード可能な場合は、バージョンの高い方が選択されます。
さまざまな OS X バージョンでの kext 要件の概要:
署名付き kext は OS X 10.8 以降でのみロードされ、これらのバージョンはすべて 64 ビットのみのカーネルで出荷されます。古いバージョンの OS X をサポートしたい場合は、それらのバージョン用に別の kext が必要になります。OS X 10.6 および 10.7 カーネルは 32 ビットまたは 64 ビットのいずれかである可能性があるため、これらのバージョンをサポートする場合は、署名されていないユニバーサル kext を使用してください。64 ビット部分が署名されている kext は32 ビット カーネルでロードされる可能性がありますが、64 ビット 10.6/10.7 カーネルではロードされません。もちろん、PowerPC と i386 の両方のバリアント (後者は 10.4 以降のみ) として存在しますが、10.5 以前には 32 ビット カーネルしかありません。3 アーキテクチャの kext を作成できるかどうかはわかりませんが、可能だと思います。署名しないでください。
署名は 10.9 以降でのみ必要なため、各 kext がカバーするバージョンに多少の柔軟性があります。(10.8 では、署名なしのユニバーサル kext の 64 ビット部分も問題なくロードされます)
ちなみに、kexts をビルドするときは、そのビルドでサポートされている最も古いOS X バージョンに対応する OS X SDK を使用してください。デプロイ ターゲット メカニズムは、kexts では機能しません。(大部分)