Dunfey · Hotel WWDC as data, est. 1983
Front desk everything
Years
Topics

2026 System ServicesApp Services

WWDC26 · 16 min · System Services / App Services

What’s new in Wallet

Explore the newest design updates and developer tools for Apple Wallet passes. Refresh your passes with beautiful new styles for rich, vibrant designs. Discover new barcode formats and a flexible pass actions API. Meet Pass Designer and Pass Builder, powerful tools that simplify designing, personalizing, and distributing your passes at scale.

Watch at developer.apple.com ↗

Transcript all transcripts

Chapters

Code shown on screen · 8 snippets

Adopting Poster Generic json · at 1:41 ↗
// Adopting Poster Generic
"posterGeneric": {
  "headerFields": [
    {
      "key": "memberID",
      "label": "Guest No.",
      "value": "102035"
    }
  ],
  "footerFields": [
    {
      "key": "membershipType",
      "value": "Family Pass"
    }
  ]
}
Adopting Poster Generic with Generic fallback json · at 2:11 ↗
// Adopting Poster Generic and supporting Generic on iOS 26 and earlier
"posterGeneric": {
  "headerFields": [
    {
      "key": "memberID",
      "label": "Guest No.",
      "value": "102035"
    }
  ],
  "footerFields": [
    {
      "key": "membershipType",
      "value": "Family Pass"
    }
  ]
},
"generic": {
  "headerFields": [
    {
      "key": "memberID",
      "label": "Guest No.",
      "value": "102035"
    }
  ],
  "footerFields": [
    {
      "key": "membershipType",
      "value": "Family Pass"
    }
  ]
}
Barcodes: Add new types for iOS 27 json · at 2:52 ↗
// Adopting new barcode types
"barcodes": [
  {
    "format": "PKBarcodeFormatCodabar"
    "message": "…"
    "messageEncoding": "…"
  }
]
Barcodes: Supporting iOS 26 and earlier json · at 3:37 ↗
// Adopting new barcode types and supporting iOS 26 and earlier.
"barcodes": [
  {
    "format": "PKBarcodeFormatCodabar"
    "message": "123456789"
    "messageEncoding": "iso-8859-1"
  },
  {
    "format": "PKBarcodeFormatQR"
    "message": "123456789"
    "messageEncoding": "iso-8859-1"
  }
]
Featured actions json · at 4:48 ↗
// Featured actions
"featuredActions": [
  {
    "identifier": "my-offer-id",
    "type": "membershipBenefits",
    "url": "www.example.com/offers"
  }
]
Package.swift swift · at 10:56 ↗
// Package.swift

import PackageDescription

let package = Package(
    name: "MyServer",
    products: [
          .library(
              name: "MyServer",
              targets: ["MyServer"]
        ),
    ],
    dependencies: [
        .package(path: "./path/to/PassBuilder")
    ],
    targets: [
        .target(
            name: "MyServer",
            dependencies: [
                .product(name: "PassBuilder", package: "PassBuilder")
            ]
        ),
        
    ]
CreatePass.swift swift · at 11:05 ↗
// CreatePass.swift

import PassBuilder

func createPass(for doggo: MemeberModel) async throws -> URL {
    var package = PassPackage(url: "template.pkpasstemplate")
    
    package.pass.fields.setValue(doggo.name, forKey: "DOG_NAME")
    package.pass.fields.setValue(doggo.favoriteToy, forKey: "LOVES")
    package.pass.fields.setValue(doggo.id, forKey: "MEMBER_ID")
  
    package.background = PassImage(url: doggo.photoURL)
  
    package.pass.barcodes = [
        Pass.Barcode(message: doggo.id, format: .pdf417)
    ]
  
    package.featuredActions = [
        Pass.Action(id: "action-1", type: "viewMembership", url: doggo.membershipURL) 
    ]
    
}
CreatePass.swift swift · at 13:11 ↗
// CreatePass.swift

import PassBuilder

func createPass(for doggo: MemeberModel) async throws -> URL {
    var package = PassPackage(url: "template.pkpasstemplate")
    
    package.pass.fields.setValue(doggo.name, forKey: "DOG_NAME")
    package.pass.fields.setValue(doggo.favoriteToy, forKey: "LOVES")
    package.pass.fields.setValue(doggo.id, forKey: "MEMBER_ID")
  
    package.background = PassImage(url: doggo.photoURL)
  
    package.pass.barcodes = [
        Pass.Barcode(message: doggo.id, format: .pdf417)
    ]
  
    package.featuredActions = [
        Pass.Action(id: "action-1", type: "viewMembership", url: doggo.membershipURL) 
    ]

    let passCertificate = try PassCertificate(url: "pass.p12", password: "s3cr3t")
    let wwdrCertificate = try PassCertificate(url: "wwdr.cer")
  
    let signer = PassSigner(
        passCertificate: passCertificate,
        wwdrCertifiate: wwdrCertificate
    )
  
    let destinationURL = URL(string: "/www/passes/" + doggo.id)
    try signer.signPass(package, writingTo: destinationURL)
  
    return destinationURL
}

Resources