问题描述
我们请求获得权限 com.apple.developer.driverkit.userclient-access
以访问捆绑 ID com.example.driver
的 Driverkit 驱动程序,用于捆绑 ID com.example.app
的应用程序已处理,但我们不确定我们是否获得了正确的权利。当我们为应用生成新的配置文件并使用 security cms -D -i
检查配置文件中的权利时,它说:
<key>Entitlements</key>
<dict>
<key>com.apple.developer.driverkit</key>
<true/>
<key>com.apple.developer.driverkit.userclient-access</key>
<true/>
<key>com.example.driver</key>
<true/>
<key>com.apple.developer.system-extension.install</key>
<true/>
<key>com.apple.application-identifier</key>
<string>1234567890.com.example.app</string>
<key>keychain-access-groups</key>
<array>
<string>1234567890.*</string>
</array>
<key>com.apple.developer.team-identifier</key>
<string>1234567890</string>
</dict>
读取 here 看起来 com.apple.developer.driverkit.userclient-access
键值应该是数组而不是布尔值(注释 here 表示 com.apple.developer.driverkit.userclient-access
可以是布尔值,但是仅当权限用于一个 dext 与另一个 dext 通信时)
配置文件中的上述权利是否正确?如果不是,应如何享有权利?如果有人可以在可以与 driverkit 驱动程序通信的应用程序的配置文件中发布权利,那将会非常有帮助。
解决方法
com.apple.developer.driverkit.userclient-access
键确实应该是列有包 ID 的字符串数组。这是我在“演示”DriverKit 项目中为应用程序提供的 .entitlements 文件中的内容,我将其用于原型设计:
<?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.userclient-access</key>
<array>
<string>eu.dennis-jordan.DemoDriver.DemoDriverExtension</string>
</array>
<key>com.apple.developer.system-extension.install</key>
<true/>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.temporary-exception.iokit-user-client-class</key>
<array>
<string>IOUserUserClient</string>
</array>
</dict>
</plist>
请注意,这是一个沙盒应用,因此还需要 com.apple.security.temporary-exception.iokit-user-client-class
。