文章

在分发前对 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 公证服务,并将生成的凭证附加到你的可执行文件。

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

相关主题

公证

另请参阅

保护代码