gpt4 book ai didi

macOS 系统扩展 : Entitlements and Signing with Provisioning Profile

转载 作者:行者123 更新时间:2023-12-03 16:32:39 27 4
gpt4 key购买 nike

我有一个用于 USB 设备驱动程序的 macOS 系统扩展。当我禁用 SIP 并使用我的 cosign 身份(使用终端的“安全查找身份”从我的 Apple ID 生成)手动签名时,它可以工作 - 如此处所述:https://github.com/knightsc/USBApp/issues/1
我可以激活和停用 dext 并在激活时将其与设备一起使用 - 我所做的和最终的例子如下:
Migrating a codeless KEXT to a codeless DEXT
和这里:
Getting OSSystemExtensionErrorCodeSignatureInvalid After Codeless DEXT is Activated
我获得了 Apple 的授权,并按照他们概述的步骤创建了一个配置文件,然后下载并安装了它。然后,我按照 Apple 的授权电子邮件中引用的步骤手动签署应用程序:https://help.apple.com/xcode/mac/current/#/dev1bf96f17e
我重建了我的应用程序并停用了我的驱动程序的所有现有实例。当我尝试激活新驱动程序时,激活请求失败并显示权利错误:“Error Domain=OSSystemExtensionErrorDomain Code=8”,我知道这表明存在权利/签名问题。

  • 使用 Apple 的配置文件对我的应用程序和驱动程序进行签名的正确方法是什么?
  • 我需要更新我的权利文件吗?这是我现有的文件:

  • 应用程序
    <?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 ID 具有系统扩展功能,但没有附加的 DriverKit 功能。
    dext 的 App ID 具有额外的 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:
    这是我生成配置文件的过程:
  • 注册新的配置文件 - 我在最底部的“分发”下选择“开发人员 ID”。这也是我生成的证书的用途。
  • 生成供应配置文件 - 配置文件类型“Mac”,我选择一个 App ID。
  • 选择证书 - 选择与分发模式兼容的证书。
  • 附加权利 - 选择权利“DriverKit and System Extension Template for Mac Dev ID profile/Mac Direct Dist Profile”这会导致“扩展权利”显示为“com.apple.developer.driverkit”设置为“true”
  • 查看、命名和生成。 - 配置文件名称 - 选择一个名称并生成,然后下载并安装。

  • 更新 3:
    我提交了支持请求,最后得到了回复“我们已联系 DriverKit 权利筛选器更新您的权利模板以包含 USB 传输权利”希望这是进展!

    最佳答案

    一般回答:
    配置文件

  • 您需要在 的开发者帐户“证书、标识符和配置文件”区域中创建一个“应用 ID”。两者 dex 和包含它的应用程序。是的,dext 不是应用程序,但它仍然需要一个应用程序 ID。
  • 对于 dext,确保在“附加功能”下勾选“DriverKit...”项
  • 对于应用程序,确保勾选“系统扩展”。
  • 确保您获得正确的捆绑 ID

  • 设置好 App ID 后,您需要生成 provisioning profiles对于您计划使用的每个签名机制(通过开发者 ID 开发、分发或用于应用程序商店)以及应用程序和 dext。
  • 确保在每个配置文件的“权利”部分下选择正确的"template"。这些"template"似乎是由在 Apple 处理您的权利请求的人手动生成的,因此它们似乎没有一致的命名,但它们通常包含“系统扩展”和“驱动程序套件”。如果您没有看到下拉列表,则您可能没有获得此类代码签名的权利。


  • Xcode 可以自行下载配置文件,但我另外建议将它们下载到本地文件。这是因为您可以在配置文件上使用“QuickLook”来检查它们是否包含您期望的权利!在 Finder 中选择文件并按空格键。 我强烈建议您在执行任何其他故障排除之前,以这种方式检查所有配置文件是否与相关目标的权利匹配。权利文件中列出的所有权利,除了以 com.apple.security. 开头的权利。 , 必须存在于配置文件中,否则将无法工作。
    权利
    嵌入您的 dex 的应用程序需要包含以下权利:
    <key>com.apple.developer.system-extension.install</key>
    <true/>
    有人告诉我(在 WWDC 实验室约会中)您还应该包括 com.apple.application-identifier entitlement 并将其设置为您在上面生成的 App ID,即 10 个字符的前缀,后跟一个点,然后是捆绑 ID。 (前缀通常是您的团队 ID)
    dext 将需要基本的 DriverKit 权利,以及您的驱动程序使用的任何其他 driverkit 子系统的权利,等等。dexts 也被沙盒化了。例如。
    <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以及。
    具体回答:
    由于问题现已更新为权利文件和配置文件的具体内容,我可以发现以下问题:
  • 配置文件不包含 DriverKit USB 权利。也许你只是为了开发而不是分发?无论哪种方式,您都需要要求 Apple 解决此问题。 USB dex 的配置文件在 QuickLook 中应该是这样的:com.apple.developer.driverkit.transport.usb entitlement as it appears in a provisioning profile opened using quicklook. Note that vendor IDs are explicitly listed.
  • 不要在您的 USB(或 PCI)权利中包含产品 ID,除非 Apple 明确向您发出包含它们的配置文件。但是,我认为这不是他们目前所做的事情,因此将它们排除在外。
  • 我不确定 com.apple.developer.system-extension.uninstall 的原始来源是什么权利是,但它似乎出现在网络上的很多地方。不过,它实际上似乎没有必要,Apple 不同意。我不确定为什么您的应用程序启动时包含它,您是否有 amfi_get_out_of_my_way=1在您的 boot-args 中启用?
  • 您未在权利文件中声明的供应配置文件中的剩余权利没有问题。 Xcode 可能会警告它,但它没有实际问题。

  • 如果您在解决所有这些问题后仍然遇到问题,我建议您尝试在错误发生的瞬间捕获一些更详细的日志记录。以下命令行可能会有所帮助:
    log stream --info --predicate='process=="taskgated-helper" || process=="kernel" || process=="trustd" || process=="syspolicyd" || process=="amfid" || process=="sysextd"'
    随时使用您获得的任何有用的诊断信息更新问题,我会尽力帮助找出问题所在。
    附加信息:
    以下内容也可能有帮助:
  • https://developer.apple.com/forums/thread/22943
  • https://developer.apple.com/library/archive/technotes/tn2415/_index.html
  • 关于macOS 系统扩展 : Entitlements and Signing with Provisioning Profile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63927475/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com