macOS companion app
امضای macOS
امضای mac (ساختهای اشکالزدایی)
این برنامه معمولاً از طریق scripts/package-mac-app.sh ساخته میشود، که اکنون:
- یک شناسه پایدار برای بسته اشکالزدایی تنظیم میکند:
ai.openclaw.mac.debug - Info.plist را با همان شناسه بسته مینویسد (قابل بازنویسی با
BUNDLE_ID=...) scripts/codesign-mac-app.shرا فراخوانی میکند تا باینری اصلی و بسته برنامه را امضا کند، تا macOS هر بازسازی را همان بسته امضاشده در نظر بگیرد و مجوزهای TCC را حفظ کند (اعلانها، دسترسپذیری، ضبط صفحه، میکروفون، گفتار). برای مجوزهای پایدار، از یک هویت امضای واقعی استفاده کنید؛ امضای ad-hoc نیازمند فعالسازی صریح است و شکننده محسوب میشود (ببینید مجوزهای macOS).- بهطور پیشفرض از
CODESIGN_TIMESTAMP=autoاستفاده میکند؛ این گزینه timestampهای مورد اعتماد را برای امضاهای Developer ID فعال میکند. برای رد شدن از timestamping،CODESIGN_TIMESTAMP=offرا تنظیم کنید (ساختهای اشکالزدایی آفلاین). - فراداده ساخت را به Info.plist تزریق میکند:
OpenClawBuildTimestamp(UTC) وOpenClawGitCommit(هش کوتاه)، تا پنل About بتواند ساخت، git، و کانال اشکالزدایی/انتشار را نشان دهد. - بستهبندی بهطور پیشفرض از Node 24 استفاده میکند: اسکریپت ساختهای TS و ساخت Control UI را اجرا میکند. Node 22 LTS، در حال حاضر
22.16+، همچنان برای سازگاری پشتیبانی میشود. SIGN_IDENTITYرا از محیط میخواند.export SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(یا گواهی Developer ID Application خودتان) را به shell rc خود اضافه کنید تا همیشه با گواهی خودتان امضا شود. امضای ad-hoc نیازمند فعالسازی صریح از طریقALLOW_ADHOC_SIGNING=1یاSIGN_IDENTITY="-"است (برای آزمون مجوزها توصیه نمیشود).- پس از امضا یک ممیزی Team ID اجرا میکند و اگر هر Mach-O داخل بسته برنامه با Team ID متفاوتی امضا شده باشد، شکست میخورد. برای عبور از این بررسی،
SKIP_TEAM_ID_CHECK=1را تنظیم کنید.
استفاده
# from repo root
scripts/package-mac-app.sh # auto-selects identity; errors if none found
SIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # real cert
ALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh # ad-hoc (permissions will not stick)
SIGN_IDENTITY="-" scripts/package-mac-app.sh # explicit ad-hoc (same caveat)
DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh # dev-only Sparkle Team ID mismatch workaround
نکته امضای Ad-hoc
هنگام امضا با SIGN_IDENTITY="-" (ad-hoc)، اسکریپت بهطور خودکار Hardened Runtime (--options runtime) را غیرفعال میکند. این کار برای جلوگیری از کرشها زمانی لازم است که برنامه تلاش میکند frameworkهای توکار (مانند Sparkle) را بارگذاری کند که Team ID یکسانی ندارند. امضاهای ad-hoc همچنین پایداری مجوزهای TCC را از بین میبرند؛ برای مراحل بازیابی، مجوزهای macOS را ببینید.
فراداده ساخت برای About
package-mac-app.sh بسته را با این موارد مهرگذاری میکند:
OpenClawBuildTimestamp: زمان UTC با قالب ISO8601 هنگام بستهبندیOpenClawGitCommit: هش کوتاه git (یاunknownاگر در دسترس نباشد)
زبانه About این کلیدها را میخواند تا نسخه، تاریخ ساخت، کامیت git، و اینکه آیا ساخت اشکالزدایی است یا نه (از طریق #if DEBUG) را نشان دهد. پس از تغییرات کد، بستهساز را اجرا کنید تا این مقادیر تازه شوند.
دلیل
مجوزهای TCC به شناسه بسته و امضای کد گره خوردهاند. ساختهای اشکالزدایی امضانشده با UUIDهای متغیر باعث میشدند macOS پس از هر بازسازی مجوزهای اعطاشده را فراموش کند. امضای باینریها (بهطور پیشفرض ad-hoc) و نگه داشتن شناسه/مسیر ثابت بسته (dist/OpenClaw.app) مجوزها را بین ساختها حفظ میکند، مطابق با رویکرد VibeTunnel.