3

我不确定如何com.apple.developer.driverkit.transport.usb在我的 dext 权利文件中设置密钥。Info.plist 文件已经包含IOKitPersonalities字典,并且阅读com.apple.developer.driverkit.transport.usb字典看起来应该包含与IOKitPersonalities.

项目的权利文件与WWDC 视频中关于驱动程序套件的内容非常相似,将其设置为:

<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

4

1 回答 1

4

更新的答案
当我发布了一些基于 USB DriverKit 的驱动程序时,我发现实际上它与我最初在答案中所说的略有不同,尽管我最初的答案与 Apple 的文档相匹配。

尽管 Apple 在文档中提到了 USB 传输权利的产品 ID 和供应商 ID,但实际上只有供应商 ID 与权利/代码签名目的相关。这意味着如果您的驱动程序需要支持任意数量的供应商 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,因此如果您需要支持多个,则必须在自由格式文本字段中将它们全部列出。

于 2020-05-06T11:42:54.120 回答