如何设置 `com.apple.developer.driverkit.transport.usb` 权限?

How to set `com.apple.developer.driverkit.transport.usb` entitlement?

我不确定如何在我的 dext 权利文件中设置 com.apple.developer.driverkit.transport.usb 键。 Info.plist 文件已经包含 IOKitPersonalities 字典,阅读 com.apple.developer.driverkit.transport.usb 字典它看起来应该包含与 IOKitPersonalities.[= 的条目具有相同信息的条目。 23=]

entitlements file for a project that is very similar to what is being shown in the WWDC video about driver kit 将其设置为:

<key>com.apple.developer.driverkit.transport.usb</key>
<true/>

当我设置为<true/>时,系统扩展启动。在我看到来自应用程序的日志行之前,我确实看到了一些这样的行:

...
2020-05-06 12:23:19.229709+0200 0x51ac2    Default     0x0                  0      0    kernel: DK: IOUserServer(sc.example.MyUserUSBInterfaceDriver-0x100002aad)::exit(CDHash check failed)

这个权利应该只反映 IOKitPersonalities 词典中的内容吗?

完全删除密钥后,我得到:

...
2020-05-06 12:23:19.229709+0200 0x51ac2    Default     0x0                  0      0    kernel: DK: IOUserServer(sc.example.MyUserUSBInterfaceDriver-0x100002aad)::exit(CDHash check failed)
2020-05-06 12:23:19.253517+0200 0x51ac2    Default     0x0                  0      0    kernel: DK: IOUserServer(sc.example.MyUserUSBInterfaceDriver-0x100002aae)::exit(Entitlements check failed)

..所以我想钥匙一定在那里。

我正在使用 log stream --source | grep MyUserUSBInterfaceDriver

查看与应用程序相关的日志行

更新的答案
因为我已经发布了一些基于 USB DriverKit 的驱动程序,我发现在实践中它与我原来的略有不同答案中有说明,尽管我的原始答案与 Apple 的文档相符。

尽管 Apple 在 USB 传输授权文档中提到了产品 ID 和供应商 ID,但实际上只有供应商 ID 与 entitlements/code 签名目的相关。这意味着如果您的驱动程序需要支持任意数量的供应商 ID 为 1234 和 2345 的 USB 设备(十进制!供应商 ID 的常用表示法是十六进制,所以不要忘记先转换!)您需要在您的文件中包含以下内容dext 的权利:

<key>com.apple.developer.driverkit.transport.usb</key>
<array>
    <dict>
        <key>idVendor</key>
        <integer>1234</integer>
    </dict>
    <dict>
        <key>idVendor</key>
        <integer>2345</integer>
    </dict>
</array>

要清楚,这意味着授权必须是 array -> dictionaries 类型,即使您只需要支持一个供应商 ID。

列出的 idVendor 值还必须由 Apple 嵌入到您的配置文件中,这就是为什么您在申请 DriverKit 权利时必须包含它们的原因。请注意,该表单仅支持一个供应商 ID,因此如果您需要支持多个供应商 ID,您必须将它们全部列在自由格式文本字段中。