Skip to content
广告 · 本站推荐广告

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.sh

Node.js 要求

构建过程需要 Node 22+。确保在运行构建脚本之前已安装正确版本的 Node.js。

bash
node --version  # 应该显示 v22.x 或更高版本

基于MIT协议开源 | 内容翻译自 官方文档,同步更新