iOS SDK changelog
The four products (PurseHeadlessCheckout, PurseCheckoutApplePay, PurseCheckoutPayPal, PurseCheckoutKlarna) release together and share one version. Versions follow semantic versioning: a change that removes or alters a public declaration ships as a major with a migration note below; an addition is a minor; a fix is a patch. Each version is a tag on the GitHub repository, resolvable by Swift Package Manager. This documentation describes the latest release.
Fixes the Apple Pay sheet dismissal that kept 1.2.0's XCFrameworks from being built. Use 1.2.1 rather than 1.2.0.
Partner plugin events, amount updates to plugins, a device compatibility probe and Payment API call timing, closing the engine gaps with the Android SDK.
onPluginEvent relays each PluginEvent a partner's native step reports (ready, redirect, initFailed, clientError, partnerError, cancelled, endOfSession). The checkout reacts first: it moves the method into PARTNER_UI_FATAL_ERROR or PARTNER_UI_RECOVERABLE_ERROR, clears a recoverable state on ready, and sets sessionState to .terminated on endOfSession.ensureClientCompatibility after creation and every setSession(_:): a method whose plugin refuses the device moves into PLUGIN_INCOMPATIBLE and leaves the list. Apple Pay refuses a device that cannot pay.onAmountUpdate); HEADLESS_CHECKOUT_PARTNER_API_CALL_START and _END time every Payment API call, by path; HEADLESS_CHECKOUT_PARTNER_UI_EVENT reports each plugin event.Signed XCFrameworks on every release, and a richer card form: co-badge selector, relayed field state and stable field identifiers.
PurseHeadlessCheckout, PurseCheckoutApplePay and PurseCheckoutKlarna to signed XCFrameworks, like Secure Fields; PurseCheckoutPayPal stays source. Public enums are not frozen: an exhaustive switch needs an @unknown default.selectBrand(_:)), per-field state and selected brand relayed by CardCoordinator, and fixed accessibility identifiers on the field views.First release of the Headless Checkout iOS SDK: the payment engine, the payment elements, card (Purse vault) via Secure Fields, Apple Pay, PayPal, Klarna, redirection methods, gift cards, saved methods and BNPL simulation, distributed as four Swift Package Manager products.
PurseHeadlessCheckout: the engine, paymentElement(for:listener:) / PaymentElementView, card and redirection methods, gift cards, saved methods, instalment simulation.PurseCheckoutApplePay, PurseCheckoutPayPal and PurseCheckoutKlarna, one partner SDK each, installed explicitly with PluginRegistry.shared.install(_:) — a card-only merchant links no PassKit and declares no Apple Pay entitlement.PaymentOutcome (completed, returnedFromRedirect, canceled, failed) on the payment element listener; every failure is a typed PurseError with one of the 33 stable codes shared with the web and Android SDKs.saveState() / restore(_:): the checkout survives process death during a bank, PayPal or Klarna step; a submitted session refuses a second submit.sessionTransactions(), paymentStatus() and awaitPaymentOutcome(timeout:pollInterval:) over a typed PaymentSessionStatus, the only honest way to resolve a redirect return or a /validate whose outcome is unknown.PurseHeadlessCheckout(widgetData:disabledMethods:) hides a method for one checkout instance; Payment-method and card-scheme badges — iconURL(for:), schemeAssets(for:) and PurseAssets, CDN URLs you render yourself; Monitoring events reported to Purse with a batched event bus; a HEADLESS_CHECKOUT_METHOD_DISABLED event on every method state transition, carrying the state's code and never its message; no raw amount in any event.