macOS 签名与分发
优先复用项目CI,按组件签名并让分发检查失败阻断。
- 版本
- v1.1.0
- 更新
- 内容复核
- 2026-10-06
- 使用条件
- macOS、Developer ID身份、按需公证profile、项目组件签名入口、Python 3.10+
验证范围:24项离线脚本回归、12项技能库边界测试;真实设备/签名/公证/上传尚未执行。 完整公开包已复核脱敏;真实业务操作仍待对应环境验收。
交给你的 Agent
临时使用:复制提示词,再补充你的具体任务。长期复用:下载下面的完整技能包。
安装到自己的 Agent
解压后保留整个 macos-app-distribution 文件夹,包括 scripts、references 等配套文件。先阅读内容、核实依赖,再放进所用 Agent 的技能目录;Codex 常用 ~/.codex/skills/,Claude Code 常用 ~/.claude/skills/,已有配置优先。同名技能先比较并备份到加载目录外。
包内 skill.json 记录版本和验证范围。在解压的技能文件夹中运行 shasum -a 256 -c SHA256SUMS(macOS),或 sha256sum -c SHA256SUMS(Linux),核对文件完整性。查看说明不需要网站源码。
先读项目构建/发布规则和现有 CI。正式发布复用既有入口;仅在本次明确需要本地签名公证时使用随包脚本,不另造远程部署。
分发渠道#
Developer ID 可用于直接下载分发;App Store 需按实际功能、沙箱、权限与审核规则评估。包含 helper/CLI 或监听端口不自动代表不能上架。分别核实项目架构与权限,不作一刀切结论。
本地适配器#
传入已经构建的 app 和一个尚不存在的输出路径:
SIGN_IDENTITY="<Developer ID身份>" NOTARY_PROFILE="<本机keychain profile>" \
bash "<本技能目录>/scripts/sign-notarize-macos.sh" "<built.app>" "<new-output.dmg>"
- SIGN_IDENTITY 和公证 profile 来自本机配置,密钥不得进入 skill 或项目仓库。
- ENTITLEMENTS 只描述主 app 权限。存在框架、插件、XPC、helper 或其它 Mach-O 时必须指定项目 NESTED_SIGN_SCRIPT;该脚本接收 app 路径,按项目组件各自权限从内到外签名。
- 不用 codesign --deep 给所有组件统一签名;--deep 可用于最终验证。
- 主 app 和 DMG 分别签名,核对请求身份与 Team。此适配器要求完整 Developer ID 身份名称;证书哈希选择等特殊方式沿用项目原签名流程。
- notarytool 的真实结果必须 Accepted,再执行 staple、ticket 验证、DMG 与内含 app 的适用 Gatekeeper 检查。任一失败均返回非零,不打印完成。
- SKIP_NOTARIZE=1 只做本地签名包装,不需要公证 profile,明确记录公证未请求。
回执包括源码来源/dirty、bundle ID、版本/build、架构、产物路径、SHA-256、公证 request ID、实际签名与安装检查。脚本成功仍不能替代目标电脑的功能验收。对外上传与生产发布遵循本次授权和项目门禁。
本版已完成失败阻断、跳过公证及组件入口的模拟回归;未进行真实签名、公证或目标电脑验收。
4 个内容文件 · 包内另附版本说明与校验清单
- SKILL.md
b05f32c1486ff664b379c3f3da808c2c944f2716daf7142aa35790097245314b - agents/openai.yaml
79e73b1d0502d9c182a137fb8490af01c5b58cc0267d1c67829b6719ef634acb - scripts/sign-notarize-macos.sh
1e7773471481e4b05e9d773963886c248a98c72369b48157a60e45da7204b178 - scripts/signing_checks.py
adcae11f849f0c54aed3475b2b9b1302a07f2bf2c944be2dc6ecb3761d3fe77f