0

我构建了一个无代码 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>

因此,该扩展似乎处于活动状态并已启用,但在验证过程中出现了故障。

对此问题的任何帮助或输入将不胜感激。

更新:

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

4

1 回答 1

0

经过一个星期的假期根本没有考虑工作,我想通了这个问题!我重新阅读了如何设置“com.apple.developer.driverkit.transport.usb”权利中的信息?并意识到我的权利文件格式不正确。

这是我在 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>

出于某种原因,数组元素坚持使用键/值格式。查看帖子中的示例以及有关 plist 文件的其他信息,我对此进行了手动编辑:

<?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 编辑器运行的任何想法,或者只是我没有正确使用它?

于 2020-08-18T14:12:34.563 回答