Developer ID 分发

macOS 桌面公开发行版需要 Developer ID 签名、hardened runtime、安全时间戳、Apple 公证及附加公证票据。本地源码开发保持独立分发模式。

已确认缺口

现有发布流程构建未签名的 DMG 和 ZIP 文件。更新器要求未签名文件名。本地刷新使用绑定证书的开发身份,修改应用资源后无法保留生产签名。

参考与取舍

Apple Developer ID and Apple 公证 定义生产验收标准。Codex 使用 Developer ID 签名和附加票据。OpenProgram 保留 Electron Builder 的包布局,使用原生 codesign 与 notarytool 命令分发,不引入第二套身份服务。

架构与信任边界

已审查的 checkout 生成未签名的暂存应用。发布签名器使用一个配置好的 Developer ID,由内向外签署 Mach-O 文件和嵌套 bundle。它验证完整签名,对应用公证并附加票据,生成 ZIP 和 DMG 产物,再对 DMG 公证并附加票据。全部检查在上传前完成。命令失败即终止发布。签名器不禁用 Gatekeeper,也不修改证书信任。

私钥与凭据保留在仓库之外。本地执行使用专用钥匙串和已验证的 notarytool profile。CI 使用加密仓库 secrets 及退出时删除的临时钥匙串。构建输出只包含公开证书身份。源码更新不得静默地将已安装的生产身份替换为开发身份。

兼容性与排除范围

更新客户端优先使用已签名文件名,并显式兼容旧未签名发行版。本任务不改变 runtime 归档和 Windows 签名。Apple 身份验证、证书签发和公证是外部门禁;源码测试通过不能证明这些门禁通过。

验收

实现状态

发布签名器、CI 凭据设置及已签名产物选择已存在。初始实现通过独立源码审查及自动化检查。超时诊断与操作文档接受限定范围审查。原生公证、双架构验收和公开发布验证仍待完成。已安装的本地开发 App 保留现有身份;本地迭代不包含将其替换为生产构建。