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. 在系统设置 -> 隐私与安全性中删除应用条目。
  3. 从相同路径重新启动应用,并重新授予权限。
  4. 如果提示仍然不出现,用 tccutil 重置 TCC 条目后再试。
  5. 有些权限只有在完全重启 macOS 后才会重新出现。

重置示例(根据需要替换 bundle ID):

sudo tccutil reset Accessibility bot.molt.mac
sudo tccutil reset ScreenCapture bot.molt.mac
sudo tccutil reset AppleEvents

如果你在测试权限,一定要用真实证书签名。临时构建只适合不需要权限的快速本地运行。