توزيع تطبيقات Python المكتبية على Windows و Mac
لغة Python عابرة للمنصات؛ حيث تكتب الكود مرة واحدة وتشغله في أي مكان.
لكن توزيع هذا الكود قصة أخرى، فمسار العمل (pipeline) لنظامي Windows و macOS منفصل تماماً، إذ يجب عليك التعامل مع أدوات وقواعد مختلفة لكل نظام.
إليك تفصيل لعملية الإصدار:
مسار عمل Mac • البناء (Build): استخدم PyInstaller مع بنية x86_64. • التنسيق (Format): أنشئ حزمة .app ثم ملف .dmg. • التوقيع (Signing): استخدم codesign مع شهادة Developer ID. • التحقق (Validation): أرسل تطبيقك إلى Apple للحصول على التوثيق (Notarization).
مسار عمل Windows • البناء (Build): استخدم PyInstaller. • التنسيق (Format): استخدم Inno Setup لإنشاء ملف تثبيت .exe. • التوقيع (Signing): استخدم eSigner CSC للتوقيع القائم على السحابة. • التحقق (Validation): ابنِ سمعة (reputation) في نظام Microsoft SmartScreen.
الأخطاء الشائعة
بنية Mac (Mac Architecture) إذا قمت بالبناء على جهاز Mac يعمل بمعالج Apple Silicon، فقد تعمل ملفاتك الثنائية (binaries) على بنية ARM64 فقط، مما يعني أنها ستفشل على أجهزة Intel Macs. احرص دائماً على إجراء عملية البناء عبر بنية x86_64 لضمان عمل تطبيقك على كلا النوعين من أجهزة Mac.
توقيع Mac (Mac Signing) غالباً ما يفشل التوقيع البسيط مع خاصية Hardened Runtime. يجب عليك العثور على كل ملف Mach-O binary داخل حزمة تطبيقك وتوقيعها واحداً تلو الآخر من الداخل إلى الخارج.
توثيق Mac (Mac Notarization) قد تتوقف عملية التوثيق (Notarization) لعدة أيام، وغالباً لا يكون هذا خطأً تقنياً. تحقق من حساب Apple Developer الخاص بك بحثاً عن نماذج ضريبية ناقصة أو معلومات مصرفية؛ فهذه المشكلات الإدارية غالباً ما تعيق عملية إصدارك.
تثبيت Windows (Windows Installation) استخدم Inno Setup لتثبيت تطبيقك في "وضع المستخدم" (user mode). يقوم هذا بتثبيت التطبيق في مجلد المستخدم بدلاً من مجلد النظام، مما يسمح للمستخدمين بتثبيت برنامجك دون الحاجة إلى صلاحيات المسؤول (admin rights)، وهذا يقلل من الكثير من تذاكر الدعم الفني.
توقيع Windows (Windows Signing) يتطلب التوقيع التقليدي رمز USB فيزيائي (USB token)، مما يجعل الأتمتة أمراً صعباً. استخدم خدمات التوقيع السحابية مثل eSigner CSC لتوقيع ملفاتك مباشرة من خلال برامجك النصية (scripts).
مشكلة الإصدارات (The Versioning Problem) يجب عليك الحفاظ على تزامن أرقام الإصدارات عبر جميع الملفات. إذا كان كود Python، وملف تثبيت البرنامج، وخادم الويب الخاص بك يستخدمون أرقام إصدارات مختلفة، فستفشل عمليات التحقق من التحديثات.
قم ببناء مسار العمل مرة واحدة. قد يستغرق إعداده بعض الوقت، ولكن بمجرد أن يعمل، يمكنك إرسال إصدارات جديدة في غضون 30 دقيقة.