توقيع 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افتراضيًا؛ وهو يفعّل الطوابع الزمنية الموثوقة لتواقيع Developer ID. عيّنCODESIGN_TIMESTAMP=offلتخطي وضع الطابع الزمني (لبُنى تصحيح الأخطاء دون اتصال). - يحقن بيانات وصفية للبناء في Info.plist:
OpenClawBuildTimestamp(UTC) وOpenClawGitCommit(تجزئة قصيرة) بحيث يمكن لجزء «حول» عرض معلومات البناء وgit وقناة التصحيح/الإصدار. - يتطلب التغليف Node 22+: إذ يشغّل السكربت عمليات بناء TS وبناء واجهة التحكم.
- يقرأ
SIGN_IDENTITYمن البيئة. أضِفexport SIGN_IDENTITY="Apple Development: Your Name (TEAMID)"(أو شهادة Developer ID Application الخاصة بك) إلى ملف rc الخاص بالصدفة لديك للتوقيع دائمًا بشهادتك. يتطلب التوقيع المخصّص (ad‑hoc) تفعيلًا صريحًا عبرALLOW_ADHOC_SIGNING=1أوSIGN_IDENTITY="-"(غير موصى به لاختبار الأذونات). - يجري تدقيق Team ID بعد التوقيع ويفشل إذا كان أي ملف Mach‑O داخل حزمة التطبيق موقّعًا بمعرّف فريق مختلف. عيّن
SKIP_TEAM_ID_CHECK=1للتجاوز.
الاستخدام
ملاحظة حول التوقيع المخصّص (Ad-hoc)
عند التوقيع باستخدامSIGN_IDENTITY="-" (ad‑hoc)، يقوم السكربت تلقائيًا بتعطيل Hardened Runtime (--options runtime). هذا ضروري لمنع الأعطال عندما يحاول التطبيق تحميل أطر مضمّنة (مثل Sparkle) لا تشترك في نفس Team ID. كما أن التواقيع المخصّصة تكسر استمرارية أذونات TCC؛ راجع أذونات macOS لخطوات الاستعادة.
إنشاء بيانات التعريف لـ حول
يقومpackage-mac-app.sh بختم الحزمة بما يلي:
OpenClawBuildTimestamp: ISO8601 بتوقيت UTC وقت التغليفOpenClawGitCommit: تجزئة git قصيرة (أوunknownإذا لم تكن متاحة)
#if DEBUG). شغّل أداة التغليف لتحديث هذه القيم بعد تغييرات الشيفرة.
لماذا
ترتبط أذونات TCC بمعرّف الحزمة وبالتوقيع البرمجي. كانت بُنى تصحيح الأخطاء غير الموقّعة ذات UUIDs المتغيّرة تتسبب في نسيان macOS للأذونات بعد كل إعادة بناء. إن توقيع الملفات التنفيذية (ad‑hoc افتراضيًا) والحفاظ على معرّف/مسار حزمة ثابت (dist/OpenClaw.app) يحافظان على الأذونات بين عمليات البناء، بما يطابق نهج VibeTunnel.