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

tup*_*cat 4 usb iokit entitlements macos-system-extension driverkit

我不确定如何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/>
Run Code Online (Sandbox Code Playgroud)

当我将其设置为 时<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)
Run Code Online (Sandbox Code Playgroud)

这个权利应该只反映字典中的内容吗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)
Run Code Online (Sandbox Code Playgroud)

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

我正在查看与应用程序相关的日志行log stream --source | grep MyUserUSBInterfaceDriver

pmd*_*mdj 5

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

\n

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

\n
<key>com.apple.developer.driverkit.transport.usb</key>\n<array>\n    <dict>\n        <key>idVendor</key>\n        <integer>1234</integer>\n    </dict>\n    <dict>\n        <key>idVendor</key>\n        <integer>2345</integer>\n    </dict>\n</array>\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n

更新2:

\n

自 2022 年中/后期以来,Apple 一直向开发计划的所有成员提供某些 DriverKit 权利,无需特殊申请,仅用于开发签名。这包括 USB 传输权利。\xe2\x80\x9cfree\xe2\x80\x9d 版本采用通配符形式,由字符串 \xe2\x80\x9c*\xe2\x80\x9d 而不是数字组成。当使用具有此版本的权利的配置文件时,您的 dext\xe2\x80\x99s 权利文件也需要使用星号。

\n

平台

\n

尽管文档(我们在上面建立的文档在其他方面也是不正确的)仅提到了 macOS,但为 iPadOS开发和部署基于 USBDriverKit 的驱动程序也需要此权利。申请时请务必针对与您的项目相关的所有平台提出请求。上一段有关仅自助通配符开发权利的段落也适用于 iPadOS。

\n