コードレス DEXT を作成して、動作中のコードレス KEXT を置き換えました -コードレス KEXT をコードレス DEXT に移行します。いくつかのサイトと GitHub リポジトリを参照してまとめ、他の SO ユーザーの助けを借りました。
SIP をオフにして、開発者モードをオン (systemextensionsctl 開発者オン) にして実行しています。アプリと dext に署名するために、https://github.com/knightsc/USBApp/issues/1で概説されているアドバイスに従っています。
埋め込まれているアプリを実行して拡張機能のアクティベーションを要求すると、その機能は成功したようです。しかし、その後、電話がかかってきます -
request:didFailWithError:
ワークキュースレッドの起動時に、OSSystemExtensionRequestDelegate から派生したリクエスト オブジェクトで。エラーは OSSystemExtensionErrorCodeSignatureInvalid です。スレッドは、OSSystemExtensionRequest の作成に使用した dispatch_queue_t に関連していると思います。
Apple ソースを検索すると、OSSystemExtensionErrorCodeSignatureInvalid が資格と署名に関連していることがわかります。systemextensionsctl list を実行すると -
1 extension(s)
--- com.apple.system_extension.driver_extension
enabled active teamID bundleID (version) name [state]
* * <REDACTED> Home.MyUsbDrver (1.0/1) Home.MyUsbDrver [activated enabled]
codesign -d -vvv --entitlements :- を実行すると、-
Executable=/Users/.../TestDequeueApp.app/Contents/MacOS/TestDequeueApp
Identifier=Home.TestDequeueApp
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20500 size=1055 flags=0x10000(runtime) hashes=24+5 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha256=HASH
CandidateCDHashFull sha256=LONG HASH
Hash choices=sha256
CMSDigest=DIGEST
CMSDigestType=2
CDHash=HASH
Signature size=4745
Authority=Apple Development: MY Apple ID STUFF
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=Aug 6, 2020 at 10:51:41 AM
Info.plist entries=23
TeamIdentifier=TEAM ID
Runtime Version=10.15.6
Sealed Resources version=2 rules=13 files=7
Internal requirements count=1 size=188
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
<key>com.apple.developer.system-extension.install</key>
<true/>
<key>com.apple.developer.system-extension.uninstall</key>
<true/>
</dict>
</plist>
そこに何か問題があるかどうかはわかりませんが、コード署名スクリプトは正しく実行されているようです。これは、レガシーデバイス用に設定された com.apple.developer.driverkit.transport.usb を含む私の DEXT 資格ファイルです (私の DEXT info.plist の IOKitPersonalities セクションにリストされているのと同じデバイス) -
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.driverkit</key>
<true/>
<key>com.apple.developer.driverkit.transport.usb</key>
<array>
<dict>
<key>idVendor</key>
<integer>5843</integer>
<key>idProduct</key>
<integer>33</integer>
</dict>
</array>
<key>com.apple.security.app-sandbox</key>
<true/>
</dict>
</plist>
したがって、拡張機能はアクティブで有効になっているようですが、検証中に何かが失敗します。
この問題に関するヘルプや意見をいただければ幸いです。
アップデート:
念のため、システム拡張機能をインストールしない実稼働アプリを実行して、ハードウェアが一致するかどうかを確認しました。ドライバーがインストールされているので、そうしました。ただし、デバイスにアクセスしようとするとクラッシュしました。それはまだ進歩のようです。