Getting started
How to create an Apple Wallet pass
A practical end-to-end guide to designing, packaging, signing, testing, and distributing a real Apple Wallet pass.
What you’ll leave with
- Choose the Wallet pass style before laying out fields and artwork.
- A distributable pass needs pass.json, referenced assets, manifest.json, and a valid signature.
- Validate the finished .pkpass—not only the source JSON—before distribution.
1. Choose the pass style around the job
Start with the thing the pass represents, not its color scheme. Boarding passes are built around a journey, event tickets around admission, coupons around an offer, and store cards around an ongoing customer relationship. Generic passes cover memberships, access cards, receipts, and other flexible uses.
The style changes how Wallet prioritizes fields and artwork. Switching late can force a redesign, so decide it before authoring the field hierarchy. Put the one fact someone needs at a glance in the primary field, then move supporting information into secondary, auxiliary, and back fields.
- Boarding pass: origin, destination, departure, gate, and seat
- Event ticket: event, venue, date, section, row, and seat
- Coupon: offer, redemption code, and expiry
- Store card: member identity, balance, points, or tier
- Generic: memberships, claims, access, and everything else
2. Author pass.json and the visible assets
Every pass starts with pass.json. It identifies the issuer, assigns a serial number, declares one pass style, and supplies the content Wallet renders. Required identifiers must match the certificate that will sign the package.
Add an icon first because Wallet expects it for system surfaces. Then add the artwork supported by the chosen style, such as a logo, strip, thumbnail, or background. Include the correct Retina variants and test legibility against the final colors rather than judging each asset in isolation.
{
"formatVersion": 1,
"passTypeIdentifier": "pass.com.example.membership",
"teamIdentifier": "ABCDE12345",
"serialNumber": "MEMBER-0042",
"organizationName": "Example Club",
"description": "Example Club membership",
"backgroundColor": "rgb(18, 32, 64)",
"generic": {
"primaryFields": [
{ "key": "member", "label": "MEMBER", "value": "Avery Chen" }
]
}
}3. Build the manifest and sign the package
Create manifest.json after every pass file is final. It maps each included filename to the SHA-1 digest of that exact file. A one-byte change to pass.json or an image makes the old digest invalid, so asset optimization must happen before manifest generation.
Sign the raw bytes of manifest.json with the Pass Type ID certificate and include the current Apple Worldwide Developer Relations intermediate certificate. Save the detached PKCS#7 signature as a file named signature, then ZIP the files at the archive root and rename the result with a .pkpass extension.
4. Validate, install, and distribute
Inspect the finished archive before serving it. A useful validation pass checks JSON rules, manifest coverage and hashes, signature integrity, certificate dates, the WWDR chain, and whether Team ID and Pass Type ID values match the signer.
Serve the file over HTTPS with the application/vnd.apple.pkpass MIME type. Test installation from the same delivery path customers will use—Safari, Mail, Messages, or your app—because a valid local file can still fail when a server sends the wrong headers or alters the bytes.
- Open the pass on a physical iPhone and Apple Watch when relevant.
- Check light and dark artwork, long values, and localized strings.
- Revalidate after every content, image, certificate, or packaging change.
Put it into practice
Build the JSON, then verify the package.
Use the free browser tools to turn the rules in this guide into a clean starting file and an actionable validation report.
Skip the hand-assembly.
PassMaker does every step on this page on your iPhone — field editor, artwork, manifest, PKCS#7 signing and Add to Wallet — without wiring up a signing environment.
Download on the App StorePrimary references
Related guides
pass.json
pass.json reference with working examplesUnderstand required keys, pass styles, fields, colors, barcodes, relevance, and common pass.json validation failures.
10 min readSigning
How to sign a .pkpass file correctlyA focused guide to Pass Type ID certificates, manifest hashing, detached PKCS#7 signatures, WWDR certificates, and final packaging.
9 min readPackaging
PKPass manifest and package structure explainedLearn exactly what belongs inside a .pkpass archive, how manifest hashes work, and why wrapper folders and stale assets break validation.
8 min read