揭秘 DriverKit 代码签名

驱动程序能帮助 Mac 的操作系统与外接硬件设备进行通信,DriverKit 能够帮助你创建这些定制驱动程序。(例如,键盘驱动程序可以启动设备的某些独特功能,如果控制 LED 灯效或实行复杂的宏功能等。)

DriverKit 驱动程序(又称 dext)会与操作系统的敏感部分进行通信,因此你分发的所有驱动程序都需要一套有效的授权。我们会带你熟悉构建与测试驱动程序时管理授权与代码签名的过程,以及如何为开发与分发工作创建配置文件。

DriverKit

Creating a Driver Using the DriverKit SDK

在无授权时开发驱动程序

在分发 DriverKit 驱动程序前,你必须申请授权将你的软件归类为驱动程序,并定义所有受支持的硬件。不过即使你还没有申请或收到 DriverKit 授权,你也可以暂时禁用 macOS 在驱动程序安装过程中进行的安全检查,来开发你的驱动程序。

Requesting Entitlements for DriverKit Development

Debugging and testing system extensions

要这样做,禁用“System Integrity Protection”(系统完整性保护,SIP)并启用“System Extension Developer”(系统拓展开发者)模式。在 Apple 开发者文档中查看“Debugging and Testing System Extensions”(调试并测试系统拓展),获取更多信息。


注意:仅可暂时禁用 SIP 以执行必要的任务,并应尽快重新启用。测试完成后如不重新启用 SIP,你的电脑就很容易遭到恶意代码的攻击。


这样做以后,你需要确保把 DriverKit 驱动程序的代码签名身份设为本地运行。在驱动程序的 Xcode 项目内,打开“Build Settings”标签,把所有目标的“Code Signing Identity”值改为“Sign to Run Locally”。现在,你应该可以在开发机器上构建、测试与调试 DriverKit 驱动程序了。

为 DriverKit 开发使用 Provisioning Profiles(PP 文件)

准备好在多台机器上测试你的驱动程序后,你需要有效的 DriverKit 授权才能创建 Provisioning Profile。

设置手动配置 Provisioning Profile Xcode 可以自动处理一些开发识别器与配置文件工作,但 DriverKit dext 要求手动配置工作。首先,在 developer.apple.com 登入开发者门户,并前往“Certificates, Identifiers, and Profiles”区域。

在“Identifiers”区域内,你需要创建新的识别器与 dext 关联。你可能会在这里看到一些名称前缀为“XC”的识别器。它们就是 Xcode 为你的项目创建的自动识别器。

创建新的识别器时,你需要选择“App ID”选项。DriverKit 驱动程序被视为完整的 App,因此你需要选择此选项,而不是“App Clip”。

接下来,为你的识别器添加恰当的描述,以便在未来将它识别出来,并为你的 dext 提供明确的 Bundle ID。(你可以滚动浏览全部的“capabilities”,了解哪些选项可用。)

你可能会注意到一个“Additional Entitlements”区域。如果你曾被授予特定的 vendor ID 以配合 USBDriverKit 使用,要确保把你的“DriverKit USB Transport - VendorID”授权添加到识别器。

你的“System Extensions”授权允许 App 安装驱动程序。你不必额外检查 DriverKit 驱动程序的“System Extensions”选项。

System Extension Entitlement

制作配置文件 接下来,你需要制作一个配置文件。因为你在活跃开发中创建驱动程序,你需要把配置文件类型选为“macOS App Development”。

将配置文件与你的 App ID 关联,选中你想用到配置文件的证书与开发设备,然后在“Additional Entitlements”区域选中“System Extension and DriverKit template”。这会显示出你已获得的全部 DriverKit 授权,并把这些授权应用到配置文件上。你还需要为配置文件取一个描述性名称。在名称中包含“development”通常是有益的,这能方便你将它与生产环境配置文件区分开来。

完成制作配置文件后,你就可以用它来测试 DriverKit 驱动程序了。(开始之前,别忘了在你的机器上重新启用 SIP!)

developer.apple.com 下载你的配置文件,然后在 Xcode 内将其选中为你的 DriverKit 目标。你还需要将代码签名身份从“Sign to Run Locally”切换为一项证书。完成这些步骤后,你处于开发阶段的 DriverKit 驱动程序就将接受系统的代码签名检查,包括核实证书有效且未过期。

分发与公证驱动程序

准备好向世界分发你的 DriverKit 后,你需要为 dext 制作识别器。你可以使用在开发过程中创建的同一个识别器。不过,如果你没有选择开发签名,你就需要现在创建一个识别器。如果你需要制作识别器,按照上面列出的类似过程进行制作。


注意:不要忘记你的应用和驱动程序必须用专属的识别器——你不可以在创建生产版本时使用同样的识别器或配置文件。


做好识别器后,你需要为包含驱动程序的 macOS App 和 DriverKit 驱动程序本身制作分发配置文件。DriverKit 驱动程序可以在 Mac App Store 直接分发,或者通过其它替代方式分发。为分发创建配置文件时,选择“Mac App Store”以通过 App Store 分发,或者“Developer ID”以自行分发。完成上述操作后,选中你的识别器与目标证书,而且不要忘记把“DriverKit Template Mac (Dist)”选项添加到驱动器的配置文件。

现在,你已经处理好了识别与配置工作,接下来就可以在 Xcode 内构建应用的发行版本了。

  1. 在 Xcode 里前往“Product”(产品)→“Archive”(归档)。
  2. 选中“Distribute App”(分发 App)。
  3. 依据你的发行计划,按照“App Store Connect”或“Developer ID”流程操作,在需要时提供新创建的分发配置文件。

构建分发候选版本后,你可以提交 App 进行公证,这样你就会得到一个正确签名的 DriverKit 驱动程序以供分发了。

Notarizing macOS software before distribution

Resource

DriverKit

从 kexts 移动到系统扩展

View now