macOS companion app
امضای macOS
امضای mac (ساختهای اشکالزدایی)
scripts/package-mac-app.sh برنامه را در یک مسیر ثابت (dist/OpenClaw.app) میسازد و بستهبندی میکند، سپس برای امضای آن scripts/codesign-mac-app.sh را فراخوانی میکند. مجوزهای TCC به شناسهٔ بسته و امضای کد وابستهاند؛ ثابت نگهداشتن هر دو (و برنامه در یک مسیر ثابت) میان ساختهای مجدد، مانع از آن میشود که macOS مجوزهای TCC (اعلانها، دسترسپذیری، ضبط صفحه، میکروفون، گفتار) را فراموش کند.
- شناسهٔ بستهٔ اشکالزدایی بهطور پیشفرض
ai.openclaw.mac.debugاست (باBUNDLE_ID=...بازنویسی کنید). - Node:
>=22.22.3 <23،>=24.15.0 <25یا>=25.9.0(package.jsonمخزنengines). بستهبند همچنین رابط کاربری کنترل (pnpm ui:build) را میسازد. - بهطور پیشفرض به یک هویت امضای واقعی نیاز دارد؛ اگر هیچ هویتی یافت نشود و
ALLOW_ADHOC_SIGNINGتنظیم نشده باشد، اسکریپت codesign با خطا خارج میشود. امضای موقت (SIGN_IDENTITY="-") مستلزم فعالسازی صریح است و مجوزهای TCC را میان ساختهای مجدد حفظ نمیکند. مجوزهای macOS را ببینید. SIGN_IDENTITYرا از محیط میخواند (برای مثالexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"یا یک گواهی Developer ID Application). بدون آن،codesign-mac-app.shبهطور خودکار و با این ترتیب یک هویت انتخاب میکند: Developer ID Application، Apple Distribution، Apple Development و سپس نخستین هویت معتبر امضای کد که پیدا شود.CODESIGN_TIMESTAMP=auto(پیشفرض) مُهر زمانی قابلاعتماد را فقط برای امضاهای Developer ID Application فعال میکند. برای اجبار در هر جهت،on/offرا تنظیم کنید.- فایل Info.plist را با
OpenClawBuildTimestamp(ISO8601 UTC) وOpenClawGitCommit(هش کوتاه، یاunknownدر صورت در دسترس نبودن) مُهر میزند تا زبانهٔ درباره بتواند ساخت، git و کانال اشکالزدایی/انتشار را نمایش دهد. - پس از امضا، ممیزی Team ID را اجرا میکند و اگر هر Mach-O درون بسته Team ID متفاوتی داشته باشد، ناموفق میشود. برای دور زدن آن،
SKIP_TEAM_ID_CHECK=1را تنظیم کنید.
استفاده
# از ریشهٔ مخزنscripts/package-mac-app.sh # هویت را خودکار انتخاب میکند؛ اگر هیچ هویتی یافت نشود خطا میدهدSIGN_IDENTITY="Developer ID Application: Your Name" scripts/package-mac-app.sh # گواهی واقعیALLOW_ADHOC_SIGNING=1 scripts/package-mac-app.sh # موقت (مجوزها پایدار نمیمانند)SIGN_IDENTITY="-" scripts/package-mac-app.sh # امضای موقت صریح (با همان ملاحظه)DISABLE_LIBRARY_VALIDATION=1 scripts/package-mac-app.sh # راهحل موقت ناسازگاری Team ID در Sparkle، فقط برای توسعهنکتهٔ امضای موقت
SIGN_IDENTITY="-"، Hardened Runtime (--options runtime) را غیرفعال میکند تا هنگام بارگذاری چارچوبهای تعبیهشدهای (مانند Sparkle) که Team ID یکسانی ندارند، برنامه از کار نیفتد. امضاهای موقت همچنین ماندگاری مجوزهای TCC را مختل میکنند؛ برای مراحل بازیابی، مجوزهای macOS را ببینید.
فرادادهٔ ساخت برای «درباره»
زبانهٔ درباره، OpenClawBuildTimestamp و OpenClawGitCommit را از Info.plist میخواند تا نسخه، تاریخ ساخت، ثبت git و DEBUG بودن ساخت (از طریق #if DEBUG) را نمایش دهد. برای بهروزرسانی این مقادیر پس از تغییر کد، بستهبند را دوباره اجرا کنید.