OpenClawSkills
GitHub
平台 • 5 分钟阅读

macOS 签名

macOS 调试构建的签名步骤(由打包脚本生成)

此应用通常从 ''''scripts/package-mac-app.sh'''' 构建,该脚本现在:

- 设置稳定的调试包标识符:''ai.openclaw.mac.debug''

- 使用该包 ID 写入 Info.plist(可通过 ''BUNDLE_ID=...'' 覆盖)

- 调用 ''''scripts/codesign-mac-app.sh'''' 对主二进制文件和应用包进行签名,使 macOS 将每次重新构建视为相同的签名包并保持 TCC 权限(通知、辅助功能、屏幕录制、麦克风、语音)。为了稳定的权限,请使用真实的签名身份;ad-hoc 是可选的且脆弱的(参见 ''macOS 权限'')。

- 默认使用 ''CODESIGN_TIMESTAMP=auto'';它为 Developer ID 签名启用可信时间戳。设置 ''CODESIGN_TIMESTAMP=off'' 以跳过时间戳(离线调试构建)。

- 将构建元数据注入 Info.plist:''OpenClawBuildTimestamp''(UTC)和 ''OpenClawGitCommit''(短哈希),以便关于窗格可以显示构建、git 和调试/发布通道。

- 打包需要 Node 22+:脚本运行 TS 构建和控制 UI 构建。

- 从环境变量读取 ''SIGN_IDENTITY''。将 ''export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"''(或您的 Developer ID Application 证书)添加到您的 shell rc,以始终使用您的证书进行签名。Ad-hoc 签名需要通过 ''ALLOW_ADHOC_SIGNING=1'' 或 ''SIGN_IDENTITY="-"'' 显式选择(不建议用于权限测试)。

- 签名后运行 Team ID 审计,如果应用包内的任何 Mach-O 由不同的 Team ID 签名,则失败。设置 ''SKIP_TEAM_ID_CHECK=1'' 以绕过。

Tutorial.step

用法

Bash
scripts/package-mac-app.sh               # 自动选择身份;如果未找到则报错
SIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh   # 真实证书
ALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh    # ad-hoc(权限不会保留)
SIGN_IDENTITY="-" scripts/package-mac-app.sh        # 显式 ad-hoc(相同的警告)
DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh   # 仅开发 Sparkle Team ID 不匹配变通方法

#

Tutorial.step

Ad-hoc 签名说明

使用 ''SIGN_IDENTITY="-"''(ad-hoc)签名时,脚本会自动禁用 ''Hardened Runtime''(''--options runtime'')。这是必要的,以防止应用尝试加载不共享相同 Team ID 的嵌入式框架(如 Sparkle)时崩溃。Ad-hoc 签名还会破坏 TCC 权限持久性;有关恢复步骤,请参阅 ''macOS 权限''。

Tutorial.step

关于的构建元数据

''package-mac-app.sh'' 为包添加以下标记:

- ''OpenClawBuildTimestamp'':打包时间的 ISO8601 UTC

- ''OpenClawGitCommit'':短 git 哈希(如果不可用则为 ''unknown'')

关于选项卡读取这些键以显示版本、构建日期、git 提交以及是否为调试构建(通过 ''#if DEBUG'')。代码更改后运行打包程序以刷新这些值。

Tutorial.step

原因

TCC 权限与包标识符 _和_ 代码签名相关。具有更改 UUID 的未签名调试构建导致 macOS 在每次重新构建后忘记授权。对二进制文件进行签名(默认为 ad‑hoc)并保持固定的包 ID/路径(''dist/OpenClaw.app'')可在构建之间保留授权,与 VibeTunnel 方法匹配。