{ "$schema": "https://raw.githubusercontent.com/guitaripod/wwdc-sessions/master/schema/session.schema.json", "schemaVersion": 1, "id": "wwdc2026-209", "event": "wwdc2026", "eventName": "WWDC26", "year": 2026, "eventContentId": 209, "title": "What’s new in Wallet", "description": "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.", "url": "https://developer.apple.com/videos/play/wwdc2026/209", "sosumiURL": "https://sosumi.ai/videos/play/wwdc2026/209", "type": "Video", "publishedAt": "2026-06-08T14:00:00-07:00", "platforms": [ "iOS", "iPadOS", "macOS", "visionOS", "watchOS" ], "keywords": [ "certificate", "certificates", "distribution", "package", "pass", "passes", "signature", "signing", "wallet" ], "topics": [ "System Services", "App Services" ], "primaryTopic": "App Services", "duration": 949, "hasTranscript": true, "transcriptWordCount": 2161, "availableLanguages": [ "eng", "fra", "jpn", "kor", "por", "spa", "zho" ], "media": { "hls": "https://devstreaming-cdn.apple.com/videos/wwdc/2026/209/5/25eb40d5-b64d-4677-bc99-f5c3a30d386a/cmaf.m3u8", "downloadHLS": "https://devstreaming-cdn.apple.com/videos/wwdc/2026/209/5/25eb40d5-b64d-4677-bc99-f5c3a30d386a/cmaf-download.m3u8", "downloadSD": "https://devstreaming-cdn.apple.com/videos/wwdc/2026/209/5/25eb40d5-b64d-4677-bc99-f5c3a30d386a/downloads/wwdc2026-209_sd.mp4", "downloadHD": "https://devstreaming-cdn.apple.com/videos/wwdc/2026/209/5/25eb40d5-b64d-4677-bc99-f5c3a30d386a/downloads/wwdc2026-209_hd.mp4", "duration": 949 }, "codeSnippets": [ { "title": "Adopting Poster Generic", "language": "json", "startTimeSeconds": 101, "code": "// Adopting Poster Generic\n\"posterGeneric\": {\n \"headerFields\": [\n {\n \"key\": \"memberID\",\n \"label\": \"Guest No.\",\n \"value\": \"102035\"\n }\n ],\n \"footerFields\": [\n {\n \"key\": \"membershipType\",\n \"value\": \"Family Pass\"\n }\n ]\n}" }, { "title": "Adopting Poster Generic with Generic fallback", "language": "json", "startTimeSeconds": 131, "code": "// Adopting Poster Generic and supporting Generic on iOS 26 and earlier\n\"posterGeneric\": {\n \"headerFields\": [\n {\n \"key\": \"memberID\",\n \"label\": \"Guest No.\",\n \"value\": \"102035\"\n }\n ],\n \"footerFields\": [\n {\n \"key\": \"membershipType\",\n \"value\": \"Family Pass\"\n }\n ]\n},\n\"generic\": {\n \"headerFields\": [\n {\n \"key\": \"memberID\",\n \"label\": \"Guest No.\",\n \"value\": \"102035\"\n }\n ],\n \"footerFields\": [\n {\n \"key\": \"membershipType\",\n \"value\": \"Family Pass\"\n }\n ]\n}" }, { "title": "Barcodes: Add new types for iOS 27", "language": "json", "startTimeSeconds": 172, "code": "// Adopting new barcode types\n\"barcodes\": [\n {\n \"format\": \"PKBarcodeFormatCodabar\"\n \"message\": \"…\"\n \"messageEncoding\": \"…\"\n }\n]" }, { "title": "Barcodes: Supporting iOS 26 and earlier", "language": "json", "startTimeSeconds": 217, "code": "// Adopting new barcode types and supporting iOS 26 and earlier.\n\"barcodes\": [\n {\n \"format\": \"PKBarcodeFormatCodabar\"\n \"message\": \"123456789\"\n \"messageEncoding\": \"iso-8859-1\"\n },\n {\n \"format\": \"PKBarcodeFormatQR\"\n \"message\": \"123456789\"\n \"messageEncoding\": \"iso-8859-1\"\n }\n]" }, { "title": "Featured actions", "language": "json", "startTimeSeconds": 288, "code": "// Featured actions\n\"featuredActions\": [\n {\n \"identifier\": \"my-offer-id\",\n \"type\": \"membershipBenefits\",\n \"url\": \"www.example.com/offers\"\n }\n]" }, { "title": "Package.swift", "language": "swift", "startTimeSeconds": 656, "code": "// Package.swift\n\nimport PackageDescription\n\nlet package = Package(\n name: \"MyServer\",\n products: [\n .library(\n name: \"MyServer\",\n targets: [\"MyServer\"]\n ),\n ],\n dependencies: [\n .package(path: \"./path/to/PassBuilder\")\n ],\n targets: [\n .target(\n name: \"MyServer\",\n dependencies: [\n .product(name: \"PassBuilder\", package: \"PassBuilder\")\n ]\n ),\n …\n ]" }, { "title": "CreatePass.swift", "language": "swift", "startTimeSeconds": 665, "code": "// CreatePass.swift\n\nimport PassBuilder\n\nfunc createPass(for doggo: MemeberModel) async throws -> URL {\n var package = PassPackage(url: \"template.pkpasstemplate\")\n\n package.pass.fields.setValue(doggo.name, forKey: \"DOG_NAME\")\n package.pass.fields.setValue(doggo.favoriteToy, forKey: \"LOVES\")\n package.pass.fields.setValue(doggo.id, forKey: \"MEMBER_ID\")\n\n package.background = PassImage(url: doggo.photoURL)\n\n package.pass.barcodes = [\n Pass.Barcode(message: doggo.id, format: .pdf417)\n ]\n\n package.featuredActions = [\n Pass.Action(id: \"action-1\", type: \"viewMembership\", url: doggo.membershipURL) \n ]\n …\n}" }, { "title": "CreatePass.swift", "language": "swift", "startTimeSeconds": 791, "code": "// CreatePass.swift\n\nimport PassBuilder\n\nfunc createPass(for doggo: MemeberModel) async throws -> URL {\n var package = PassPackage(url: \"template.pkpasstemplate\")\n\n package.pass.fields.setValue(doggo.name, forKey: \"DOG_NAME\")\n package.pass.fields.setValue(doggo.favoriteToy, forKey: \"LOVES\")\n package.pass.fields.setValue(doggo.id, forKey: \"MEMBER_ID\")\n\n package.background = PassImage(url: doggo.photoURL)\n\n package.pass.barcodes = [\n Pass.Barcode(message: doggo.id, format: .pdf417)\n ]\n\n package.featuredActions = [\n Pass.Action(id: \"action-1\", type: \"viewMembership\", url: doggo.membershipURL) \n ]\n\n let passCertificate = try PassCertificate(url: \"pass.p12\", password: \"s3cr3t\")\n let wwdrCertificate = try PassCertificate(url: \"wwdr.cer\")\n\n let signer = PassSigner(\n passCertificate: passCertificate,\n wwdrCertifiate: wwdrCertificate\n )\n\n let destinationURL = URL(string: \"/www/passes/\" + doggo.id)\n try signer.signPass(package, writingTo: destinationURL)\n\n return destinationURL\n}" } ], "resources": [ { "title": "Pass Designer", "url": "https://developer.apple.com/pass-designer", "type": "guide", "description": "Use Pass Designer on macOS to create and style Wallet passes, then export templates to personalize, sign, and distribute with Pass Builder.", "sosumiURL": "https://sosumi.ai/pass-designer" }, { "title": "Creating a pass with Pass Designer", "url": "https://developer.apple.com/documentation/walletpasses/creating-a-pass-with-pass-designer", "type": "documentation", "description": "Use Pass Designer on macOS, to create, style, and export Wallet passes as template files to sign and distribute with Pass Builder.", "sosumiURL": "https://sosumi.ai/documentation/walletpasses/creating-a-pass-with-pass-designer", "doccJSON": "https://developer.apple.com/tutorials/data/documentation/walletpasses/creating-a-pass-with-pass-designer.json" }, { "title": "Pass Builder", "url": "https://github.com/apple/pass-builder", "type": "guide", "description": "A Swift library and command-line tool for creating, validating, and signing Apple Wallet passes." }, { "title": "Pass.Barcodes", "url": "https://developer.apple.com/documentation/WalletPasses/Pass/Barcodes-data.dictionary", "type": "documentation", "description": "An array of barcode objects on a Pass.", "sosumiURL": "https://sosumi.ai/documentation/WalletPasses/Pass/Barcodes-data.dictionary", "doccJSON": "https://developer.apple.com/tutorials/data/documentation/WalletPasses/Pass/Barcodes-data.dictionary.json" }, { "title": "Learn more about Pass Designer", "url": "https://developer.apple.com/pass-designer/", "type": "documentation", "description": null, "sosumiURL": "https://sosumi.ai/pass-designer/" } ], "path": "sessions/wwdc2026/209-what-s-new-in-wallet/", "files": { "metadata": "sessions/wwdc2026/209-what-s-new-in-wallet/metadata.json", "readme": "sessions/wwdc2026/209-what-s-new-in-wallet/README.md", "transcript": "sessions/wwdc2026/209-what-s-new-in-wallet/transcript.md", "transcriptJSON": "sessions/wwdc2026/209-what-s-new-in-wallet/transcript.json" } }