توقيع 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(hash قصير) حتى تتمكن نافذة About من عرض البناء وgit وقناة التصحيح/الإصدار. - تستخدم عملية التغليف Node 24 افتراضيًا: يشغّل النص بنيات TS وبناء Control UI. وما زالت Node 22 LTS، حاليًا
22.14+، مدعومة من أجل التوافق. - يقرأ
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لتجاوز ذلك.
الاستخدام
ملاحظة حول التوقيع ad-hoc
عند التوقيع باستخدامSIGN_IDENTITY="-" (ad-hoc)، يعطل النص تلقائيًا Hardened Runtime (--options runtime). وهذا ضروري لمنع الأعطال عندما يحاول التطبيق تحميل الأطر المضمنة (مثل Sparkle) التي لا تشترك في Team ID نفسه. كما أن التواقيع ad-hoc تكسر استمرارية أذونات TCC؛ راجع أذونات macOS للاطلاع على خطوات الاستعادة.
بيانات تعريف البناء الخاصة بـ About
يضعpackage-mac-app.sh الختم التالي على الحزمة:
OpenClawBuildTimestamp: قيمة ISO8601 UTC وقت التغليفOpenClawGitCommit: hash قصير لـ git (أوunknownإذا لم يكن متاحًا)
#if DEBUG). شغّل أداة التغليف لتحديث هذه القيم بعد تغييرات الشيفرة.
لماذا
ترتبط أذونات TCC بمعرّف الحزمة وبتوقيع الشيفرة معًا. وكانت بنيات التصحيح غير الموقعة ذات UUIDs المتغيرة تتسبب في نسيان macOS للأذونات بعد كل إعادة بناء. إن توقيع الملفات التنفيذية (ad-hoc افتراضيًا) مع الحفاظ على معرّف/مسار حزمة ثابت (dist/OpenClaw.app) يحافظ على الأذونات بين البنيات، بما يتوافق مع نهج VibeTunnel.