首页 / 博客 / Xcode 公证必须用 Mac
ENGINEERING_BLOG · 2026.10.19

Xcode 公证必须用 Mac 吗?2026 Notary API 选择

公证提交被 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 属于其命令行工具;实际采用前,应在你自己的项目上验证所需工具是否可用。

建议按发布里程碑做小范围验证:

  1. 选一个可重复构建的真实项目,固定源代码版本和交付目标。
  2. 确认构建系统产出的文件类型、签名状态和文件校验值,并记录由哪个环境完成构建与签名。
  3. 在候选 Mac 环境确认 Xcode 及所需命令行工具可用,再运行现有公证流程。
  4. 如果比较 Notary API,在非 Mac 节点只验证提交、上传、状态查询和日志读取,不把该结果当成完整发布通过。
  5. 对实际分发的最终文件检查票据装订,并在目标 Mac 上完成安装和启动验收;将失败点归入构建、签名、提交、装订或交付环节。
  6. 根据故障归属决定是否保留 Mac 节点、改用 Notary API,或采用两者分工的混合流程。

如果你需要核对远程使用 Mac 的基本方式,可先查看 VPSNIX 帮助中心;若在评估按需使用 Mac 的费用,再查看 VPSNIX 套餐信息。远程 Mac 适合验证 Xcode 工具链、签名、装订或短期发布任务,并不是公证的唯一方案;若团队长期高频运行发布任务,或必须连接特定物理设备,先比较自购 Mac、现有 Mac 与按需租用的总成本和操作条件。Windows 或 Linux 方案便于复用现有发布节点,但仍要处理 API 集成、凭据保护,并为 Mac 专属环节安排环境;对只想减少 Mac 提交依赖的团队,先以小规模项目验证这项维护成本是否值得。

延伸阅读