macOS 权限(TCC)

macOS 的权限授予比较脆弱。TCC 将权限关联到应用的代码签名、bundle identifier 和磁盘路径。三者中任何一个变了,macOS 都会把应用当作全新应用,可能丢失授权或隐藏提示。

稳定权限的要求

  • 相同路径:从固定位置运行应用(OpenClaw 用 dist/OpenClaw.app)。
  • 相同 bundle identifier:更改 bundle ID 会创建新的权限身份。
  • 已签名应用:未签名或 ad-hoc 签名的构建无法持久化权限。
  • 一致的签名:使用正式的 Apple Development 或 Developer ID 证书,确保签名在重新构建间保持稳定。

ad-hoc 签名每次构建都会生成新身份。macOS 会忘记之前的授权,且在清除旧条目之前提示可能完全消失。

提示消失时的恢复步骤

  1. 退出应用。
  2. 在 System Settings → Privacy & Security 中移除应用条目。
  3. 从相同路径重新启动应用并重新授权。
  4. 如果提示仍然不出现,使用 tccutil 重置 TCC 条目再试。
  5. 有些权限只有在完全重启 macOS 后才会重新出现。

示例重置(按需替换 bundle ID):

sudo tccutil reset Accessibility ai.openclaw.mac
sudo tccutil reset ScreenCapture ai.openclaw.mac
sudo tccutil reset AppleEvents

文件和文件夹权限(桌面/文稿/下载)

macOS 还可能对终端/后台进程访问桌面、文稿和下载目录进行管控。如果文件读取或目录列表挂起,为执行文件操作的进程上下文授予访问权限(例如 Terminal/iTerm、LaunchAgent 启动的应用或 SSH 进程)。

变通方案:把文件移到 OpenClaw 工作区(~/.openclaw/workspace)中,可以避免逐文件夹授权。

测试权限时务必用正式证书签名。ad-hoc 构建仅适用于不需要权限的快速本地运行。