02
第一步:先确认制品生成是否依赖 macOS 工具链
如果流水线已经拿到一个结构正确、能够重复生成的待提交制品,Linux CI 可以承担哈希计算、归档传输、公证 API 调用和状态轮询。
但如果流水线从 Xcode 工程开始构建,情况就不同。包含 App Extension、Framework、插件、Helper 或命令行工具的 macOS App,需要在构建阶段确定目录结构、嵌套关系、权限配置和后续签名顺序。Apple 的分发文档也将 Xcode 归档、导出分发制品和外部签名流程分别处理。Apple 分发签名代码说明
因此,构建阶段的验收不能只检查“文件生成成功”,还应检查:
- 相同源码和依赖锁定文件能够生成一致的制品结构;
- App、嵌套 Framework、插件和命令行工具都位于预期路径;
- 制品与源码版本、构建编号和构建日志建立关联;
- 进入签名阶段后,制品不会被脚本静默修改;
- 失败时可以从归档阶段重新开始,而不是依赖上一次任务的工作目录。
Linux CI 能不能承担 macOS 软件的公证提交?
可以,但需要把“提交”与“完整发布”拆开。Linux 节点可以通过 Apple Notary API 创建提交、上传制品、查询状态并取得日志;这并不等于它能够自然完成 Xcode 构建、Developer ID 签名、stapler 票据装订和 macOS 本地验证。
如果团队已经能从其他节点稳定生成正确签名的 .zip、.dmg 或 .pkg,可以先把 Linux CI 用作提交层。若制品仍需在流水线内构建和签名,就应把这些任务放到远程 Mac CI。