概述
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.shAd-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)可在构建间保留权限。
相关链接
- platform-mac-permissions — macOS 权限管理
- platform-macos — macOS 伴侣应用