Apple Wallet Pass의 이해 및 구조
Apple Wallet Pass는 티켓, 쿠폰, 멤버십 카드 등 실제 항목의 디지털 표현이며, 단순한 정적 이미지를 넘어 동적이고 상호작용적인 기능을 제공합니다.
* 주요 기능: 실시간 업데이트, 만료일 설정, 포인트/잔액 관리, QR 코드/바코드, 지리적 위치 및 시간 기반 트리거.
* Pass 구조: .pkpass
파일은 manifest.json
(파일 무결성 검증), pass.json
(패스 데이터), 이미지(icon.png
, strip.png
등), 그리고 Apple 개발자 인증서로 생성된 암호화 서명으로 구성됩니다.
Pass 유형 및 개발자 설정
Apple Wallet Pass는 5가지 주요 유형으로 나뉩니다.
* 유형: Boarding Pass (탑승권), Coupon (쿠폰), Event Ticket (이벤트 티켓), Store Card (상점 카드), Generic (일반). 각 유형은 특정 사용 사례와 레이아웃 규칙을 가집니다.
* Apple 개발자 설정: Apple Developer 계정이 필수적이며, 다음 요소들을 준비해야 합니다.
* Apple Intermediate Certificate (WWDR Certificate)
* Apple Team ID
* Pass Type ID (고유 식별자)
* Certificate Signing Request (CSR) 및 p12 개인 인증서
* PKCS12 파싱 오류 해결: OpenSSL 3.0 이상 버전에서 발생하는 PKCS12_parse: unsupported
오류는 openssl pkcs12 -legacy
명령을 통해 인증서를 재암호화하여 해결할 수 있습니다.
Rails 애플리케이션 통합 (Passkit Gem)
Rails 애플리케이션에 Apple Wallet Pass를 통합하기 위해 Passkit
Gem을 사용합니다.
* 환경 설정: rails new
로 새 프로젝트를 생성하고, passkit
, money-rails
, figaro
Gem을 설치합니다. config/application.yml
에 PASSKIT_WEB_SERVICE_HOST
, PASSKIT_APPLE_INTERMEDIATE_CERTIFICATE
등 필요한 환경 변수를 설정하고, 인증서 파일을 certs
디렉토리에 저장합니다.
* Passkit Gem의 기능:
* 커스텀 패스 생성: Passkit::BasePass
를 상속받아 app/lib/passkit
폴더에 커스텀 패스 클래스를 정의합니다. pass_type
메서드를 오버라이드하고, description
, background_color
, header_fields
, barcodes
등 필요한 필드 메서드를 구현합니다.
* 동적 이미지 처리: add_other_files
훅을 사용하여 Active Storage에 업로드된 이미지(예: 이벤트 커버)를 패스에 동적으로 포함할 수 있습니다.
* URL 생성, 미리보기, 대시보드: Passkit::UrlGenerator
를 통해 패스 다운로드 URL을 생성하고, 개발 중 패스 미리보기 기능 및 생성된 패스 모니터링 대시보드를 제공합니다.