公证提交被 macOS 环境卡住,或你正打算把发布流水线迁到 Windows、Linux?
最快判断:只做公证提交与状态查询时,Notary API 可以免去这段交互对 macOS 的依赖;完整构建、签名、票据装订和交付验收仍要分别核对。已有 Xcode 发布链路,先用 notarytool;只有确实需要跨平台提交,再评估 Notary API。
本文适合维护 macOS App 站外分发流程、正在评估 Windows 或 Linux 提交流水线的独立开发者,以及负责签名凭据和发布验收的小团队。
SECTION 01 发布里程碑:先定位卡点,再换工具
| 里程碑 | 本周建议动作 | 判断依据 |
|---|---|---|
| 产物就绪 | 确认待提交文件已由现有流程构建并签名 | Notary API 处理的是与公证服务交互,不会替你构建或签名应用。 |
| 提交与跟踪 | 先核对当前流水线是否能运行 notarytool |
Apple 将 notarytool 和 Notary API 都列为与公证服务交互的方式。 |
| 交付验收 | 把票据装订、日志检查和目标产物测试单列为验收项 | 提交成功不等于交付包已完成验收。 |
| 读者与环境 | 优先方案 | 主要取舍 |
|---|---|---|
| Xcode 已负责构建、签名和发布 | notarytool |
少维护一套 REST API 调用、上传和状态跟踪逻辑;后续仍需检查装订与交付产物。 |
| Windows 或 Linux 流水线只需提交并查询结果 | Notary API | 公证服务交互可移出 macOS;团队要自行处理 API 认证、文件上传、状态跟踪及日志。 |
| 外部构建系统已产出签名文件,发布平台可执行命令行工具 | 先评估 notarytool,再考虑 API |
自定义工作流可以替换公证服务交互环节,但要比较新增 API 维护与现有工具链的成本。 |
Xcode 公证必须用 Mac 吗:已有 Xcode 发布链路
如果你已在 Mac 上用 Xcode 构建、签名并发布,通常没有必要仅为提交和查状态另建一套 Notary API 客户端。notarytool 随 Xcode 提供,适合接入自定义脚本;如果你走 Xcode 的标准分发流程,也可以使用 Organizer 中的公证选项。Apple 对 Xcode 命令行工具的说明列出了 notarytool,而公证指南也介绍了 Organizer 中的分发工作流。(developer.apple.com)
这里要区分“能否不用 API”和“能否不用 Mac”。Notary API 可以替代 notarytool 与公证服务交互的那一段,但不会让已有 Xcode 构建流程自动变成跨平台流程。若你的构建、签名、产物整理和交付检查都已在 Mac 上运行,换成 API 可能只是把简单命令行步骤换成需要维护的请求、上传和错误处理逻辑。
| 流程环节 | notarytool 路径 |
Notary API 路径 |
|---|---|---|
| 发起提交 | 命令行工具与公证服务交互 | 请求提交接口,取得上传信息和提交标识 |
| 上传及状态查询 | 由工具工作流承接 | 流水线上传产物,并自行查询状态或处理通知 |
| 读取公证日志 | 使用工具读取日志 | 请求日志接口,再下载日志文件 |
| 票据装订与验收 | 仍需单独检查装订和交付产物 | 不能因为使用 API 就假定这些步骤自动完成 |
Apple 将 Notary API 的职责列为准备提交、取得上传凭据、查询状态、获取日志及查看历史提交;因此,API 替换的是服务交互环节,不是整个发布链路。(developer.apple.com)
Windows 或 Linux 提交流水线
notarytool 可以在 Windows 或 Linux 上运行吗? Apple 将它描述为随 Xcode 提供的命令行工具;如果流水线没有 macOS 环境,就不要把它当成可直接移植的跨平台工具。Notary API 则是 Apple 明确提供的、用于避免公证交互依赖 macOS 的 REST 接口。(developer.apple.com)
但这并不意味着整个 macOS App 发布流程都能在非 Mac 环境完成。你需要分别确认产物由谁构建、代码由谁签名、使用哪种 Developer ID 证书,以及后续票据装订和交付验收在哪里执行。Apple 对站外分发的准备要求包括有效代码签名、Developer ID、Hardened Runtime 和安全时间戳;公证 API 不会替你补齐这些条件。(developer.apple.com)
外部构建系统与跨平台 API
Notary API 能否替代 notarytool 完成 macOS App 公证?可以替代与公证服务交互的部分,但不能据此认定它替代了完整公证发布工作流。Apple 的网页提交流程说明,REST API 用于替换自定义工作流中依赖 notarytool 的上传与状态查询环节。
现有 Xcode 流程的 API 迁移条件
如果你的构建系统已生成签名后的分发文件,而 Windows 或 Linux 发布节点必须负责提交,API 才可能解决一个明确的环境约束。相应代价是:你要自行编排请求、上传、状态跟踪、失败重试、日志留存和凭据保护;如果现有系统能运行 notarytool,保留命令行工具往往更直接。
当发布平台无法使用 macOS 工具、提交环节必须跨平台,且团队愿意维护 API 调用与凭据管理时,再考虑迁移。若只是想把构建或签名移出 Mac,Notary API 并不能解决这个问题;应先改造对应的构建或签名环境,而不是把公证接口当作替代品。(developer.apple.com)
API 密钥与临时上传凭据
Notary API 不只是“换一种上传命令”。Apple 的网页提交流程要求请求携带由私钥签名的 JWT,并建议令牌在创建后短时间过期,例如 20 分钟;令牌可在过期前复用。发起提交后,服务会返回提交标识和用于上传文件的临时安全凭据,这些凭据在取得后 12 小时过期,过期未使用就需要重新发起上传流程。(developer.apple.com)
这两种有效期属于不同凭据:JWT 用于授权 API 请求,临时上传凭据用于上传文件。负责发布的团队要明确私钥由谁保管、哪些流水线有权签发请求、上传凭据是否仅在需要时注入,以及日志如何屏蔽令牌和凭据信息;不要把可复用凭据写进构建日志或提交记录。
票据装订与交付验收
不在 Mac 上提交公证后还需要 stapler 吗?要单独判断。API 提交得到通过结果,不代表 API 已替你的最终分发文件完成票据装订;Apple 的自定义公证工作流把提交、读取结果和使用 stapler 装订票据分别说明。需要本地装订时,应把这一步安排在具备相应 macOS 工具的环境,并以最终交付文件复验。(developer.apple.com)
| 最终交付检查 | 需要核对什么 | 不通过时的处理 |
|---|---|---|
| 公证结果 | 查询最终状态,并留存提交标识 | 状态未完成或失败时,先读取日志,不把提交成功响应当作通过 |
| 公证日志 | 检查错误与警告;通过后也要查看警告 | 按日志修复问题,再重新提交或补做针对性测试 |
| 票据与产物 | 对实际发给用户的 App、磁盘映像、安装包或 ZIP 产物复验 | 不要只检查中间归档;重新确认装订对象就是最终交付物 |
| 用户侧验收 | 从最终安装包或分发文件测试安装与启动 | 发现 Gatekeeper 或签名异常时,回到签名、装订及封装环节排查 |
Apple 提醒,公证日志即使在通过时也可能包含警告;直接分发的软件应使用实际制作的安装包、磁盘映像或 ZIP 文件测试。若不装订票据,用户的 Mac 离线时,Gatekeeper 可能无法从网络获取票据,因此应把离线情形纳入交付验收。(developer.apple.com)
按条件选择发布路径
- 若你已在 Mac 上用 Xcode 完成构建与签名,且现有脚本能运行
notarytool,就先保留notarytool;把日志检查、装订和最终包验收补齐,而不是先增加 API 集成。 - 若提交和状态查询必须由 Windows 或 Linux 节点执行,且签名产物已在别处准备好,就评估 Notary API;先做密钥托管、上传重试和日志脱敏设计,再决定是否迁移。
- 若你希望通过 API 解决构建或签名没有 Mac 的问题,就不要直接迁移;先单独核实构建与签名工具链,API 只覆盖公证服务交互。
- 若团队无法稳定管理 API 私钥和临时上传凭据,或最终仍需要 Mac 执行装订与验收,就保留 Mac 发布节点;API 未必能减少整体运维复杂度。
远程 Mac 作为发布环节的备选
如果你在 Windows 或 Linux 上维护主要流水线,但某些步骤确实依赖 Xcode、notarytool 或 stapler,可以把工作拆成跨平台提交与 Mac 工具环节,而不是假定单一 API 能覆盖所有发布责任。Apple 的 Xcode 工具文档说明 notarytool 属于其命令行工具;实际采用前,应在你自己的项目上验证所需工具是否可用。
建议按发布里程碑做小范围验证:
- 选一个可重复构建的真实项目,固定源代码版本和交付目标。
- 确认构建系统产出的文件类型、签名状态和文件校验值,并记录由哪个环境完成构建与签名。
- 在候选 Mac 环境确认 Xcode 及所需命令行工具可用,再运行现有公证流程。
- 如果比较 Notary API,在非 Mac 节点只验证提交、上传、状态查询和日志读取,不把该结果当成完整发布通过。
- 对实际分发的最终文件检查票据装订,并在目标 Mac 上完成安装和启动验收;将失败点归入构建、签名、提交、装订或交付环节。
- 根据故障归属决定是否保留 Mac 节点、改用 Notary API,或采用两者分工的混合流程。
如果你需要核对远程使用 Mac 的基本方式,可先查看 VPSNIX 帮助中心;若在评估按需使用 Mac 的费用,再查看 VPSNIX 套餐信息。远程 Mac 适合验证 Xcode 工具链、签名、装订或短期发布任务,并不是公证的唯一方案;若团队长期高频运行发布任务,或必须连接特定物理设备,先比较自购 Mac、现有 Mac 与按需租用的总成本和操作条件。Windows 或 Linux 方案便于复用现有发布节点,但仍要处理 API 集成、凭据保护,并为 Mac 专属环节安排环境;对只想减少 Mac 提交依赖的团队,先以小规模项目验证这项维护成本是否值得。