14.11 权限设置

macOS 权限授予机制(TCC)非常脆弱。TCC 将权限授予与应用的代码签名、Bundle ID 和磁盘路径关联。如果其中任何一项发生变化,macOS 会将应用视为新应用,可能会丢失权限或隐藏权限提示。

稳定权限的要求

  • 路径一致:从固定位置运行应用(对于 OpenClaw,使用 dist/OpenClaw.app)
  • Bundle ID 一致:更改 Bundle ID 会创建新的权限身份
  • 签名应用:未签名或临时签名的构建无法持久化权限
  • 签名一致:使用真实的 Apple Development 或 Developer ID 证书,使签名在重新构建时保持稳定。临时签名会在每次构建时生成新身份,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
重要提示
如果您正在测试权限,请始终使用真实证书进行签名。临时构建仅适用于不需要权限的快速本地运行。

最佳实践

  • 使用正式的 Apple 开发者证书进行签名
  • 保持应用安装路径固定
  • 避免频繁更改 Bundle ID
  • 在开发过程中使用一致的签名配置
  • 遇到权限问题时,优先考虑签名和路径一致性