Quyền trên macOS (TCC)
Quyền trên macOS rất dễ bị mất. TCC liên kết việc cấp quyền với chữ ký code của ứng dụng, bundle identifier và đường dẫn trên ổ đĩa. Nếu bất kỳ thứ gì trong số đó thay đổi, macOS sẽ coi ứng dụng là mới và có thể xóa hoặc ẩn các prompt xin quyền.
Yêu cầu để giữ quyền ổn định
- Cùng đường dẫn: chạy ứng dụng từ một vị trí cố định (với OpenClaw là
dist/OpenClaw.app). - Cùng bundle identifier: thay đổi bundle ID sẽ tạo ra một identity quyền mới.
- Ứng dụng đã ký: các bản build không ký hoặc ký ad-hoc sẽ không lưu được quyền.
- Chữ ký nhất quán: dùng certificate Apple Development hoặc Developer ID thật để chữ ký giữ nguyên qua các lần build.
Chữ ký ad-hoc tạo ra identity mới mỗi lần build. macOS sẽ quên các quyền đã cấp trước đó, và các prompt có thể biến mất hoàn toàn cho đến khi xóa các entry cũ.
Checklist khắc phục khi prompt biến mất
- Thoát ứng dụng.
- Xóa entry của ứng dụng trong System Settings -> Privacy & Security.
- Mở lại ứng dụng từ cùng đường dẫn và cấp lại quyền.
- Nếu prompt vẫn không hiện, reset các entry TCC bằng
tccutilrồi thử lại. - Một số quyền chỉ hiện lại sau khi restart macOS hoàn toàn.
Ví dụ reset (thay bundle ID nếu cần):
sudo tccutil reset Accessibility bot.molt.mac
sudo tccutil reset ScreenCapture bot.molt.mac
sudo tccutil reset AppleEvents
Nếu các bạn đang test quyền, luôn ký bằng certificate thật. Các bản build ad-hoc chỉ chấp nhận được cho việc chạy nhanh local mà không cần quyền.