我构建了一个无代码 DEXT 来替换工作中的无代码 KEXT -将无代码 KEXT迁移到无代码 DEXT。我参考了一些网站和 GitHub 存储库将其组合在一起,并得到了其他 SO 用户的帮助。
我在关闭 SIP 的情况下运行,打开了开发者模式(systemextensionsctl developer on)。我正在按照此处概述的建议https://github.com/knightsc/USBApp/issues/1对应用程序和 dext 进行签名。
当我运行它嵌入的应用程序并请求激活扩展时,该功能似乎成功了。然而,我随后接到了一个电话——
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>
不确定我在那里看到任何错误,并且代码签名脚本似乎运行正确。这是我的 DEXT 授权文件,其中为旧设备设置了 com.apple.developer.driverkit.transport.usb(与我的 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>
因此,该扩展似乎处于活动状态并已启用,但在验证过程中出现了故障。
对此问题的任何帮助或输入将不胜感激。
更新:
只是为了笑,我运行了我的生产应用程序,它没有安装系统扩展,看看它是否会导致我的硬件匹配。由于安装了驱动程序,它确实如此。但是,当我尝试访问该设备时,我遇到了崩溃。这似乎仍然是进步。