macOS 权限授予机制(TCC)非常脆弱。TCC 将权限授予与应用的代码签名、Bundle ID 和磁盘路径关联。如果其中任何一项发生变化,macOS 会将应用视为新应用,可能会丢失权限或隐藏权限提示。
稳定权限的要求
- 路径一致:从固定位置运行应用(对于 OpenClaw,使用
dist/OpenClaw.app) - Bundle ID 一致:更改 Bundle ID 会创建新的权限身份
- 签名应用:未签名或临时签名的构建无法持久化权限
- 签名一致:使用真实的 Apple Development 或 Developer ID 证书,使签名在重新构建时保持稳定。临时签名会在每次构建时生成新身份,macOS 会忘记之前的授权,权限提示可能完全消失,直到清除旧条目
权限提示消失时的恢复检查清单
- 退出应用
- 在"系统设置 → 隐私与安全性"中删除应用条目
- 从相同路径重新启动应用并重新授予权限
- 如果提示仍未出现,使用
tccutil重置 TCC 条目并重试 - 某些权限只有在完全重启 macOS 后才会重新出现
重置示例
根据需要替换 Bundle ID:
sudo tccutil reset Accessibility bot.molt.mac
sudo tccutil reset ScreenCapture bot.molt.mac
sudo tccutil reset AppleEvents
重要提示
如果您正在测试权限,请始终使用真实证书进行签名。临时构建仅适用于不需要权限的快速本地运行。
最佳实践
- 使用正式的 Apple 开发者证书进行签名
- 保持应用安装路径固定
- 避免频繁更改 Bundle ID
- 在开发过程中使用一致的签名配置
- 遇到权限问题时,优先考虑签名和路径一致性