Phân phối Ứng dụng Desktop Python trên Windows và Mac
Python có tính đa nền tảng. Bạn chỉ cần viết mã một lần và có thể chạy ở bất cứ đâu.
Nhưng việc phân phối mã đó lại là một câu chuyện khác. Quy trình (pipeline) cho Windows và macOS hoàn toàn tách biệt. Bạn phải xử lý các công cụ và quy tắc khác nhau cho từng hệ thống.
Dưới đây là chi tiết về quy trình phát hành:
Mac Pipeline • Build: Sử dụng PyInstaller với kiến trúc x86_64. • Định dạng: Tạo một app bundle .app và sau đó là một tệp .dmg. • Ký (Signing): Sử dụng codesign với chứng chỉ Developer ID. • Xác thực: Gửi ứng dụng của bạn cho Apple để được Notarization.
Windows Pipeline • Build: Sử dụng PyInstaller. • Định dạng: Sử dụng Inno Setup để tạo trình cài đặt .exe. • Ký (Signing): Sử dụng eSigner CSC để ký dựa trên đám mây. • Xác thực: Xây dựng uy tín trong hệ thống Microsoft SmartScreen.
Các lỗi thường gặp
Kiến trúc Mac Nếu bạn build trên máy Mac chạy Apple Silicon, các tệp nhị phân (binaries) của bạn có thể chỉ hoạt động trên ARM64. Điều này có nghĩa là chúng sẽ không chạy được trên các máy Mac Intel. Hãy luôn thực hiện build thông qua kiến trúc x86_64 để đảm bảo ứng dụng của bạn chạy được trên cả hai loại máy Mac.
Ký ứng dụng trên Mac Việc ký đơn giản thường thất bại với Hardened Runtime. Bạn phải tìm mọi tệp nhị phân Mach-O bên trong app bundle và ký chúng lần lượt từ trong ra ngoài.
Notarization trên Mac Quá trình Notarization có thể bị đình trệ trong nhiều ngày. Đây thường không phải là lỗi kỹ thuật. Hãy kiểm tra tài khoản Apple Developer của bạn xem có thiếu biểu mẫu thuế hay thông tin ngân hàng nào không. Những vấn đề hành chính này thường là nguyên nhân gây tắc nghẽn việc phát hành.
Cài đặt trên Windows Sử dụng Inno Setup để cài đặt ứng dụng ở chế độ người dùng (user mode). Cách này sẽ cài đặt ứng dụng vào thư mục người dùng thay vì thư mục hệ thống. Nó cho phép người dùng cài đặt phần mềm của bạn mà không cần quyền quản trị (admin rights). Điều này giúp giảm thiểu nhiều yêu cầu hỗ trợ kỹ thuật.
Ký ứng dụng trên Windows Việc ký truyền thống yêu cầu một token USB vật lý. Điều này khiến việc tự động hóa trở nên khó khăn. Hãy sử dụng các dịch vụ ký trên đám mây như eSigner CSC để ký các tệp của bạn trực tiếp từ các script.
Vấn đề về phiên bản Bạn phải giữ cho các số phiên bản được đồng bộ hóa trên tất cả các tệp. Nếu mã Python, script cài đặt và máy chủ web của bạn sử dụng các số phiên bản khác nhau, việc kiểm tra cập nhật sẽ thất bại.
Hãy xây dựng pipeline một lần. Việc thiết lập sẽ tốn thời gian. Nhưng một khi đã hoạt động, bạn có thể phát hành các bản cập nhật mới chỉ trong 30 phút.