mac 签名(调试版本)
此应用通常从scripts/package-mac-app.sh 构建,现在:
- 设置稳定的调试包标识符:
ai.openclaw.mac.debug - 使用该包 ID 写入 Info.plist(通过
BUNDLE_ID=...覆盖) - 调用
scripts/codesign-mac-app.sh对主二进制文件和 App 包进行签名,以便 macOS 将每次重新构建视为相同的已签名包,并保留 TCC 权限(通知、辅助功能、屏幕录制、麦克风、语音)。为了获得稳定的权限,请使用真实的签名身份;临时签名 (ad-hoc) 是可选的且不稳定(请参阅 macOS permissions)。 - 默认使用
CODESIGN_TIMESTAMP=auto;它为 Developer ID 签名启用受信任的时间戳。设置CODESIGN_TIMESTAMP=off以跳过时间戳(离线调试构建)。 - 将构建元数据注入 Info.plist:
OpenClawBuildTimestamp(UTC) 和OpenClawGitCommit(短哈希),以便“关于”面板可以显示构建、git 和调试/发布渠道。 - 打包默认使用 Node 24:该脚本运行 TS 构建和控制 UI 构建。为了兼容性,目前为
22.14+的 Node 22 LTS 仍然受支持。 - 从环境中读取
SIGN_IDENTITY。将export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(或您的 Developer ID Application 证书)添加到您的 shell rc 中,以便始终使用您的证书进行签名。Ad-hoc 签名需要通过ALLOW_ADHOC_SIGNING=1或SIGN_IDENTITY="-"显式选择加入(不建议用于权限测试)。 - 在签名后运行团队 ID 审计,如果应用包内的任何 Mach-O 文件由不同的团队 ID 签名,则会失败。设置
SKIP_TEAM_ID_CHECK=1以绕过。
用法
Ad-hoc 签名说明
使用SIGN_IDENTITY="-" (ad-hoc) 签名时,脚本会自动禁用 Hardened Runtime (--options runtime)。这是防止应用程序尝试加载不共享相同 Team ID 的嵌入式框架(如 Sparkle)时发生崩溃所必需的。Ad-hoc 签名还会破坏 TCC 权限持久性;有关恢复步骤,请参阅 macOS permissions。
“关于”的构建元数据
package-mac-app.sh 将以下信息标记到包上:
OpenClawBuildTimestamp:打包时的 ISO8601 UTC 时间OpenClawGitCommit:简短的 git 哈希值(如果不可用,则为unknown)
#if DEBUG)。在代码更改后,运行打包程序以刷新这些值。
原因
TCC 权限与包标识符和代码签名绑定。具有变化 UUID 的未签名调试构建会导致 macOS 在每次重新构建后忘记授予的权限。对二进制文件进行签名(默认为 ad‑hoc)并保持固定的包 ID/路径(dist/OpenClaw.app)可以在构建之间保留权限,这与 VibeTunnel 的方法一致。
本页面源自 openclaw/openclaw,由 BeaversLab 翻译,遵循 MIT 协议 发布。