概述

macOS 应用通过 scripts/package-mac-app.sh 构建,该脚本负责签名、打包和注入构建元数据。

打包脚本行为

  • 设置稳定的 debug bundle ID:ai.openclaw.mac.debug(可通过 BUNDLE_ID=... 覆盖)
  • 调用 scripts/codesign-mac-app.sh 签名主二进制和 app bundle
  • 默认使用 CODESIGN_TIMESTAMP=auto(Developer ID 签名启用可信时间戳)
  • 注入构建元数据到 Info.plist:OpenClawBuildTimestamp(UTC)和 OpenClawGitCommit(短 hash)
  • 打包默认使用 Node 24;Node 22 LTS(22.16+)仍支持

使用方式

# 自动选择签名身份
scripts/package-mac-app.sh
 
# 使用真实证书
SIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh
 
# Ad-hoc 签名(权限不会持久化)
ALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh
SIGN_IDENTITY="-" scripts/package-mac-app.sh
 
# 开发用:跳过 Team ID 检查
DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh

Ad-hoc 签名注意事项

使用 SIGN_IDENTITY="-" 时,脚本自动禁用 Hardened Runtime(--options runtime),以防止加载 Sparkle 等框架时崩溃。Ad-hoc 签名会破坏 TCC 权限持久化,详见 platform-mac-permissions。

构建元数据(About 面板)

  • OpenClawBuildTimestamp:打包时的 ISO8601 UTC 时间
  • OpenClawGitCommit:短 git hash(不可用时显示 unknown)

每次代码变更后重新运行打包脚本以刷新这些值。

为什么需要签名

TCC 权限与 bundle ID 和代码签名绑定。未签名的 debug 构建每次重建都会产生新 UUID,导致 macOS 忘记已授权的权限。固定 bundle ID 和路径(dist/OpenClaw.app)可在构建间保留权限。

相关链接