我有一个macOS设备驱动程序的系统扩展。当我禁用SIP并使用我的codesign (使用我的Apple使用终端的“安全查找-标识”生成)手动签名时,它可以工作--如下所述:https://github.com/knightsc/USBApp/issues/1
我可以激活和禁用右旋,并在激活时与设备一起使用它--我所做的和最后得到的例子如下:
在这里:
激活无码右旋体后获取OSSystemExtensionErrorCodeSignatureInvalid
我获得了苹果的授权,并遵循了他们概述的创建配置文件的步骤,然后下载并安装了配置文件。然后,我按照Apple电子邮件中引用的步骤手动签署应用程序:https://help.apple.com/xcode/mac/current/#/dev1bf96f17e
我重建了我的应用程序,并关闭了我的驱动程序的所有现有实例。当我试图激活新的驱动程序时,激活请求会失败,并出现应享权利错误:"Error Domain=OSSystemExtensionErrorDomain Code=8",我知道这是权利/签名问题的一个指示。
应用程序
<?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>
右旋
<?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>LEGACY VID</integer>
<key>idProductArray</key>
<array>
<integer>PID1</integer>
<integer>PID2</integer>
<integer>PID3</integer>
<integer>PID4</integer>
<integer>PID5</integer>
</array>
</dict>
<dict>
<key>idVendor</key>
<integer>NEW VID</integer>
<key>idProductArray</key>
<array>
<integer>PID6</integer>
</array>
</dict>
</array>
<key>com.apple.security.app-sandbox</key>
<true/>
</dict>
</plist>
任何帮助都将不胜感激。
更新:
应用程序的App具有系统扩展功能,但没有附加的DriverKit功能。
dext的App具有额外的DriverKit功能。
应用程序的配置配置文件有
- com.apple.developer.driverkit set true
- com.apple.application-identifier set to <Team ID>.<App Bundle Identifier>
- keychain-access-groups set to <Team ID>.*
- com.apple.developer.system-extension.install set to true
- com.apple.developer.team-identifier set to Team ID
Dext的配置配置文件有
- com.apple.developer.driverkit set true
- com.apple.application-identifier set to <Team ID>.<Driver Bundle Identifier>
- keychain-access-groups set to <Team ID>.*
- com.apple.developer.team-identifier set to Team ID
更新2:
下面是我生成供应配置文件的过程:
更新3:
我提交了一个支持请求,并最终得到了响应“我们已经联系了DriverKit权利筛选器,让您的权利模板更新,包括”,希望这是进步!
发布于 2020-09-16 13:30:00
一般答覆:
供应配置文件
Xcode可以下载配置文件本身,但我还建议将它们下载到本地文件中。这是因为您可以在供应配置文件上使用"QuickLook“来检查它们是否包含您期望的权利!选择Finder中的文件并按空格键。在进行任何其他故障排除之前,我强烈建议您检查所有供应配置文件是否与所讨论的目标的应享权利相匹配。除以com.apple.security.
__,开头的配置文件之外,在权利文件中列出的每个权利都必须存在于供应配置文件中,否则它将无法工作。
权利
嵌入您的dext的应用程序将需要包括以下权限:
<key>com.apple.developer.system-extension.install</key>
<true/>
我被告知(在WWDC实验室的约会中),您还应该包含com.apple.application-identifier
权限,并将其设置为上面生成的应用程序ID,这是10个字符的前缀,后面是一个点,后面是包ID。(前缀通常是您的团队ID)。
该右旋车将需要基本的DriverKit权利,加上任何其他驱动程序使用的驱动程序子系统的权利,等等。灵巧也是沙箱。例如。
<key>com.apple.developer.driverkit</key>
<true/>
<key>com.apple.developer.driverkit.transport.usb</key>
<array>
<dict>
<key>idVendor</key>
<integer>1452</integer>
</dict>
</array>
<key>com.apple.security.app-sandbox</key>
<true/>
同样,您显然也应该包括com.apple.application-identifier
。
具体答复:
由于问题已由应享权利文件和准备金配置文件的具体内容更新,我可以发现以下问题:
com.apple.developer.system-extension.uninstall
权利的原始来源是什么,但它似乎出现在网络上的许多地方。不过,这似乎并不是必要的,苹果也不同意。我不知道你的应用程序为什么要推出它,你是否在你的boot-args
中启用了boot-args
?如果您在修复所有这些之后仍然遇到问题,我建议您尝试在错误发生的瞬间捕获更详细的日志记录。以下命令行可能会有所帮助:
log stream --info --predicate='process=="taskgated-helper" || process=="kernel" || process=="trustd" || process=="syspolicyd" || process=="amfid" || process=="sysextd"'
请随时用您获得的任何有用的诊断信息来更新这个问题,我会尽力帮助您解决问题的。
其他信息:
以下几点也可能有帮助:
发布于 2020-10-14 13:56:05
我使用apple developer帐户中的证书、标识符和概要文件页面中生成的供应配置文件中所包含的权利。
对于应用程序和dext,我都创建了一个“标识符”,并具有正确的权限(应用程序的“系统扩展”,以及DriverKit的“”作为右转的附加功能)。
然后,生成两个配置文件,一个用于应用程序,一个用于右旋。下载这些。
然后,您可以用这个makefile规则为应用程序和dext生成一个plist:
%.plist: %.provisionprofile
security cms -D -i $< | plutil - extract Entitlements xml1 - -o $@
这保证了您使用的权利将与您的提供配置文件指定的内容相匹配。
如果在提供配置文件中没有正确的应享权利,则没有选择正确的权利。或者,苹果还没有授予您正确的权限(因此,在创建标识符时,它们无法进行选择)。
https://stackoverflow.com/questions/63927475
复制相似问题