OWEN/SHEN
技能库开发与交付 · 实验中

macOS 签名与分发

优先复用项目CI,按组件签名并让分发检查失败阻断。

版本
v1.1.0
更新
内容复核
2026-10-06
使用条件
macOS、Developer ID身份、按需公证profile、项目组件签名入口、Python 3.10+

验证范围:24项离线脚本回归、12项技能库边界测试;真实设备/签名/公证/上传尚未执行。 完整公开包已复核脱敏;真实业务操作仍待对应环境验收。

给你的 Agent

交给你的 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、实际签名与安装检查。脚本成功仍不能替代目标电脑的功能验收。对外上传与生产发布遵循本次授权和项目门禁。

官方依据:组件签名、沙箱 helper、DMG 打包。

本版已完成失败阻断、跳过公证及组件入口的模拟回归;未进行真实签名、公证或目标电脑验收。

4 个内容文件 · 包内另附版本说明与校验清单