文章

在分发前对 macOS 软件进行公证

将 macOS 软件提交到 Apple 进行公证,从而进一步提高用户对您软件的信心。

概览

公证让用户可以更加放心,确信您分发的且用 Developer ID 签名的软件已通过 Apple 的恶意组件检查。公证并不是 App Review 审核。Apple 公证服务是一个自动化系统,它会扫描您的软件中有没有恶意内容,检查有没有代码签名问题,并将结果迅速返回给您。如果没有问题,公证服务会生成一个凭证,供您附加到您的软件上;公证服务还会将该凭证发布到网上,让“门禁”能够找到它。

当用户首次安装或运行您的软件时,“门禁”通过该凭证 (不论是网上还是附加于可执行文件) 可确保该软件已经过 Apple 公证。然后,“门禁”会在初始启动对话框中置入描述信息,让用户能明智地决定是否启动相应的 app。

截屏中显示了“门禁”的对话框,这个对话框告知用户 Apple 已公证过正在启动的 app。

您可以为多种不同类型的软件交付内容进行公证,包括:

  • macOS app

  • 非 app 套装,如内核扩展

  • 磁盘映像 (UDIF 格式)

  • 扁平化安装器软件包

万一您的 Developer ID 签名密钥遭到泄露,公证也能保护您的用户。公证服务会为使用您的签名密钥分发的软件维护一个审查记录。如果您发现自己软件的未授权版本,则可以与 Apple 合作来撤销与那些版本关联的凭证。

准备公证您的软件

公证要求使用 Xcode 10 或更高版本。构建需进行公证的新 app 需要使用 macOS 10.13.6 或更高版本。为 app 附加凭证需要 macOS 10.12 或更高版本。

Apple 的公证服务要求您采用以下保护:

Apple 建议您对分发的所有软件进行公证,包括旧发行版本,甚至是不满足所有这些要求或没有签名的软件。Apple 的公证服务利用各种各样的方法 (包括遥测) 来确定上述规则中有哪些可以对既有软件放宽要求。有关更多信息,请参阅“对您的既有软件进行公证 (英文)”。

对插件进行公证

在 macOS 10.15 及更高版本中,app 可以载入隔离的插件 (从互联网下载或通过“隔空投送”传输),但前提是这些插件要经过公证。如果插件未经公证,用户必须通过打开“系统偏好设置”app,并找到“安全与隐私”中的“通用”标签页来明确批准插件。

添加插件所需的授权

当您根据公证要求启用强化版运行时实施的额外安全性时,这会同时影响您的 app 本身和 app 托管的任何插件。插件不会自己声明授权,而是会继承主机进程的授权。因此,主机 app 必须包含预期插件需要的所有授权,即使这些插件已经另外经过公证也是如此。

例如,如果插件通过 C 函数指针覆盖实施与主机可执行文件的深度集成,或者将 JavaScript 引擎用于自定工作流程,那么主机可执行文件必须分别声明 Allow Unsigned Executable Memory Entitlement (英文)Allow Execution of JIT-compiled Code Entitlement (英文)。在一些情形中,如果主机可执行文件缺少适当的授权,插件甚至无法载入。

另外,也请附上资源访问授权 (如地址簿或位置访问授权) 和相关的用途字符串,以支持 app 的插件。例如,如果提供传真服务的打印对话框扩展 (PDE) 想要访问用户的联系人列表,主机可执行文件必须声明 Address Book Entitlement (英文) 并在其信息属性列表 (英文) 中为要运行的插件附上 NSContactsUsageDescription (英文) 用途字符串。

如需强化版运行时授权的完整列表,请参阅“强化版运行时 (英文)”。有关用途字符串的信息,请参阅“请求访问受保护的资源 (英文)”。

在分发流程中自动公证您的 App

在将您的 app 直接分发给客户前,您的帐户持有人必须使用您的 Developer ID 为 app 签名。Xcode 的 Organizer 窗口包含用于生成 app 可分发版本的工作流程。在 Xcode 10 及更高版本中,这个工作流程包含一个用于自动公证 macOS app 的选项。要使用这个工作流程对您的 app 进行公证,请进行以下操作:

  1. 打开您的 Xcode 项目。

  2. 为您的 app 创建归档。

  3. 打开 Xcode 的 Organizer 窗口。

  4. 在“Archives”(归档) 标签页中,选择您创建的归档。

  5. 点按“Distribute App”(分发 App),以查看分发选项。

  6. 选取适用于您的分发方法的 Developer ID。

  7. 点按“Next”(下一步)。

  8. 选取“Upload”(上传),将您的归档发送到 Apple 公证服务。

  9. 点按“Next”(下一步)。

    截屏中显示 Xcode 的 Organizer 窗口,其中显示了给定归档的“Upload”(上传) 和“Export”(导出) 目的地选项。

点按“Next”(下一步) 时,Xcode 会将您的归档上传到公证服务。上传完成时,公证服务会开始扫描流程,用时通常不到一小时。在公证服务扫描您的软件期间,您可以继续对归档进行分发准备。例如,您可以导出归档,并完成在将软件提供给客户前需要进行的最终测试。

当公证流程结束时,Xcode 会下载凭证并附加到您的归档。这时,再次导出您的归档,就能获得含有公证凭证的可分发版软件。有关如何使用 Xcode UI 上传软件的更多信息,请参阅“上传 macOS app 进行公证”。

对于 macOS app 以外的目标,可使用 altool 命令行实用程序来公证,具体如“自定公证工作流程 (英文)”中所述。

对既有软件进行公证

在您对既有软件进行公证后,“门禁”会在用户尝试运行该软件时提醒用户。它也有助于公证服务将您的合法软件和遭到篡改的变体区分开来。您可以对现有的磁盘映像、安装器软件包或含有您的 app 的 ZIP 归档进行公证。

要对您的既有软件进行公证,请进行以下操作:

  1. 使 Xcode 10 成为您的活跃 Xcode 安装。(如果您不确定 Xcode 10 是不是活跃的安装,请使用 xcode-select 命令行使它处于活跃状态。有关如何使用此工具的信息,请参阅对应的手册页,具体如“阅读 UNIX 手册页 (英文)”中所述。)

  2. 将您的软件上传到 Apple 公证服务,具体如“将您的 App 上传到公证服务 (英文)”中所述。

  3. 将返回的凭证附加到您的现有软件,具体如“将凭证附加到您的分发 (英文)”中所述。

如需关于如何解决公证期间可能出现的问题的提示,请参阅“解决常见的公证问题 (英文)”。

在您的构建脚本中添加公证步骤

如果您使用自动化构建系统,可以将公证流程整合到现有的构建脚本中。通过 altoolstapler 命令行工具 (Xcode 已随附),您可以将软件上传到 Apple 公证服务,并将生成的凭证附加到您的可执行文件。

有关如何将公证整合到自定构建脚本的信息,请参阅“自定公证工作流程 (英文)”。

相关主题

公证

另请参阅

保护代码