macOS 代码签名
macOS 签名使用稳定的 bundle ID 和代码签名来在调试构建之间保持 TCC 权限。
签名流程
签名通过 scripts/package-mac-app.sh 执行,该脚本设置稳定的 bundle ID(ai.openclaw.mac.debug)并调用 codesign-mac-app.sh 签名二进制文件,从而保持 TCC 权限。
签名身份配置
使用真正的证书(推荐)
设置 SIGN_IDENTITY 环境变量为你的证书名称:
bash
SIGN_IDENTITY="Apple Development: Your Name (TEAMID)" scripts/package-mac-app.sh使用真正的 Apple Development 或 Developer ID 证书可以确保:
- 签名在重新构建时保持稳定
- TCC 权限在构建之间持久化
- 不会出现权限提示消失的问题
Ad-hoc 签名(仅限快速测试)
如果你没有证书,可以设置 ALLOW_ADHOC_SIGNING=1:
bash
ALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh注意
Ad-hoc 签名会禁用 Hardened Runtime 并破坏权限持久化。每次构建都会生成新的签名身份,macOS 会忘记之前的权限授予。仅适用于权限无关紧要的快速本地测试。
时间戳
脚本默认使用 CODESIGN_TIMESTAMP=auto,这会在签名时向 Apple 的时间戳服务器请求安全时间戳。
构建元数据
脚本会注入构建元数据,例如 OpenClawBuildTimestamp。这些元数据允许 About 面板显示版本和 git 提交信息。
Team ID 审计
签名后会运行 Team ID 审计,除非设置 SKIP_TEAM_ID_CHECK=1。这确保所有签名的二进制文件使用一致的 Team ID。
bash
# 跳过 Team ID 检查(不推荐用于发布构建)
SKIP_TEAM_ID_CHECK=1 scripts/package-mac-app.shNode.js 要求
构建过程需要 Node 22+。确保在运行构建脚本之前已安装正确版本的 Node.js。
bash
node --version # 应该显示 v22.x 或更高版本