הפצת אפליקציות שולחניות Python ב-Windows וב-Mac

Python היא חוצת פלטפורמות. כותבים קוד פעם אחת ומריצים אותו בכל מקום.

אבל הפצת הקוד הזה היא סיפור אחר. ה-pipeline עבור Windows ו-macOS הוא נפרד לחלוטין. עליכם להתמודד עם כלים שונים וכללים שונים עבור כל מערכת.

להלן פירוט תהליך השחרור (release process):

Mac Pipeline • Build: השתמשו ב-PyInstaller עם ארכיטקטורת x86_64. • Format: צרו .app bundle ולאחר מכן קובץ .dmg. • Signing: השתמשו ב-codesign עם תעודת Developer ID. • Validation: שלחו את האפליקציה שלכם ל-Apple לצורך Notarization.

Windows Pipeline • Build: השתמשו ב-PyInstaller. • Format: השתמשו ב-Inno Setup כדי ליצור מתקין .exe. • Signing: השתמשו ב-eSigner CSC לחתימה מבוססת ענן. • Validation: בנו מוניטין (reputation) במערכת Microsoft SmartScreen.

מלכודות נפוצות

ארכיטקטורת Mac אם אתם בונים על Mac עם שבב Apple Silicon, הקבצים הבינאריים שלכם עשויים לעבוד רק על ARM64. המשמעות היא שהם ייכשלו ב-Mac עם מעבדי Intel. תמיד הריצו את ה-build שלכם תחת ארכיטקטורת x86_64 כדי להבטיח שהאפליקציה תעבוד בשני סוגי ה-Mac.

חתימה ב-Mac חתימה פשוטה נכשלת לעיתים קרובות עם ה-Hardened Runtime. עליכם למצוא כל קובץ Mach-O binary בתוך ה-app bundle שלכם ולחתום עליהם אחד אחד, מבפנים החוצה.

Notarization ב-Mac תהליך ה-Notarization עלול להיתקע למשך ימים. לרוב זה אינו באג טכני. בדקו בחשבון ה-Apple Developer שלכם אם חסרים טפסי מס או פרטי בנקאות. בעיות מנהלתיות אלו חוסמות לעיתים קרובות את השחרור שלכם.

התקנה ב-Windows השתמשו ב-Inno Setup כדי להתקין את האפליקציה שלכם במצב משתמש (user mode). זה מתקין את האפליקציה בתיקיית המשתמש במקום בתיקיית המערכת. זה מאפשר למשתמשים להתקין את התוכנה שלכם ללא הרשאות מנהל (admin rights). זה מונע פניות רבות לשירות התמיכה.

חתימה ב-Windows חתימה מסורתית דורשת טוקן USB פיזי. זה מקשה על אוטומציה. השתמשו בשירותי חתימה בענן כמו eSigner CSC כדי לחתום על הקבצים שלכם ישירות מתוך הסקריפטים שלכם.

בעיית הגרסאות (Versioning) עליכם לשמור על מספרי גרסאות מסונכרנים בכל הקבצים. אם קוד ה-Python, סקריפט ההתקנה ושרת האינטרנט שלכם משתמשים במספרי גרסה שונים, בדיקות העדכון שלכם ייכשלו.

בנו את ה-pipeline פעם אחת. לוקח זמן להגדיר אותו. אבל ברגע שהוא עובד, תוכלו להפיץ גרסאות חדשות תוך 30 דקות.

מקור: https://dev.to/susumun/distributing-a-python-desktop-app-on-windows-and-mac-the-full-release-pipeline-1n4