macOS companion app
สิทธิ์บน macOS
การให้สิทธิ์บน macOS มีความเปราะบาง TCC จะผูกการให้สิทธิ์เข้ากับ ลายเซ็นโค้ดของแอป, bundle identifier และ path บนดิสก์ หากสิ่งใดสิ่งหนึ่งเปลี่ยนไป macOS จะมองว่าแอปเป็นตัวใหม่ และอาจทิ้งหรือซ่อนหน้าต่างขอสิทธิ์
ข้อกำหนดสำหรับสิทธิ์ที่เสถียร
- path เดิม: รันแอปจากตำแหน่งคงที่ (สำหรับ OpenClaw คือ
dist/OpenClaw.app) - bundle identifier เดิม: การเปลี่ยน bundle ID จะสร้างตัวตนสิทธิ์ใหม่
- แอปที่มีลายเซ็น: บิลด์ที่ไม่ได้ลงนามหรือใช้ ad-hoc signing จะไม่คงสิทธิ์ไว้
- ลายเซ็นสม่ำเสมอ: ใช้ใบรับรอง Apple Development หรือ Developer ID จริง เพื่อให้ลายเซ็นคงที่ข้ามการ build ใหม่
ad-hoc signatures จะสร้างตัวตนใหม่ทุกครั้งที่ build macOS จะลืม สิทธิ์เดิม และหน้าต่างขอสิทธิ์อาจหายไปทั้งหมดจนกว่าจะล้างรายการเก่าที่ค้างอยู่
รายการตรวจสอบการกู้คืนเมื่อหน้าต่างขอสิทธิ์หายไป
- ปิดแอป
- ลบรายการของแอปใน System Settings -> Privacy & Security
- เปิดแอปใหม่จาก path เดิมแล้วให้สิทธิ์อีกครั้ง
- หากหน้าต่างยังไม่ขึ้น ให้รีเซ็ตรายการ TCC ด้วย
tccutilแล้วลองอีกครั้ง - สิทธิ์บางอย่างจะกลับมาปรากฏอีกครั้งได้ก็ต่อเมื่อรีสตาร์ต macOS แบบเต็ม
ตัวอย่างการรีเซ็ต (แทน bundle ID ตามต้องการ):
sudo tccutil reset Accessibility ai.openclaw.mac
sudo tccutil reset ScreenCapture ai.openclaw.mac
sudo tccutil reset AppleEvents
สิทธิ์ไฟล์และโฟลเดอร์ (Desktop/Documents/Downloads)
macOS อาจจำกัด Desktop, Documents และ Downloads สำหรับโปรเซสที่รันผ่านเทอร์มินัล/เบื้องหลังด้วย หากการอ่านไฟล์หรือการแสดงรายการไดเรกทอรีค้างอยู่ ให้ให้สิทธิ์กับ process context เดียวกับที่ทำ file operations (เช่น Terminal/iTerm, แอปที่ถูกเริ่มผ่าน LaunchAgent หรือโปรเซส SSH)
วิธีแก้ชั่วคราว: ย้ายไฟล์เข้า OpenClaw workspace (~/.openclaw/workspace) หากคุณต้องการหลีกเลี่ยงการให้สิทธิ์รายโฟลเดอร์
หากคุณกำลังทดสอบเรื่องสิทธิ์ ควรลงนามด้วยใบรับรองจริงเสมอ บิลด์แบบ ad-hoc ยอมรับได้เฉพาะสำหรับการรันในเครื่องอย่างรวดเร็วที่เรื่องสิทธิ์ไม่สำคัญ