Ký macOS (bản debug)
Ứng dụng này thường được xây dựng từscripts/package-mac-app.sh, hiện tại:
- Thiết lập một định danh gói debug ổn định:
ai.openclaw.mac.debug - Ghi Info.plist với định danh gói đó (có thể ghi đè qua
BUNDLE_ID=...) - Gọi
scripts/codesign-mac-app.shđể ký binary chính và gói ứng dụng, giúp macOS nhận diện mỗi lần xây dựng lại là cùng một gói đã ký và giữ quyền TCC (thông báo, truy cập, ghi màn hình, mic, giọng nói). Để quyền ổn định, sử dụng danh tính ký thực; ad-hoc là tùy chọn và không ổn định (xem quyền macOS). - Mặc định sử dụng
CODESIGN_TIMESTAMP=auto; nó kích hoạt dấu thời gian tin cậy cho chữ ký Developer ID. ĐặtCODESIGN_TIMESTAMP=offđể bỏ qua dấu thời gian (bản debug offline). - Chèn thông tin xây dựng vào Info.plist:
OpenClawBuildTimestamp(UTC) vàOpenClawGitCommit(hash ngắn) để bảng About có thể hiển thị thông tin xây dựng, git, và kênh debug/phát hành. - Mặc định đóng gói với Node 24: script chạy các bản xây dựng TS và Control UI. Node 22 LTS, hiện tại
22.16+, vẫn được hỗ trợ để tương thích. - Đọc
SIGN_IDENTITYtừ môi trường. Thêmexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(hoặc chứng chỉ Developer ID Application của bạn) vào shell rc để luôn ký với chứng chỉ của bạn. Ký ad-hoc yêu cầu tùy chọn rõ ràng quaALLOW_ADHOC_SIGNING=1hoặcSIGN_IDENTITY="-"(không khuyến nghị để kiểm tra quyền). - Chạy kiểm tra Team ID sau khi ký và thất bại nếu bất kỳ Mach-O nào trong gói ứng dụng được ký bởi Team ID khác. Đặt
SKIP_TEAM_ID_CHECK=1để bỏ qua.
Sử dụng
Lưu ý về ký ad-hoc
Khi ký vớiSIGN_IDENTITY="-" (ad-hoc), script tự động vô hiệu hóa Hardened Runtime (--options runtime). Điều này cần thiết để ngăn chặn sự cố khi ứng dụng cố gắng tải các framework nhúng (như Sparkle) không cùng Team ID. Chữ ký ad-hoc cũng làm mất quyền TCC; xem quyền macOS để biết cách khôi phục.
Thông tin xây dựng cho About
package-mac-app.sh đóng dấu gói với:
OpenClawBuildTimestamp: ISO8601 UTC tại thời điểm đóng góiOpenClawGitCommit: hash git ngắn (hoặcunknownnếu không có)
#if DEBUG). Chạy packager để làm mới các giá trị này sau khi thay đổi mã.
Tại sao
Quyền TCC gắn liền với định danh gói và chữ ký mã. Các bản debug không ký với UUID thay đổi khiến macOS quên quyền sau mỗi lần xây dựng lại. Ký các binary (mặc định là ad-hoc) và giữ cố định định danh gói/đường dẫn (dist/OpenClaw.app) giúp bảo toàn quyền giữa các lần xây dựng, giống như cách tiếp cận của VibeTunnel.