RORK LABJP
MAX — Rork Max generates native Swift for iPhone, iPad, Apple Watch, Apple TV, and Vision Pro, with 2-click App Store publishing and no Xcode requiredSTACK — Standard Rork builds cross-platform mobile apps with React Native (Expo); choosing between the two by use case is the key decisionFOCUS — Unlike web-first tools such as Bolt or Lovable, Rork specializes in native iOS and Android app generationBUGS — A hands-on review reports Rork resolved about 70% of bugs without manual help, with the remaining 30% needing edits in the exported codebaseFUNDING — Rork raised $2.8M from a16z (Andreessen Horowitz)PRICING — It is free to start, with paid plans from $25/month, so you can try before committingMAX — Rork Max generates native Swift for iPhone, iPad, Apple Watch, Apple TV, and Vision Pro, with 2-click App Store publishing and no Xcode requiredSTACK — Standard Rork builds cross-platform mobile apps with React Native (Expo); choosing between the two by use case is the key decisionFOCUS — Unlike web-first tools such as Bolt or Lovable, Rork specializes in native iOS and Android app generationBUGS — A hands-on review reports Rork resolved about 70% of bugs without manual help, with the remaining 30% needing edits in the exported codebaseFUNDING — Rork raised $2.8M from a16z (Andreessen Horowitz)PRICING — It is free to start, with paid plans from $25/month, so you can try before committing
Articles/App Dev
App Dev/2026-06-16Advanced

Adding an Apple Wallet Stamp Card to a Rork Max App — Signing and Updates

You want a shop stamp card in Apple Wallet. When you issue a PassKit pass from a Swift app generated by Rork Max, the hard parts are not design — they are signing and remote updates. Here are the implementation essentials.

Rork Max166PassKitApple WalletSwift25Loyalty

Premium Article

A Stamp Card as an "Image" Is Useless

It began when someone asked me to replace a paper stamp card with one in Apple Wallet. Simply showing an image of the card face is easy. But that way, stamps added per visit are not reflected, and the user ends up opening the app to check anyway. The point of putting it in Wallet is that it appears on the lock screen and the balance or stamp count stays current automatically.

Issuing a PassKit pass from a native Swift app generated by Rork Max taught me that the hard parts are not design — they are "signing" and "remote updates." Clear those two, or a Wallet pass is no better than a still image. Even as an indie developer who has shipped plenty of apps, this was a fresh stumble for me. Here are the essentials I confirmed.

A pkpass Is a Signed ZIP

An Apple Wallet pass (.pkpass) is a ZIP archive of several files, signed together. Its contents fall into roughly three parts.

First is pass.json: the pass type (store card, coupon, boarding pass, etc.), the fields to display, colors, and the barcode. Second is the images (icon.png, logo.png, and so on). Third is manifest.json and signature — the heart of signing.

manifest.json is a list of SHA-1 hashes for each file. signature is a PKCS#7 binary signing that manifest with your Pass Type ID certificate. In other words, tamper with even one file and the hash no longer matches, so Wallet rejects the pass. That is why "just swap the image" does not work.

A minimal pass.json:

{
  "formatVersion": 1,
  "passTypeIdentifier": "pass.com.example.stamp",
  "serialNumber": "user-00123",
  "teamIdentifier": "YOUR_TEAM_ID",
  "organizationName": "Sample Coffee",
  "description": "Stamp Card",
  "storeCard": {
    "primaryFields": [
      { "key": "stamps", "label": "Stamps", "value": "3 / 10" }
    ]
  },
  "barcode": {
    "format": "PKBarcodeFormatQR",
    "message": "user-00123",
    "messageEncoding": "iso-8859-1"
  },
  "webServiceURL": "https://example.com/passes/",
  "authenticationToken": "REPLACE_WITH_PER_USER_TOKEN"
}

webServiceURL and authenticationToken are the entry point for the remote updates described below. The signing itself happens on the server (or at build time). You must not bundle the private key in the app, so generating and signing the pass should be the backend's responsibility.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Understand the structure of a pkpass (pass.json, manifest, signature) and where signing actually matters
Learn the PKAddPassesViewController code to add a pass to Wallet from your app
Reproduce the push-update flow that bumps the stamp count on each visit, and the server-side web service requirements
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

App Dev2026-06-16
Staging Wallpaper Packs Before the First Launch: Where Rork Max and Background Assets Fit
Content-heavy apps tend to greet new users with an empty grid. Background Assets downloads content out-of-band, ahead of the first launch. Here is how I implement it in Rork Max's native Swift, a domain Rork (Expo) cannot reach easily, plus how I decide when it is worth it.
App Dev2026-06-16
Building an iMessage Extension with Rork Max to Bring Your App's World into Messages — Notes on Distribution as Code
A walkthrough of adding an iMessage extension to the native Swift project Rork Max generates, sharing your app's assets right inside Messages. Covers compact/expanded presentation, sending messages, and diagnosing why the extension won't appear in the drawer — from an indie developer's distribution lens.
App Dev2026-06-16
Building a WeatherKit App with Rork Max — The Auth and Attribution Pitfalls
When you add WeatherKit to a native Swift app generated by Rork Max, the first walls are authentication and attribution. Here is the workflow I confirmed: token handling, rate limits, and the mandatory data-source display.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →