Windows 및 Mac에서 Python 데스크톱 앱 배포하기
Python은 크로스 플랫폼입니다. 코드를 한 번 작성하면 어디에서든 실행할 수 있습니다.
하지만 그 코드를 배포하는 것은 별개의 문제입니다. Windows와 macOS를 위한 파이프라인은 완전히 분리되어 있습니다. 각 시스템에 맞는 서로 다른 도구와 규칙을 다뤄야 합니다.
출시 프로세스의 세부 내용은 다음과 같습니다:
Mac 파이프라인 • 빌드: x86_64 아키텍처와 함께 PyInstaller를 사용합니다. • 형식: .app 번들을 생성한 다음 .dmg 파일을 만듭니다. • 서명: Developer ID 인증서를 사용하여 codesign을 사용합니다. • 검증: Apple에 앱을 제출하여 공증(Notarization)을 받습니다.
Windows 파이프라인 • 빌드: PyInstaller를 사용합니다. • 형식: Inno Setup을 사용하여 .exe 설치 프로그램을 만듭니다. • 서명: 클라우드 기반 서명을 위해 eSigner CSC를 사용합니다. • 검증: Microsoft SmartScreen 시스템에서 평판(reputation)을 구축합니다.
흔히 발생하는 문제점
Mac 아키텍처 Apple Silicon Mac에서 빌드하면 바이너리가 ARM64에서만 작동할 수 있습니다. 이는 Intel Mac에서 실행되지 않을 수 있음을 의미합니다. 앱이 두 종류의 Mac 모두에서 실행되도록 항상 x86_64 아키텍처를 통해 빌드를 수행하십시오.
Mac 서명 단순한 서명은 Hardened Runtime 환경에서 실패하는 경우가 많습니다. 앱 번들 내부의 모든 Mach-O 바이너리를 찾아 내부에서 외부로 하나씩 서명해야 합니다.
Mac 공증(Notarization) 공증은 며칠 동안 지연될 수 있습니다. 이는 기술적인 버그가 아닌 경우가 많습니다. Apple Developer 계정에 누락된 세금 양식이나 은행 정보가 있는지 확인하십시오. 이러한 행정적인 문제가 출시를 가로막는 경우가 많습니다.
Windows 설치 Inno Setup을 사용하여 앱을 사용자 모드로 설치하십시오. 이렇게 하면 앱이 시스템 폴더 대신 사용자 폴더에 설치됩니다. 사용자가 관리자 권한 없이 소프트웨어를 설치할 수 있게 해주며, 이는 많은 기술 지원 요청(support tickets)을 방지합니다.
Windows 서명 전통적인 서명 방식은 물리적인 USB 토큰이 필요합니다. 이로 인해 자동화가 어렵습니다. eSigner CSC와 같은 클라우드 서명 서비스를 사용하여 스크립트에서 직접 파일에 서명하십시오.
버전 관리 문제 모든 파일의 버전 번호를 동기화해야 합니다. Python 코드, 설치 스크립트, 웹 서버가 서로 다른 버전 번호를 사용하면 업데이트 확인이 실패합니다.
파이프라인을 한 번 구축해 두십시오. 설정하는 데 시간이 걸리지만, 일단 작동하면 30분 만에 새로운 버전을 출시할 수 있습니다.