激活 Codeless DEXT 后获取 OSSystemExtensionErrorCodeSignatureInvalid

Getting OSSystemExtensionErrorCodeSignatureInvalid After Codeless DEXT is Activated

我构建了一个无代码 DEXT 来替换一个可用的无代码 KEXT - 。我参考了一些网站和 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>

所以看起来扩展是活动的并且启用了,但是在验证过程中出现了一些错误。

任何有关此问题的帮助或意见将不胜感激。

更新:

只是为了笑,我 运行 我的生产应用程序没有安装系统扩展,看看它是否会导致我的硬件匹配。由于安装了驱动程序,它做到了。但是,当我尝试访问该设备时,我遇到了崩溃。这似乎仍然是进步。

休假一个星期完全不考虑工作,我想通了这个问题!我 re-read 中的信息并意识到我的权利文件格式不正确。

这是我在Xcode编辑器中创建的旧文件:

<?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>VID0</integer>
            <key>idProductArray</key>
            <array/>
            <key>item 0</key>
            <integer>PID0</integer>
            <key>item 1</key>
            <integer>PID1</integer>
            <key>item 2</key>
            <integer>PID2</integer>
            <key>item 3</key>
            <integer>PID3</integer>
            <key>item 4</key>
            <integer>PID4</integer>
        </dict>
    </array>
    <key>com.apple.security.app-sandbox</key>
    <true/>
</dict>
</plist>

出于某种原因,数组元素坚持采用 key/value 格式。查看来自 post 的示例以及有关 plist 文件的其他信息,我 hand-edited 对此:

<?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>VID0</integer>
            <key>idProductArray</key>
            <array>
                <integer>PID0</integer>
                <integer>PID1</integer>
                <integer>PID2</integer>
                <integer>PID3</integer>
                <integer>PID4</integer>
            </array>
        </dict>
    </array>
    <key>com.apple.security.app-sandbox</key>
    <true/>
</dict>
</plist>

现在数组元素看起来正确,并且驱动程序加载并运行,以便我可以从我的设备读取数据。

关于如何使 Xcode 编辑器正常运行的任何想法,或者只是我没有正确使用它?