macOS companion app
สิทธิ์อนุญาตของ macOS
สิทธิ์อนุญาตของ macOS มีความเปราะบาง TCC จะผูกสิทธิ์อนุญาตกับลายเซ็นโค้ดของแอป ตัวระบุบันเดิล และพาธบนดิสก์ หากรายการใดรายการหนึ่งเปลี่ยนไป macOS จะถือว่าแอปเป็นแอปใหม่ และอาจลบหรือซ่อนข้อความแจ้งขอสิทธิ์
ข้อกำหนดสำหรับสิทธิ์อนุญาตที่เสถียร
- พาธเดียวกัน: เรียกใช้แอปจากตำแหน่งคงที่ (สำหรับ OpenClaw คือ
dist/OpenClaw.app) - ตัวระบุบันเดิลเดียวกัน: การเปลี่ยน bundle ID จะสร้างข้อมูลประจำตัวสิทธิ์อนุญาตใหม่
- แอปที่ลงนามแล้ว: บิลด์ที่ไม่ได้ลงนามหรือลงนามแบบ ad-hoc จะไม่คงสิทธิ์อนุญาตไว้
- ลายเซ็นที่สม่ำเสมอ: ใช้ใบรับรอง Apple Development หรือ Developer ID จริง เพื่อให้ลายเซ็นคงที่ตลอดการ rebuild
ลายเซ็นแบบ ad-hoc จะสร้างข้อมูลประจำตัวใหม่ทุกครั้งที่ build macOS จะลืมสิทธิ์ที่เคยอนุญาตไว้ และข้อความแจ้งอาจหายไปทั้งหมดจนกว่าจะล้างรายการเก่า
สิทธิ์ Accessibility สำหรับรันไทม์ Node และ CLI
ควรให้สิทธิ์ Accessibility แก่ OpenClaw.app, Peekaboo.app หรือ helper อื่นที่ลงนามแล้วและมีตัวระบุบันเดิลของตัวเอง แทนที่จะให้กับไบนารี node แบบทั่วไป
macOS TCC ให้สิทธิ์ Accessibility แก่ข้อมูลประจำตัวโค้ดของกระบวนการที่มองเห็น หากเวิร์กโฟลว์ Homebrew, nvm, pnpm หรือ npm ทำให้ไฟล์ปฏิบัติการ node ที่ใช้ร่วมกันได้รับ Accessibility แพ็กเกจ JavaScript ใดๆ ที่เปิดผ่านไฟล์ปฏิบัติการเดียวกันนั้นอาจสืบทอดสิทธิ์การทำงานอัตโนมัติของ GUI ได้
ให้ถือว่ารายการ node ใน System Settings เป็นสิทธิ์แบบกว้างสำหรับรันไทม์ Node นั้น ไม่ใช่สิทธิ์สำหรับแพ็กเกจ npm เพียงแพ็กเกจเดียว หลีกเลี่ยงการให้ Accessibility แก่ node เว้นแต่ว่าคุณเชื่อถือทุกสคริปต์และทุกแพ็กเกจที่เปิดผ่านการติดตั้ง Node นั้นโดยตรง
หากคุณเผลอให้ Accessibility แก่ node ให้ลบรายการนั้นออกจาก System Settings -> Privacy & Security -> Accessibility จากนั้นให้สิทธิ์แก่แอปหรือ helper ที่ลงนามแล้วซึ่งควรเป็นเจ้าของการทำงานอัตโนมัติของ UI
รายการตรวจสอบการกู้คืนเมื่อข้อความแจ้งหายไป
- ออกจากแอป
- ลบรายการของแอปใน System Settings -> Privacy & Security
- เปิดแอปอีกครั้งจากพาธเดิมและให้สิทธิ์ใหม่
- หากข้อความแจ้งยังไม่ปรากฏ ให้รีเซ็ตรายการ TCC ด้วย
tccutilแล้วลองอีกครั้ง - สิทธิ์บางรายการจะกลับมาปรากฏหลังจากรีสตาร์ต macOS แบบเต็มเท่านั้น
ตัวอย่างการรีเซ็ต (เปลี่ยน bundle ID ตามต้องการ):
sudo tccutil reset Accessibility ai.openclaw.macsudo tccutil reset ScreenCapture ai.openclaw.macsudo tccutil reset AppleEventsสิทธิ์ไฟล์และโฟลเดอร์ (Desktop/Documents/Downloads)
macOS อาจจำกัด Desktop, Documents และ Downloads สำหรับกระบวนการเทอร์มินัล/เบื้องหลังด้วย หากการอ่านไฟล์หรือการแสดงรายการไดเรกทอรีค้าง ให้ให้สิทธิ์เข้าถึงแก่บริบทกระบวนการเดียวกันที่ดำเนินการกับไฟล์ (เช่น Terminal/iTerm, แอปที่เปิดโดย LaunchAgent หรือกระบวนการ SSH)
วิธีเลี่ยงปัญหา: ย้ายไฟล์เข้าไปในเวิร์กสเปซของ OpenClaw (~/.openclaw/workspace) หากคุณต้องการหลีกเลี่ยงการให้สิทธิ์รายโฟลเดอร์
หากคุณกำลังทดสอบสิทธิ์อนุญาต ให้ลงนามด้วยใบรับรองจริงเสมอ บิลด์แบบ ad-hoc ยอมรับได้เฉพาะสำหรับการรันภายในเครื่องอย่างรวดเร็วที่สิทธิ์อนุญาตไม่สำคัญเท่านั้น