工程文章

macOS 27 Mac App 公证前怎么验收?2026 清单

macOS 27 Mac App 公证前怎么验收?2026 清单

数据点: Apple 已说明,macOS 27 将是 Rosetta 支持 Intel 应用的最后一个版本;Intel-only 应用在运行 macOS 27 的 Apple silicon Mac 上无法继续依赖 Rosetta。(Apple 关于 Rosetta 支持变化的说明) 因此,macOS 27 Mac App 公证前验收不能止于签名或公证状态:直接分发要按最终交付物检查 Developer ID 签名、公证结果和用户侧启动;Mac App Store 分发则走商店提交链路,不套用同一套公证流程。先在隔离构建环境完成验收,再把通过验证的步骤用于正式发布。

适合谁看:直接向用户分发 Mac App、需要在发布前核对签名、公证与交付文件的独立开发者。
使用 DMG 或 PKG 的小团队,需要把镜像、安装包和应用本体分开验收。
没有本地 Mac,或需要固定发布环境的开发者,也可以据此判断远程 Mac 是否适合承载重复验收。

最后更新于 2026 年 11 月 6 日;核实依据:Apple 的公证指南、notarytool 工作流文档、分发说明和 macOS 发布信息。

macOS 27 Mac App 公证前验收,先按分发渠道划边界

直接分发与 Mac App Store 分发的安全检查并非同一条流程。Apple 将直接分发的公证用于 Gatekeeper 检查软件来源及是否被篡改;Mac App Store 提交则包含相应安全检查,不要求开发者机械地另做一遍直接分发用公证。(macOS 软件公证指南) (Apple 的应用分发说明)

分发场景 发布前要验收的对象 关键证据 不能据此推断
直接交付 .app 或 ZIP 签名后的应用及实际发给用户的文件 Developer ID 身份、notarytool 提交状态与日志、票据验证、启动记录 单独看到“Accepted”就证明交付包和启动都正常
DMG 最终 DMG,以及从镜像挂载出的应用 镜像提交与票据状态、挂载后应用签名、启动测试 镜像内应用通过公证就等于镜像本身已验收
PKG 安装包及安装后的应用 安装器签名、公证记录、安装结果、应用签名与启动记录 安装包通过公证就等于安装后的应用一定可用
Mac App Store 商店提交的归档及实际发布版本 提交和处理记录、线上版本与预期构建的对应关系 必须重复执行直接分发的 Developer ID 公证步骤

上述差异来自 Apple 对可提交公证对象及交付测试的说明:公证服务可以处理应用、磁盘映像和扁平安装包;如果应用放在镜像里的安装包中,签名与公证对象也需按实际打包结构确定。(公证工作流定制说明) (Mac 软件打包与分发说明)

决策条件:

直接分发:签名、公证与启动必须连成一条证据链

Apple 要求直接分发的软件使用 Developer ID 签名;提交公证的 macOS 应用还必须启用 Hardened Runtime。该能力会限制部分运行时行为;应用确实需要例外能力时,应只配置其所需权限,并记录为何需要,而不是为了让构建通过而随意放宽。(Hardened Runtime 文档)

验收层 核对内容 建议留存的证据
签名身份 应用是否由预期 Developer ID 身份签名,嵌套代码是否一并有效 签名检查输出、构建版本与签名身份记录
运行时安全 Hardened Runtime 是否启用,例外权限是否与功能需要相符 导出的 entitlement、审核记录
公证结果 notarytool 对应提交是否被接受,日志是否有警告或问题 submission ID、状态输出、JSON 日志
票据处理 最终交付对象是否已附加票据,验证工具是否通过 stapler 输出、验证结果
用户侧运行 实际交付物是否能挂载或安装,应用是否能启动 测试系统版本、目标架构、操作记录

这里有几个常被混为一谈的边界:

对于常见的命令行流程,先从 Xcode 导出可提交的文件,再用 notarytool submit 提交;记录返回的提交标识,等待结果后用 notarytool log 保存 JSON 日志。Apple 特别提示,即使提交成功也应检查日志,因为其中可能仍有值得修正的警告。

⚠️ 验收记录要能对应到同一个构建:应用版本、提交文件名或校验信息、submission ID 和最终交付文件都应可追溯。若公证后又改动应用内容或重新打包,不能把旧文件的验证结果直接移植到新文件。

DMG 与 PKG:分别验收容器和安装结果

DMG 和 PKG 的区别不只是文件后缀。验收应跟着用户实际下载、挂载或安装的对象走,而不是只看开发目录里的应用。

DMG 场景:先确认提交公证的是否为最终 DMG。完成处理后,按交付方式验证镜像票据,再挂载该镜像,检查其中应用签名并实际启动。若镜像里还有其他可执行内容,也要确认它们包含在预期的提交范围内。Apple 的打包说明指出,交付前应测试实际制作出的安装包、磁盘映像或 ZIP,而不是只测开发用副本。

PKG 场景:先检查安装器签名与公证记录,再从正式 PKG 安装应用,检查安装路径、安装后应用签名及启动结果。若实际交付的是包含安装包的 DMG,要按实际结构决定对哪个对象做公证与票据处理,不能把“PKG 成功”自动视为“DMG 已验收”。

ZIP 场景:notarytool 可以处理包含应用的 ZIP,但 Apple 说明不能直接把票据 stapling 到 ZIP 文件本身;应对归档内的相应项目处理票据,再重新制作最终 ZIP。此时要确认用户拿到的 ZIP 确实由已验证的项目生成。

更换文件名本身未必意味着文件内容变化,但重新导出、修改资源、替换嵌套组件或重新压缩都可能使“验收对象”与“实际发布对象”不再相同。项目应保留最终文件的识别信息,并在每次重新制作交付物后复核票据和启动测试。

Mac App Store:把验收重点放到商店链路

通过 Mac App Store 分发时,应用提交到商店的过程已经包含相应安全检查。此时应核对 Xcode 导出的归档是否是预期构建、提交处理是否完成,以及实际发布版本能否对应回该构建,而不是对着直接分发清单逐项硬套 Developer ID 公证。

有混合分发的项目要拆开记录:商店版和网站直发版如果使用不同的签名、构建设置、功能权限或打包方式,就应分别验收。商店流程的结果不能替代网站下载包的公证记录,网站版本的票据也不能证明商店线上构建正确。

macOS 27 的目标环境与远程发布流程

macOS 27 的兼容性验收要与公证验收分开。Apple 说明 macOS 27 将是 Rosetta 的最后一个支持版本,并建议开发者为 Apple silicon 提供原生支持;这意味着 Intel-only 应用不能在 macOS 27 的 Apple silicon 目标环境中依靠 Rosetta 启动。所以,公证通过并不能替代架构与目标系统测试。构建记录至少应说明使用的 Xcode、SDK、目标架构和实际测试系统;具体兼容范围以 Apple 当前资料及项目自身测试为准。

远程 Mac 可以承载重复构建与公证验收,但签名凭据、网络访问、构建产物传输和用户侧测试都要纳入流程。Apple 的自动化说明支持在脚本环境中使用 xcodebuild 导出归档,再调用 notarytool 提交;这说明可自动化的是流程衔接,不代表任意远程环境都已经具备所需条件。(Xcode 归档流程定制说明)

建议按以下顺序建立可复核的发布流程:

如果远程环境不允许安全存放签名凭据、无法访问公证所需服务,或无法对最终交付物执行实际启动测试,就不应把它作为唯一发布验收环境。可查看数据与隐私说明,先核对远程环境是否符合项目的凭据管理要求;若还在评估独立 Mac 环境,也可参考Mac 远程租赁方案。实际可用的系统、工具链和配置,应以服务页面及项目实测为准,不能仅凭“远程 Mac”推定。

发布前 FAQ

Developer ID 签名后,如何确认公证成功?
以 notarytool 对应提交的状态为准,并保存 submission ID 与 JSON 日志;随后处理并验证最终交付物的票据。再从用户会取得的文件进行启动测试。只看到签名有效或上传完成,仍不足以证明公证已经完成,更不能证明应用在目标系统上能正常启动。

DMG 和 PKG 的验收要点有什么不同?
DMG 验收要覆盖镜像本身、挂载结果及应用启动;PKG 验收要覆盖安装器签名、公证状态、安装后的应用签名和启动。交付物的外层容器与内部应用是不同检查对象,按一个对象得到的结果不能自动替代另一个对象的检查。

Mac App Store 版也要走 Developer ID 公证吗?
不应机械套用网站直发的 Developer ID 公证流程。Mac App Store 提交链路包含相应安全检查,项目验收应聚焦提交归档、处理状态和最终发布版本;如果同时向网站提供独立安装包,则该直发版本仍应单独验收。

远程 Mac 能完成签名和公证验收吗?
可以在具备所需 Xcode、网络访问和受控签名凭据的远程 Mac 上完成构建、签名、公证提交与日志核验。最后仍需检查真正交付给用户的文件,并验证其在目标 macOS 环境中的启动;远程主机上的成功记录不能替代这一环节。

更换交付文件后,之前的验收还有效吗?
只要最终交付对象与已验收对象不再能明确对应,就应重新核对。重新导出、修改应用内容、替换嵌套代码或改用另一种打包格式,都可能改变需要验证的对象;应为新产物保留自己的公证状态、票据验证和启动测试记录。

macOS 27 Mac App 公证前验收的核心,是让签名、公证记录和最终交付文件指向同一个可复核的构建,再独立验证目标环境中的启动。自建实体 Mac 适合需要长期固定负载或物理接口的团队;临时测试则未必值得专门购置设备。对需要重复构建、公证和发布验收、但暂时不想维护本地 Mac 的开发者,远程租用 Mac 可作为固定发布环境的选项;是否合适,应先确认工具链、凭据管理和用户侧测试都能闭环。

常见问题

macOS 27 的 Mac App 发布前,哪些公证项目要逐项核对?

先确认分发渠道;直接分发时核对 Developer ID 身份、Hardened Runtime、签名完整性和 notarytool 返回状态。再检查提交对象是否与最终下载文件一致、票据是否附加,并从隔离环境挂载或安装最终交付物,实际启动应用。保存提交编号、日志和验证结果,不能只留一张成功截图。

Developer ID 签名完成后,怎样确认公证确实成功?

签名有效不代表公证成功。用 notarytool 查询该次提交的状态,保存 submission ID,并下载 JSON 日志查看状态、警告和错误;成功后按交付类型附加票据,再用 stapler validate 检查票据。最后对实际交付物做 Gatekeeper 评估和用户侧启动测试,形成可复核的完整记录。

DMG 和 PKG 的公证验收步骤有什么区别?

DMG 应以用户下载的镜像作为验收对象,检查镜像提交、公证票据、挂载后的应用签名和启动情况。PKG 则要分别核对包的安装器签名、公证状态,以及安装完成后应用本身的签名和启动。若只验证包内应用,不能据此认定 DMG 或 PKG 已完整验收。

从 Mac App Store 发布,还需要单独走 Developer ID 公证吗?

通常不需要把直接分发用的 Developer ID 公证流程原样套到 Mac App Store 应用上;商店提交本身包含相应安全检查。验收应转向商店提交的归档、处理结果、实际发布版本和用户获得的构建产物。留存提交与发布记录,并确认线上版本对应预期构建。

远程 Mac 可以完成签名、公证和发布前验收吗?

可以将构建、签名、notarytool 提交、下载日志、附加票据和交付物验证串成远程流程,前提是环境具备所需工具、网络访问和受控的签名凭据。远程验收仍需测试最终 DMG 或 PKG,并记录目标系统及架构;远程构建主机能完成公证,不等于已证明用户环境可以启动应用。

延伸阅读

OrbVPS 云端 Mac

用 OrbVPS 远程 Mac 完成公证前验收

在持续可控的独享 Mac 上检查签名、公证结果与首次启动表现,按直接分发流程验证应用。

立即租用云端 Mac