iOS 27 introduces a new 'Poster Generic' pass style for bold artwork-forward passes, four new barcode formats (EAN-13, Code 39, Codabar, ITF), and a 'featuredActions' API that surfaces relevant actions below any pass style β all configurable via pass.json and the new Pass Builder Swift package.
β’ The new Poster Generic style enables visually striking membership and loyalty cards with full-bleed artwork, unlocking a premium presentation tier previously unavailable.
β’ Four new barcode formats (EAN-13, Code 39, Codabar, ITF) allow direct compatibility with existing retail and healthcare scanning infrastructure without custom hardware.
β’ Featured Actions bring contextual deep-links (membership benefits, offers, etc.) directly below any pass type, reducing friction between the pass and follow-on actions in your app or website.
Demonstrates how to use the PassBuilder Swift package on a server to load a Poster Generic template, personalize its fields, set a featured action, configure a PDF417 barcode, and sign the pass for distribution.
import Foundation
import PassBuilder
// Model representing a dog membership loaded from your database
struct DogMember {
let name: String
let membershipID: String
let favoriteToy: String
let photoURL: URL
}
// Creates a signed .pkpass file personalized for a single member
func createPass(for dog: DogMember, templateURL: URL, outputDirectory: URL) async throws -> URL {
// Load the .pkpasstemplate created in Pass Designer
var package = try PassPackage(contentsOf: templateURL)
// Personalize pass fields
try package.pass.fields.setValue(dog.name, forKey: "DOG_NAME")
try package.pass.fields.setValue(dog.membershipID, forKey: "DOG_ID")
try package.pass.fields.setValue(dog.favoriteToy, forKey: "LOVES")
// Set the background image to the dog's photo
package.backgroundImage = PassImage(contentsOf: dog.photoURL)
// Configure a PDF417 barcode encoding the membership ID
let barcode = Pass.Barcode(
message: dog.membershipID,
format: .PDF417
)
package.pass.barcodes = [barcode]
// Add a featured action so clients can view membership benefits
let benefitsAction = Pass.Action(
identifier: "view-membership-benefits",
type: .membershipBenefits,
value: URL(string: "https://staceydogdaycare.example.com/benefits")!
)
package.pass.featuredActions = [benefitsAction]
// Load signing certificates
let passCert = try PassCertificate(contentsOf: URL(fileURLWithPath: "/certs/pass.p12"), passphrase: "secret")
let wwdrCert = try PassCertificate(contentsOf: URL(fileURLWithPath: "/certs/wwdr.pem"))
// Sign and write the .pkpass file
let signer = PassSigner(passCertificate: passCert, wwdrCertificate: wwdrCert)
let outputURL = outputDirectory.appendingPathComponent("\(dog.membershipID).pkpass")
try await signer.signPass(package, writingTo: outputURL)
return outputURL
}Poster Generic only displays the first footer field if multiple are provided. New barcode formats (Codabar, ITF, Code 39, EAN-13) render no barcode at all on iOS 26 and earlier if no fallback entry is provided in the barcodes array β always supply a prioritized barcodes array. Featured actions are limited to two per pass and must use documented action type identifiers. Pass Builder is a Swift on Server package (supports Mac and Linux) and is not bundled with Xcode β it must be added as an SPM dependency separately.
Poster Generic and the new barcode types require iOS 27+; fallback to existing generic style and alternative barcode entries in the barcodes array is strongly recommended for iOS 26 and earlier users.
More iOS 27 APIs land every week.
Get notified when new capabilities are published β no noise, just signal.