macOS 권한 (TCC)
macOS permission grant는 깨지기 쉽습니다. TCC는 권한 부여를 app의 code signature, bundle identifier, on-disk path와 묶어 둡니다. 이 중 하나라도 바뀌면 macOS는 app을 새 app으로 취급하고 prompt를 버리거나 숨길 수 있습니다.안정적인 권한을 위한 요구 사항
- 같은 path: app은 고정된 위치에서 실행해야 합니다. OpenClaw에서는
dist/OpenClaw.app이 기준입니다. - 같은 bundle identifier: bundle ID를 바꾸면 새로운 permission identity가 생깁니다.
- signed app: unsigned build나 ad-hoc signed build는 permission을 유지하지 못합니다.
- 일관된 signature: 실제 Apple Development 또는 Developer ID certificate를 사용해 rebuild 후에도 안정적인 signature를 유지하세요.
prompt가 사라졌을 때의 복구 체크리스트
- app 종료
- 시스템 설정 -> 개인정보 보호 및 보안에서 app entry 제거
- 같은 path에서 app을 다시 실행하고 permission 재부여
- 그래도 prompt가 안 뜨면
tccutil로 TCC entry를 reset한 뒤 다시 시도 - 일부 permission은 macOS 전체 재시작 뒤에야 다시 나타남
파일 및 폴더 권한 (Desktop/Documents/Downloads)
macOS는 terminal/background process에 대해 Desktop, Documents, Downloads 접근도 제한할 수 있습니다. file read나 directory listing이 멈춘다면, 실제 file operation을 수행하는 동일한 process context에 권한을 부여해야 합니다. 예를 들면 Terminal/iTerm, LaunchAgent로 띄운 app, 또는 SSH process가 여기에 해당합니다. 우회 방법으로는 file을 OpenClaw workspace(~/.openclaw/workspace)로 옮겨 per-folder grant를 피할 수 있습니다.
permission을 테스트할 때는 항상 실제 certificate로 sign하세요. ad-hoc build는 permission이 중요하지 않은 빠른 local run에만 적합합니다.