mac 签名(调试构建)
scripts/package-mac-app.sh 会将应用构建并打包到固定路径(dist/OpenClaw.app),然后调用 scripts/codesign-mac-app.sh 对其进行签名。TCC 权限与 bundle ID 和代码签名绑定;在多次重新构建时保持二者稳定(以及应用位于固定路径)可防止 macOS 忘记 TCC 授权(通知、辅助功能、屏幕录制、麦克风、语音)。
- 调试 bundle identifier 默认值为
ai.openclaw.mac.debug(可通过BUNDLE_ID=...覆盖)。 - Node:
>=22.22.3 <23、>=24.15.0 <25或>=25.9.0(仓库package.json中的engines)。打包脚本还会构建 Control UI(pnpm ui:build)。 - 默认需要真实的签名身份;如果未找到任何身份且未设置
ALLOW_ADHOC_SIGNING,codesign 脚本会报错退出。ad-hoc 签名(SIGN_IDENTITY="-")需要显式启用,且不会在重新构建后保留 TCC 权限。参见 macOS 权限。 - 从环境中读取
SIGN_IDENTITY(例如export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)",或 Developer ID Application 证书)。如果未设置,codesign-mac-app.sh会按以下顺序自动选择身份:Developer ID Application、Apple Distribution、Apple Development,然后是找到的第一个有效代码签名身份。 CODESIGN_TIMESTAMP=auto(默认)仅为 Developer ID Application 签名启用受信任时间戳。设置为on/off可强制指定。- 在 Info.plist 中写入
OpenClawBuildTimestamp(ISO8601 UTC)和OpenClawGitCommit(短哈希,若不可用则为unknown),以便 About 选项卡显示构建、git 和 debug/release 渠道信息。 - 签名后会执行 Team ID 审核;如果 bundle 内任何 Mach-O 的 Team ID 不同则失败。可设置
SKIP_TEAM_ID_CHECK=1跳过。
使用方法
临时签名说明
SIGN_IDENTITY="-" 会禁用 Hardened Runtime(--options runtime),以防止应用加载未与其共享相同 Team ID 的嵌入式框架(如 Sparkle)时崩溃。临时签名还会破坏 TCC 权限持久化;有关恢复步骤,请参阅 macOS 权限。
关于的构建元数据
About 选项卡从 Info.plist 中读取OpenClawBuildTimestamp 和 OpenClawGitCommit,以显示版本、构建日期、git 提交,以及该构建是否为 DEBUG(通过 #if DEBUG)。在代码更改后重新运行打包器以刷新这些值。