> ## Documentation Index
> Fetch the complete documentation index at: https://primer.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# iOS SDK

**v3.0.0-beta.8**

2026-10-19

Primer Checkout beta. The API can still change before the stable release.

PrimerSDK requires iOS 15.0 or later for every integration, including Drop-in and Headless.

**🚀 New features**

* **Apple Pay**: Express Checkout shipping. Pass `onShippingAddressChange` and `onShippingOptionChange` to `PrimerCheckout`, `PrimerCheckoutSession` or `PrimerCheckoutPresenter.presentCheckout`. The shopper then picks a shipping option and sees the updated total in the Apple Pay sheet. Your `onShippingOptionChange` updates the client session's shipping through your backend within 20 seconds.
* `PrimerCheckoutState.failure` carries `checkoutData` with the payment id, order id and status when a payment was created. Match it with `case let .failure(error, checkoutData)`. **UIKit**: `primerCheckoutPresenterDidFailWithError(_:checkoutData:)` receives the same data.
* `PrimerCardFormSession.setVaultOnSuccess(_:)` sets whether a successful card payment saves the card. Use it for your own "save card" toggle. The client session needs a customer id.
* `PrimerCheckoutTheme.darkColors` sets the colors for dark mode. `colors` applies in light mode only. A color you leave out of `darkColors` uses Primer's dark default.
* `PrimerCheckoutTheme.width` sets the border widths for the default, focus, error and selected states of fields, payment method rows, saved-card rows and outlined buttons.
* `ColorOverrides` takes `primerColorOnBrand`, `primerColorBackgroundPrimary`, `primerColorBackgroundSecondary`, `primerColorBackgroundOutlinedDefault`, `primerColorBackgroundOutlinedDisabled` and `primerColorTextOutlinedDefault`.
* `TypographyOverrides.brand` sets one font family for every text style, and `TypographyOverrides.error` styles field error text.
* Card form fields offer iOS AutoFill, including saved cards and card scanning for the card number.

**🔧 Fixes**

* **PayPal**: the checkout creates the payment after the shopper approves it on PayPal. `.success` carries the real payment id and status. With the vault intent, the checkout confirms the billing agreement and creates no payment.
* Fixed a crash on iOS 27 while the SDK downloads payment method logos.
* Card and saved-method payments have no time limit, so a long 3DS challenge can finish. Klarna authorization also waits for the shopper with no time limit.
* A double tap on Pay or a repeated `submit()` call starts one payment and asks `onBeforePaymentCreate` once.
* Payments with a saved method call `onBeforePaymentCreate` first, and card payments send your idempotency key.
* **Klarna** and **PayPal**: when the shopper cancels, the checkout returns to the payment method list, or closes when there is no list. It reports no failure.
* `PrimerCheckout`'s `onCompletion` and the UIKit delegate receive `.failure` for every failed attempt, including a failed start. When the SDK error screen is on, the checkout stays open for a retry.
* When `isErrorScreenEnabled` is `false`, a failed `PrimerCheckout` start shows no SDK error view.
* The shopper cannot swipe the checkout sheet away while a payment is processing.
* The error screen shows the plain error message. It shows Retry only when there is a payment attempt to retry.
* Card form fields handle paste, AutoFill and fast typing correctly. The billing phone field validates phone numbers.
* A payment declined after 3DS or a redirect fails with `payment-failed` and keeps its payment id, order id and status.
* When the modal checkout has one payment method, it starts that method at once. If the shopper has saved methods, the checkout shows them first.
* `PrimerCardFormState.binData` lists card networks in your `orderedAllowedCardNetworks` order.
* **Klarna** appears in the list only when `PrimerKlarnaSDK` is linked, as in Drop-in and Headless.
* When any card network has a surcharge, the card's `CheckoutPaymentMethod.hasUnknownSurcharge` is `true`. Its `formattedSurcharge` reads "Additional fee may apply".
* A deleted saved method leaves the list at once, even when the saved-method refresh fails.
* When more than one QR code method is configured, or BLIK and MB WAY together, the screen shows the method the shopper picked.
* The MB WAY phone field accepts a pasted or AutoFilled international number.
* In the managed checkout, the card form's Pay button reads "Pay", or "Add card" when `payButtonAddNewCard` is set. It shows no amount.
* With the inline `.primerCheckoutSession` modifier, a forced `uiOptions.appearanceMode` (light or dark) sets the SDK colors and the follow-up sheet. Your own views keep their color scheme.
* A `primerColorBrand` override also colors focus rings, spinners and selected borders.
* Typography `lineHeight` and `letterSpacing` apply to text and scale with Dynamic Type. On iOS 15, `letterSpacing` applies only to text fields. Custom font families keep each style's weight.
* The payment method list, Klarna screen, saved methods and pay buttons match the Primer design. Input fields and text scale with Dynamic Type.
* VoiceOver reads clearer labels on pay buttons, text fields and the payment method list. The saved-card CVV field shows a 123 placeholder (1234 for American Express), and VoiceOver reads its label and hint in the shopper's language.

**v3.0.0-beta.7**

2026-09-23

Primer Checkout beta. The API can still change before the stable release.

**⚠️ Breaking changes for beta users**

* `PrimerSelectionSession.selectVaulted(_:)` now pays with the saved method. Call it from your pay button, not from a row tap.
* A saved card that needs its CVV now asks for it on its own SDK screen. The inline CVV field and its state are removed.

**🚀 New features**

* `PrimerCheckoutSession.formatAmount(_:)` formats an amount the way the SDK's own screens do.
* `PrimerSelectionSession.vaultedPaymentMethods` is published, so your own saved-card list updates when a method is added or deleted.
* `.primerCheckoutSession(_:theme:onCompletion:)` takes a theme that overrides the session's own.

**🔧 Fixes**

* Paying with a saved card now shows the processing screen.
* Amounts are formatted in the locale set in `PrimerSettings`.
* Retry now retries the payment that failed.

**v3.0.0-beta.6**

2026-09-16

Primer Checkout beta. The API can still change before the stable release.

**🔧 Fixes**

* **Apple Pay**: the payment creation callback now runs after the Apple Pay billing and shipping addresses reach the client session.
* Pay buttons have clearer VoiceOver labels.
* Polish translations corrected.

**v3.0.0-beta.5**

2026-09-03

Primer Checkout beta. The API can still change before the stable release.

**⚠️ Breaking changes for beta users**

* `PrimerSettings(paymentHandling: .manual)` is rejected when the checkout starts, with a `PrimerError` whose `errorId` is `invalid-value`. Primer Checkout creates the payment for you, keep the default `.auto`.
* `CardFormDefaults.email(_:)` is removed. The card form never rendered it.

**🔧 Fixes**

* **UIKit**: `PrimerCheckoutPresenterDelegate` now hears about a checkout the shopper swipes away. A decline left on the error screen arrives as a failure, anything else as a dismissal.
* Disabled success and error screens now deliver the result to `onCompletion` and to the delegate instead of leaving a blank sheet.
* Card form setters such as `setCardNumber` and `setExpiryDate` now show the value in the field.
* Vault management opens inline, line item tax is read from the line item, and allowed card networks are typed as `CardNetwork`.
* Polish translations corrected.
* Fixed a potential memory leak.

**v2.52.0**

2026-08-25

**✨ Improvements**

* Improvements to cancellation handling and web redirect based payment methods

**🔧 Fixes**

* **Apple Pay**: fixed amounts showing ten times too high in the payment sheet for three-decimal currencies (`BHD`, `IQD`, `JOD`, `KWD`, `LYD`, `OMR`, `TND`)
* **Apple Pay**: `primerWillCreatePaymentWithData` now fires after the shopper authorizes the payment, so the billing and shipping details collected in the Apple Pay sheet are available on the client session. This matches the Android SDK
* **Bancontact**: fixed tokenization failing in Headless raw data integrations, and two-digit (`MM/YY`) expiry years are now accepted
* Cached SDK assets moved from the app's Documents directory to `Library/Caches`, so they are no longer included in device backups

**v2.51.1**

2026-07-02

**🔧 Fixes**

* Fixed co-badged card validation in Headless integrations

**v2.51.0**

2026-06-29

**🚀 New features**

* **Apple Pay**: added `allowedCardTypes` to restrict the card types offered (`credit` or `debit`)

**v2.50.0**

2026-06-15

**✨ Improvements**

* Errors surfaced to your integration now always record their `diagnosticsId`, so the ID shown in an error message can be traced by Primer support

**v2.49.0**

2026-06-03

**✨ Improvements**

* General fixes and improvements

**v2.48.0**

2026-05-18

**✨ Improvements**

* Improvements to payment method processing

**🔧 Fixes**

* Fixes an issue where SPM resolution was not working correctly

**v2.47.0**

2026-04-27

**🚀 New features**

* Improved payment method processing

**✨ Improvements**

* Improvements to Card Network data

**v2.46.1**

2026-03-11

**🔧 Fixes**

* Improved Apple Pay availability detection to more accurately reflect supported cards in the user's Wallet
* Fixed duplicate payment calls in Klarna Headless flow

**v2.46.0**

2026-03-05

**🚀 New features**

* Added BIN data to Headless flow
* Added idempotency key support for Drop-In and Headless flows

**🔧 Fixes**

* Fixed EFTPOS co-badge display and preferred network handling
* Fixed submit and action buttons ignoring theme corner radius configuration

**v2.45.0**

2026-02-20

**🚀 New features**

* Added safeguards to prevent duplicate payments in Drop-In and Headless flows

**🔧 Fixes**

* Improved performance and stability of the PayPal flow
* Fixed submit and action buttons not reflecting custom theme styling
* Improved error handling when a payment method cannot be presented in Headless integrations
* Fixed the app becoming unresponsive after dismissing Apple Pay

**v2.44.1**

2026-01-28

**🔧 Fixes**

* Fixed an issue that could cause a precondition to trigger
* Fixed an issue that could cause the app to become unresponsive after dismissing Apple Pay
* General improvements around error handling

**v2.44.0**

2026-01-08

> [!WARNING]
>
> **Note**: From this version onward, `Primer3DS` requires a minimum version of `2.7.0`.

**✨ Improvements**

* Show processing screen prior to presenting 3DS challenge.

**v2.43.2**

2025-12-19

**🔧 Fixes**

* Fixed an issue that could cause a crash when waiting for user input.
* Improved stability during payment cancellation.

**v2.43.1**

2025-12-05

**🔧 Fixes**

* Fixed an issue with surcharge amount validation.

**v2.43.0**

2025-12-02

**✨ Improvements**

* EFTPOS is no longer selectable by cardholders; the SDK now respects the merchant's card network preference to process the payment

**🔧 Fixes**

* Fixes an issue where card network state was not properly cleared when the card number field was emptied
* Resolves card validation issues that could cause infinite loops and network picker display problems

**v2.42.3**

2025-11-18

**🔧 Fixes**

* Removes unnecessary checking if deep link URLs can be opened natively.

**v2.42.2**

2025-11-12

**🔧 Fixes**

* Fixes an issue where received url schemes were causing an exception.

**v2.42.1**

2025-10-30

**🔧 Fixes**

* Fixes an issue where a back button was showing incorrectly in Klarna headless flow
* Improve threading in InternalCardComponentsManager

**v2.42.0**

2025-10-07

**🚀 New features**

* Add EFTPOS network support

**v2.41.1**

2025-09-22

**🔧 Fixes**

* Improved iOS 26 and Xcode 26 compatibility
* Enhanced error reporting clarity
* Fixed card network validation security issue
* Resolved potential crashes in card detection

**v2.41.0**

2025-09-04

**🔧 Fixes**

* Removed `PrimerApiVersion.V2_3` from [PrimerApiVersion](https://primer.io/docs/sdk/ios/v2.x.x/common-objects/PrimerSettings.md#param-api-version). Update to a `PrimerApiVersion.V2_4` if currently using v2.3.
* Resolve asset loading issues in headless checkout components
* Fix main thread crash in 3DS cleanup

**🛠️ Refactor**

* Remove PromiseKit dependency across multiple core services and components for improved performance and Swift concurrency adoption
* Remove `_async` suffix from method signatures
* Remove `main_actor` and `throws` annotations from method signatures
* Remove 'Async' suffix from test class names
* Migrated services to use modern async/await patterns including:
  * VaultService, VaultManager, and TokenizationService
  * 3DS Service, Analytics Service, and API Configuration Module
  * Payment creation and resumption services
  * Image Manager and various payment method components
  * Card validation and form components
  * Internal card components and headless checkout managers

**v2.40.0**

2025-08-27

**🚀 New features**

* Add appearance mode override to respect app-level theme settings.

**✨ Improvements**

* Improvements to Klarna vaulting flow.

> [!WARNING]
>
> If you are using the Klarna dependency in your code, you are encouraged to update `PrimerKlarnaSDK` to `1.2.0`.
> **Please note that this version contains critical fixes for the new Liquid Glass UI when built with Xcode 26/iOS 26.**
>
> Klarna SDK was updated from v2.6.14 to v2.7.2. Please refer to the official Klarna [CHANGELOG](https://github.com/klarna/klarna-mobile-sdk/blob/master/CHANGELOG.md)
> for more information.

**🔧 Fixes**

* Improved payment tokenization and cancellation flow.

**v2.39.2**

2025-08-15

**🔧 Fixes**

* Fixed an issue where invalid expiry years were being accepted
* Async cancellation now works more reliably in the payment tokenization flow

**🛠️ Refactor**

* Cleaned up multiple instances of error handling
* Improved handling of async tasks and error reporting in view models
* Cleaned up unused implementations and internal logging

**v2.39.1**

2025-07-23

**✨ Improvements**

* Improved threading in PrimerUIManager and TokenizationProtocols
* Introduced handled flag in data models for clearer state management
* Migrated tokenization view models (StripeAch, CardForm, and PaymentMethod) to async/await

**🔧 Fixes**

* Convert 2-digit expiry years to 4-digit in headless checkout
* Fixed Klarna payment method manager category

**🛠️ Refactor**

* Cleaned up error handling in UserInterface and Core

**v2.39.0**

2025-07-15

**🚀 New features**

This release introduces **Apple Pay merchant tokens**, a powerful new feature that enables merchants
to process recurring payments, subscriptions, and automatic reloads without being tied to specific customer devices.

**Ready to get started?** Follow our [implementation guides](https://primer.io/docs/connections/payment-methods/apple-pay/overview.md#apple-pay-mpan-configuration)
to request merchant tokens (MPANs) and integrate this feature into your payment flow.

**✨ Improvements**

* Added support for MM/YY expiry date format
* Enhanced Apple Pay error handling with new specific error IDs:
  * `apple-pay-no-cards-in-wallet`: Detects when no payment cards are configured in Apple Wallet
  * `apple-pay-device-not-supported`: Identifies devices that don't support Apple Pay
  * `apple-pay-configuration-error`: Reports merchant configuration issues
  * `apple-pay-presentation-failed`: Captures general presentation failures

**🔧 Fixes**

* Reduce console noise for nil remoteUrl in ImageManager
* Reduce excessive validation logging

**🛠️ Refactor**

* Introduce default values for PrimerError
* Migrated many classes and files to async await
* Clean up UI event posting

**v2.38.3**

2025-07-03

**🔧 Fixes**

* Upgraded Primer3DS which includes a fix for missing CartesBancaires DirectoryServerID mapping.

**v2.38.2**

2025-06-12

**🔧 Fixes**

* Fix memory crash in validateRawData with weak self capture (#1185)

**✨ Improvements**

* Consolidate `PrimerClientSession`

**v2.38.1**

2025-06-04

**✨ Improvements**

* **UIColor**: Added `primer` prefix to gray color variables to improve naming consistency and avoid potential conflicts with other libraries.
  > [accordion] Migration Guide
  >
  > * `UIColor.gray100` -> `UIColor.primerGray100`
  > * `UIColor.gray200` -> `UIColor.primerGray200`
  > * `UIColor.gray300` -> `UIColor.primerGray300`
  > * `UIColor.gray400` -> `UIColor.primerGray400`
  > * `UIColor.gray500` -> `UIColor.primerGray500`
  > * `UIColor.gray600` -> `UIColor.primerGray600`
  > * `UIColor.gray700` -> `UIColor.primerGray700`

**v2.38.0**

2025-06-02

**✨ Improvements**

* Klarna auto continues when single payment option
* Implement the Co-badged Cards feature on Drop-in

**✨ Improvements**

* Reduce `init(coder:)` boilerplate
* Remove unused code from Networking
* Finalise classes where appropriate

**v2.37.0**

2025-05-12

**✨ Improvements**

* We have added `CardFormUIOptions.payButtonAddNewCard` to support the "Add New Card" option in the card form flow.
* Introduced support for the 'Continue payment flow' workflow action to configure checkout outcome. See our [documentation](https://primer.io/docs/workflows/apps/native-apps/primer-payments-app/continue-payment-flow-action.md#control-the-checkout-result-with-checkout-outcome) for more info.

**🔧 Fixes**

* We have fixed a crash issue that occurred during NolPay initialization.

**✨ Improvements**

* We have made several cleanups and improvements across the SDK.

**v2.36.0**

2025-03-25

**✨ Improvements**

* The SDK will now default to using Api version 2.4 when initialised. It is possible to use API version 2.3 via `PrimerSettings.apiVersion`. For more information see our [SDK reference](https://primer.io/docs/sdk/ios/v2.x.x/common-objects/PrimerSettings.md), [Api Reference](https://primer.io/docs/api-reference/get-started/overview)  and [Migration Guides](https://primer.io/docs/changelogs/migration-guides/API-2.3-to-2.4.md).

**🔧 Fixes**

* We have fixed an issue which resulted in incorrect formatting of the currency strings in our UI for french locales.

**v2.35.3**

2025-03-19

**✨ Improvements**

* Improved error handling when server returns 202 response code

**v2.35.2**

2025-02-26

**🔧 Fixes**

* We have fixed a bug in the Drop-In Checkout which resulted in "Additional fees may apply" text being shown for the Card payment method, when no surcharge was present.

**✨ Improvements**

* We have made changes to our internal Analytics logging system which will result in fewer unnecessary logs being sent.

**v2.35.1**

2025-02-11

**✨ Improvements**

* We've increased the timeout for payment creation and handling for better stability.

**🔧 Fixes**

* We have fixed a bug in our Drop-In Card Form, which resulted in a poor user experience while using RTL formatted languages.

**v2.35.0**

2025-02-04

**✨ Improvements**

* With this version it is possible to opt-in to use Api v2.4, which is no longer in Beta. For more information see our [SDK reference](https://primer.io/docs/sdk/ios/v2.x.x/common-objects/PrimerSettings.md#parameters), [Api Reference](https://primer.io/docs/api-reference/get-started/overview)  and [Migration Guides](https://primer.io/docs/changelogs/migration-guides/API-2.3-to-2.4.md). The SDK will continue to use API v2.3 by default.
* **Expanded Language Support**: The iOS SDK now supports additional languages, including:
  * Arabic
  * Bulgarian
  * Czech
  * Spanish (Argentina & Mexico)
  * Estonian
  * Croatian
  * Hungarian
  * Japanese
  * Latvian
  * Portuguese (Brazil)
  * Romanian
  * Vietnamese
* **3DS Sandbox Testing**: Enhanced support for testing 3D Secure (3DS) flows in the sandbox environment. This requires upgrading your `primer-sdk-3ds-ios` dependency to version `2.4.2`.

**v2.34.0**

2025-01-24

****🧪 Experimental****

* With this version it is possible to opt-in to test Api v2.4(Beta). For more information see our [Api Reference](https://primer.io/docs/api-reference/get-started/overview)  and [Migration Guides](https://primer.io/docs/changelogs/migration-guides/API-2.3-to-2.4.md)

**✨ Improvements**

* API Timeout values have been updated to improve behaviour in the loading phases of the checkout.

**v2.33.1**

2024-12-23

**🔧 Fixes**

* We have fixed an issue where `PaymentInstrumentData.accountNumberLast4Digits` was incorrectly named `PaymentInstrumentData.accountNumberLastFourDigits` when exposed via the `PrimerHeadlessUniversalCheckout` interface. Visit our [SDK Reference](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods.md#returns.completion.vaultedPaymentMethods-primerheadlessuniversalcheckout.vaultedpaymentmethod.paymentInstrumentData-parameters.accountNumberLast4Digits) for more information.

**v2.33.0**

2024-12-17

**✨ Improvements**

* It is now possible to vault ACH via Stripe payments, and pay with vaulted ACH via Stripe tokens. See our [docs](https://primer.io/docs/connections/payment-methods/ach/stripe-dropin#vaulting) for more info.
* It is now possible to granularly control Apple Pay Billing and Shipping options. See our [docs](https://primer.io/docs/sdk/ios/v2.x.x/common-objects/PrimerSettings.md#properties.paymentMethodOptions-properties.applePayOptions) for more.

**🔧 Fixes**

* We have fixed an issue where the wrong error (`generic-underlying-errors`) was passed when a user cancelled a PayPal payment. Now, the correct error (`payment-cancelled`) is reported.
* We have updated the default background colour of the default theme for dark mode.
* The close button is now disabled for Klarna during payment processing.
* The success asset is now more prominent in dark mode.

**v2.32.1**

2024-11-21

**🔧 Fixes**

* Updated the 3DS SDK to version `2.4.1` which fixes a crashing issue.
* Remove precondition on `presentPaymentMethod` which could cause a crash in certain scenarios.

**v2.32.0**

2024-11-13

**✨ Improvements**

* We have added additional dismissal controls to PrimerUIOptions. It is now possible to dismiss the Primer UI via gestures, an explicit close button, or both. See our [SDK reference](https://primer.io/docs/sdk/ios/v2.x.x/common-objects/PrimerSettings.md#properties.uiOptions) for more information.

**🔧 Fixes**

* Fixes for range or index out of bounds crash in the Card Form UI.
* Fixes for a crash in InternalCardComponentsManager.

**v2.31.3**

2024-10-24

**✨ Improvements**

* Expose VaultedPaymentMethod initialiser

**🔧 Fixes**

* Prevent dismissal of Drop-in card form while a payment is active
* Discover card network image not showing
* Move the cursor to the end of the text after pasting the card number
* Errors in the card form are now correctly localized

**v2.31.2**

2024-10-21

**🔧 Fixes**

* Adyen Blik dismissal issue and small UI glitch

**v2.31.1**

2024-10-04

**🔧 Fixes**

* Fixed an issue where Adyen Vipps would not fall back to the Web flow in the event that the Vipps mobile app was not installed.
* Fixed an issue where Adyen Blik was not present in PrimerHeadlessUniversalCheckout availablePaymentMethods.
* Various stability improvements.

**v2.31.0**

2024-08-30

**✨ Improvements**

**Stripe ACH is now available** ✨

* We have added support for ACH via Stripe. ACH lets you accept payments from customers with a US bank account.
* ACH Direct Debit is a reusable, delayed notification payment method. It can take up to 4 business days to receive acknowledgement of success or failure.
* This release includes: One-off payments, cancel, and refund actions. We aim to add support for recurring payments in the future.
* You can easily integrate ACH via Stripe into your payment stack with just a few clicks through Primer. Visit the integrations section of the dashboard to learn more or [consult the direct integration guide](https://primer.io/docs/connections/payment-methods/ach/stripe.md).

**v2.30.1**

2024-08-28

**🔧 Fixes**

* Fixed an issue where the PayPal flow was unusable in the Drop-In Universal Checkout
* Fixed an issue where `PrimerCheckoutData` was nil when reporting an error in payment creation.

**v2.30.0**

2024-08-20

**✨ Improvements**

* Improved initialization: We have strengthened the iOS SDK's initialization process, ensuring it remains reliable even if users experience connectivity drops. These changes guarantee a smoother experience
* We have made improvements to our internal analytics to facilitate troubleshooting

**🔧 Fixes**

* Setting the `uiDelegate` via `PrimerHeadlessUniversalCheckout.current.start` now works as expected.

**v2.29.0**

2024-08-09

**✨ Improvements**

**Client Session caching**
It is now possible to cache the ClientSession configuration client-side, which can speed up certain flows in the SDK. This can be enabled via the [clientSessionCachingEnabled](https://primer.io/docs/sdk/android/v2.x.x/common-objects/PrimerSettings.md#properties.clientSessionCachingEnabled) flag. Before enabling the flag to true it's recommended to reach out to Primer support for additional verification since there are edge cases where it is not advised.

**v2.28.0**

2024-08-07

**✨ Improvements**

**Define merchant name on Apple Pay flow.**

We now allow merchants to set a user-defined merchant name on the Apple Pay flow.

**Details of the changes:**

* Create a client session with the desired merchant name as shown [here](https://primer.io/docs/api-reference/v2.4/api-reference/client-session-api/create-a-client-session.md#response-payment-method-options-payment-method-type-merchant-name)
* The iOS SDK will then show this name on the Apple Pay flow rather than the merchant name on your Primer account.
* Setting this value via [PrimerSettings](https://primer.io/docs/sdk/ios/v2.x.x/common-objects/PrimerSettings.md#properties.paymentMethodOptions-properties.applePayOptions-properties.merchantName) is now deprecated.

**🔧 Fixes**

* Fixed a crash that could occur when using PrimerSDK from multiple threads.
* Fixed a crash that could occur during Primer3DS initialization.

**v2.27.0**

2024-07-10

**✨ Improvements**

* We have removed Card Components and related UI from the SDK. Card components was previously deprecated.

**🔧 Fixes**

* Fixed an issue where payment resume network responses weren't being handled correctly.
* Fixed a crash in CVV recapture caused by setting explanation text.

**v2.26.7**

2024-06-26

**🔧 Fixes**

* We have aligned the card expiry date validation logic between the Drop-In and Headless integrations, which were previously different.
* Fixed a bug in the Klarna Headless implementation where the correct events were not fired during a manual payment flow.

**v2.26.6**

2024-06-20

**🔧 Fixes**

* Fixed a bug in the Klarna Headless implementation where the correct events were not fired during a manual payment flow.

**v2.26.5**

2024-06-12

**✨ Improvements**

* We have aligned error handling across mobile platforms and enhanced our analytics capabilities. Additionally, we have thoroughly documented all errors. For more details, please refer to the official documentation [here](https://primer.io/docs/sdk/ios/v2.x.x/common-objects/PrimerError.md).
* We have improved validation of the custom URL scheme setting used for payment methods with native UI.

**v2.26.4**

2024-05-07

**🔧 Fixes**

* We have improved the PayPal payment method token by providing additional data, including the payer's first name, last name, and external payer ID. For more information, see our [SDK reference docs](https://primer.io/docs/sdk/ios/v2.x.x/common-objects/PrimerPaymentMethodTokenData.md)

**v2.26.3**

2024-04-29

**✨ Improvements**

**🔧 Fixes**

* The release involves a fix to the Primer API client on iOS to allow payments made with NolPay to settle correctly.

**v2.26.2**

2024-04-15

**✨ Improvements**

**✨ Improvements**

* We've simplified the way that we make network requests and improved how we log traces and analytics events when requests are made.

**🔧 Fixes**

* Fix Nol pay Xcode errors
  * Addressed an intermittent build failure issue related to `PrimerHeadlessUniversalCheckout` not recognizing `PrimerHeadlessNolPayManager` due to specific Xcode build settings and packaging nuances within CircleCI/Fastlane environments.
  * The update ensures compatibility with Xcode 15.2 and proper handling of nested classes and conditional imports, stabilizing the integration of PrimerNolPaySdk and PrimerSDK.

**v2.26.1**

2024-04-11

**🔧 Fixes**

* Fix Nol pay Xcode errors
  * Build failure issue related to **`PrimerHeadlessUniversalCheckout`** not recognizing **`PrimerHeadlessNolPayManager`** due to specific Xcode build settings and packaging nuances within CircleCI/Fastlane environments.

**v2.26.0**

2024-04-09

**🚀 New feature**

Recapture CVV feature on Drop-in checkout

* Merchants can now prompt customers to re-enter their CVV for additional verification during checkout, improving security without storing CVV data.

**✨ Improvements**

* Update 3DS to the latest version

**v2.25.0**

2024-03-28

**🚀 New feature**

Klarna EMD support on Drop-in checkout\*\*

We have extended our support for Klarna extra merchant data (EMD) to the Drop-in checkout.

**Klarna payment categories have been expanded to allow support for all the available categories on Drop-In, including:**

* Pay now
* Pay later: Pay in 30 days
* Pay over time: Pay in 3-4 instalments. First payment right away, then the rest in instalments (no interest)
* Fair financing: Instalment plans of 6, 12, 24, and 36 months with flexible payments (with interest)

**Support for Klarna EMD on Drop-in Mobile Checkout**

Klarna may request extra merchant data (EMD) based on the merchant segment or consumer services. This additional information helps Klarna enhance risk assessment and improve conversion rates.

You can now dynamically pass any relevant [EMD package](https://docs.klarna.com/klarna-payments/in-depth-knowledge/extra-merchant-data/#how-to-send-emd) via the Client Session as described [here](https://primer.io/docs/connections/payment-methods/klarna/direct-integration.md).  Available schemas are documented [here](https://docs.klarna.com/api-reference/attachment-schema/).

**✨ Improvements**

**Other Klarna Improvements**

* The Klarna Drop-In integration now uses the same code as the headless integration under the hood, resulting in a more robust experience.
* Klarna Drop-In now has a fresh new design.

**Upgraded 3DS SDK**

This version of the SDK is compatible with **`v2.3.0`** or greater of the **`Primer 3DS SDK`.**

**v2.24.0**

2024-03-18

**✨ Improvements**

* Bumped minimum iOS version to **13.0**
  * This means that our SDK now works with apps that target iOS 13.0 and above
* The loading spinner appears more promptly in drop-in checkout after the user submits the payment
* Local card network identification is now significantly faster and more performant

**v2.23.0**

2024-03-07

**✨ Improvements**

* We have included support for Klarna Extra Merchant Data
* In this release we have added the `PrimerHeadlessUniversalCheckoutKlarnaManager` that provides access to the [`KlarnaComponent`](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/klarna-headless-manager/provideKlarnaComponent#return).
  Using the `KlarnaComponent` you can seamlessly integrate Klarna, with a custom payment category selection UI.
  Consult the [guide](https://primer.io/docs/connections/payment-methods/klarna/headless?platform=ios) to get a sense of how to seamlessly integrate Klarna.
* We've made several internal improvements to our analytics service that improve its performance. This also fixes a memory leak that caused a crash in very specific circumstances for older versions of the SDK.
* In drop-in checkout, the card icon now updates correctly whenever the entered card number is changed.

**v2.22.0**

2023-02-15

**✨ Improvements**

* We have released support for co-badged cards. You can allow users to select a network if their card is co-badged.
* We have also improved card network validation significantly for all card networks.

**v2.21.0**

2024-02-06

**✨ Improvements since 2.20.1**

* Fix NOL pay bug - fetching of the cards
* Implement new currency handling logic
* Update 3DS to the latest version

**v2.20.1**

2024-01-26

**✨ Improvements since 2.20.0**

* Fixes an issue where PrimerSDK had a dependency on KlarnaMobileSDK v2.2.2

**v2.20.0**

2024-01-19

**💳 APMs support**

**iDEAL via Adyen**

Adds the `PrimerHeadlessUniversalCheckoutComponentWithRedirectManager` that provides access to `BanksComponent`. Using the `BanksComponent` you can easily:

* load list of all supported banks
* submit user's selection

**✨ Improvements since 2.19.0**

* Throw error when using NativeUIManager for non-native payment method (#772)
* Improved Errors in the event Apple Pay cannot be presented.

**v2.19.0**

2023-12-15

**🚀 New Features since 2.18.3**

* In this release, our 3DS support has undergone significant enhancements, offering a multitude of improvements that improve the conversion rate of 3DS challenges.
  Please note, with this update, compatibility requires the use of the 2.1.0 version of the 3DS SDK (`pod 'Primer3DS', '2.1.0'`)
* We have also improved internal analytics by adding additional information to errors that the SDK can encounter. This will enable us to troubleshoot issues much quicker.

**v2.18.3**

2023-12-06

**✨ Improvements since 2.18.2**

* Fixed analytics issue causing high memory usage and occasional freeze

**v2.18.2**

2023-11-13

**✨ Improvements since 2.18.1**

* Fix phone validation
  * Add local empty phone validation before sending the string to server

**v2.18.1**

2023-11-13

**✨ Improvements since 2.18.0**

* Fix State Machine for nol Pay
  * Developers can now move through steps as expected

**v2.18.0**

2023-11-3

**🚀 New Features since 2.18.0-b1**

* Logging interface for SDK
* Implement async Phone Validation for Nol

**✨ Improvements since 2.18.0-b1**

* Fixes ApplePay button rendering logic

**v2.18.0-b1**

2023-10-19

**🚀 New Features since 2.17.6**

**nol Pay**

Adds the `PrimerHeadlessNolPayManager` that provides following features:

* **Listing Nol cars**: Listing previously linked Nol payment cards using [NolPayLinkedCardsComponent](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkedCardsComponent.mdx).
* **Linking**: Link the Nol card to a phone number using [NolPayLinkCardComponent](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayLinkCardComponent.md).
* **Unlinking**: Unlink previously linked Nol card using [NolPayUnlinkCardComponent](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayUnlinkCardComponent.md).
* **Transactions**: Execute payments using selected Nol payment cards [NolPayPaymentComponent](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/nol-pay-manager/provideNolPayPaymentComponent.md).

**v2.17.6**

2023-10-06

\*\* ✨ Improvements since 2.17.5\*\*

* • Add UIKit import to Mock3DSService.swift - fixes Swift Package Manager compilation issue.

**v2.17.5**

2023-09-25

\*\* ✨ Improvements since 2.17.4\*\*

* Removed noisy analytics events during SDK init

**v2.17.4**

2023-09-19

\*\* ✨ Improvements since 2.17.3\*\*

* Upgrades for Xcode 15

**v2.17.3**

2023-09-08

✨ Improvements since 2.17.2

* We've removed the UIKit import guards from all files

> [!NOTE]
>
> ℹ️ If you encounter any errors or warnings related to UIKit as a dependency, please submit a bug report [**here**](https://github.com/primer-io/primer-sdk-ios/issues).

**v2.17.2**

2023-09-06

✨ Improvements since 2.17.1

* Fix issue where Cardholder Name field would not accept spaces in Headless Integration.

**v2.17.1**

2023-08-09

✨ Improvements since 2.17.0

* Fix Apple Pay crash

**v2.17.0**

2023-07-28

> [!NOTE]
>
> ⚠️ If you are using `Primer3DS` in your integration, make sure to bump it to v.1.2.0

For detailed documentation and migration guides, please refer to the links provided in the changelog.

**🚀 New Features since 2.16.7**

* **Headless Vault Manager**

  Add **`PrimerHeadlessUniversalCheckout.VaultManager()`** which returns an instance of **`PrimerHeadlessUniversalCheckout.VaultManager`**. It provides the following features:

  * [**Fetch a list**](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods.md) of vaulted payment methods.
  * [**Delete**](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod.md) a vaulted payment method.
  * [**Validate**](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/validate.md) the additional data used to perform a payment (e.g., validate CVV).
  * [**Perform a payment**](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow.md) using a vaulted payment method.
* **Our 3DS service has been completely revamped.**

  Primer SDK now supports 3DS protocol version **`2.2.0`**. It includes the following enhancements:

  * Support 3DS weak validation.
  * Support 3DS OOB flow.
  * Improve 3DS reporting.
  * Set the 3DS sanity check in **`PrimerSettings`** to **`false`** when you are in **`DEBUG`** mode, to disable the device check when testing on the simulator.
* **`PrimerPaymentMethodAsset` now exposes the payment method's friendly name**
* Reintroduce showing a payment method directly with the Drop-In UI integration.
* S**upport for** **iPay88**

  This version is adding **support for** **iPay88** payments in Malaysia.
  Our [documentation](https://primer.io/docs/checkout/headless.md) has been updated to reflect these changes. You can also find a [Migration Guide](https://primer.io/docs/changelogs/migration-guides/) detailing the changes.

✨ Improvements since 2.16.7

* Fix vaulted payment method on Drop In not getting tapped
* Enhance 3DS auth rates
* Fix checkout not rendering when there are vaulted payment methods
* Make performance improvements on raw data manager validation delegate
* Fix the scenario where the payment method's image file is missing
* Print console warning when a **`decisionHandler`** is not implemented
* Observability improvements
* Improves cancellation happening from 3rd party payment apps through deep links
* Fix Atome cancellation from within the web view
* Fix UI unresponsiveness happening on iOS 16.0.x in certain cases

**v2.17.0-rc.17**

2023-07-17

**✨ Improvements since 2.17.0-rc.16**

* Fix vaulted payment method on Drop In not getting tapped

**v2.17.0-rc.16**

2023-07-12

> [!NOTE]
>
> ⚠️ If you are using `Primer3DS` in your integration, make sure to bump it to v.1.2.0

**✨ Improvements since 2.17.0-rc.15**

* Enhance 3DS auth rates

**v2.17.0-rc.15**

2023-07-10

**✨ Improvements**

**Headless Vault Manager**

Add `PrimerHeadlessUniversalCheckout.VaultManager()` which returns an instance of `PrimerHeadlessUniversalCheckout.VaultManager`. It provides the following features:

* [fetch a list](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods.md) of vaulted payment methods
* [delete](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/deleteVaultedPaymentMethod.md) a vaulted payment method
* [validate](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/validate.md) the additional data used to perform a payment (e.g. validate CVV)
* [perform a payment](https://primer.io/docs/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/startPaymentFlow.md) using a vaulted payment method

**✨ Improvements since 2.17.0-rc.14**

* Fix issue with Vipps getting presented

**v2.17.0-rc.14**

2023-06-07

**✨ Improvements**

* Reintroduce showing a payment method directly with the Drop In UI integration

⚠️

**✨ Improvements since 2.17.0-rc.13**

* Fix checkout not rendering when there are vaulted payment methods
* Make performance improvements on raw data manager validation delegate

**v2.17.0-rc.13**

2023-05-31

> [!NOTE]
>
> ⚠️ This version has a know bug and won't render the Universal Checkout if there're vaulted payment methods for the user defined in the client session

> [!NOTE]
>
> ⚠️ If you are also integrating `Primer3DS`, make sure to install v.1.1.2 to avoid archiving issues with Xcode 14.3.1

**✨ Improvements since 2.17.0-rc.12**

* Apply fix on PayPal vaulting
* Fix Klarna archiving issue

**v2.17.0-rc.12**

2023-05-30

**✨ Improvements**

> [!NOTE]
>
> ⚠️ This version has a know bug and won't render the Universal Checkout if there're vaulted payment methods for the user defined in the client session

> [!NOTE]
>
> ⚠️ If you are also integrating `Primer3DS`, make sure to install v.1.1.2 to avoid archiving issues with Xcode 14.3.1

* Our 3DS service has been completely revamped. Primer SDK now supports 3DS protocol version `2.2.0`
* Support 3DS weak validation
* Support 3DS OOB flow
* Improve 3DS reporting
* Set 3DS sanity check in `PrimerSettings` to `false` when you are in `DEBUG` mode, to disable the device check when testing on the simulator.

Check out our detailed documentation [here](https://primer.io/docs/checkout/headless.md#ios)

**✨ Improvements since 2.17.0-rc.11**

* Minor fixes

**v2.17.0-rc.11**

2023-05-10

**🔧 Fixes**

* Take into account tax and discount on Apple Pay items
* Prioritize merchant amount over total amount
* Only take into account surcharge when merchant amount is not set

**v2.16.7**

2023-05-10

**🔧 Fixes**

* Take into account tax and discount on Apple Pay items
* Prioritize merchant amount over total amount
* Only take into account surcharge when merchant amount is not set

**v2.17.0-rc.10**

2023-04-24

**🔧 Fixes**

* Expose payment instrument data on tokenization callback
* Fix issue that prevented the client session from being updated when restarting headless checkout
* Make iPay88 `userContact` optional

**v2.16.6**

2023-04-24

**🔧 Fixes**

* Expose payment instrument data on tokenization callback

**v2.17.0-rc.9**

2023-04-17

**🔧 Fixes**

* Fixed SDK crashing when Primer3DS is not included
* Fixed build issue due to iPay88 when archiving

**v2.17.0-rc.8**

2023-04-10

> [!NOTE]
>
> ⚠️ SDK is crashing on this version when Primer3DS pod is not included. Please update to `2.17.0-rc.9` version.

**✨ Improvements since 2.17.0-rc.7**

* Modify iPay88 validation rules

**v2.17.0-rc.7**

2023-04-06

> [!NOTE]
>
> ⚠️ SDK is crashing on this version when Primer3DS pod is not included. Please update to `2.17.0-rc.9` version.

**✨ Improvements since 2.17.0-rc.6**

* Improved analytics

**v2.17.0-rc.6**

2023-04-03

> [!NOTE]
>
> ⚠️ SDK is crashing on this version when Primer3DS pod is not included. Please update to `2.17.0-rc.9` version.

**✨ Improvements since 2.17.0-rc.5**

* Improved analytics

**v2.17.0-rc.5**

2023-03-28

> [!NOTE]
>
> ⚠️ SDK is crashing on this version when Primer3DS pod is not included. Please update to `2.17.0-rc.9` version.

**✨ Improvements**

* `PrimerPaymentMethodAsset` now exposes the payment method's friendly name

**✨ Improvements since 2.17.0-rc.4**

* Improved analytics
* Fix scenario where payment method's image file is missing
* Print console warning when a `decisionHandler` is not implemented

**v2.17.0-rc.4**

2023-03-20

**✨ Improvements since 2.17.0-rc.3**

* Fix for React Native

**v2.17.0-rc.3**

2023-03-15

**✨ Improvements**

This version is adding support for iPay88 payments in Malaysia.

Our [documentation](https://primer.io/docs/checkout/headless.md#ios) has been updated to reflect these changes. You can also find a [Migration Guide](https://primer.io/docs/changelogs/migration-guides) detailing the changes.

**✨ Improvements since 2.17.0-rc.2**

* Contains the features and improvements of 2.16.5
* Observability improvements
* Improves cancellation happening from 3rd party payment apps through deep links
* Fix Atome cancellation from within the webview
* Fix UI unresponsiveness happening on iOS 16.0.x on certain cases
* Fix iOS console warnings

**v2.16.5**

2023-03-06

**🔧 Fixes**

* Fix an issue that prevented 3DS from working with some card networks (AMEX, Maestro, Discover, and JCB)
* Fix an issue that prevented 3DS from working when the billing address is set or updated after the SDK is initialized with a client session
* Improve 3DS visibility

**v2.17.0-rc.2**

2023-01-23

**✨ Improvements**

It's been more than 6 months that Headless Checkout has been released in Beta!

We gathered insightful feedback that pushed us to work on critical improvements to the developer experience of Headless Checkout.

This release candidate introduces a more robust, scalable, and stable flow for integrating Headless Checkout to implement a fully custom interface for your checkout.

Our [documentation](https://primer.io/docs/changelogs/migration-guides/) detailing the changes.

**✨ Improvements since 2.17.0-rc.1**

* Contains the features and improvements of 2.16.3 and 2.16.4
* Remove Google Pay from the list of payment methods

**v2.16.4**

2023-02-09

**✨ Improvements**

* Fix translations

**🔧 Fixes**

* Fix build issue on Xcode 13

**v2.16.3**

2023-02-03

**✨ Improvements**

* Add translations
* Add analytics events and errors

**🔧 Fixes**

* Fix theming issue

**v2.17.0-rc.1**

2023-01-23

> [!NOTE]
>
> ⚠️ This version introduces breaking changes for Headless Checkout

**✨ Improvements**

It's been more than 6 months that Headless Checkout has been released in Beta!

We gathered insightful feedback that pushed us to work on critical improvements to the developer experience of Headless Checkout.

This release candidate introduces a more robust, scalable, and stable flow for integrating Headless Checkout to implement a fully custom interface for your checkout.

Our [documentation](https://primer.io/docs/changelogs/migration-guides/) detailing the changes.

This release candidate will soon be merged into the main releases.

**✨ Improvements since 2.16.2**

* Contains the features and improvements of 2.16.1 and 2.16.2
* Remove Google Pay from the list of payment methods

**v2.16.2**

2023-01-20

**🔧 Fixes**

* Fix Xendit OVO redirect

**v2.16.1**

2022-12-29

**🔧 Fixes**

* Fix Klarna payment category

**v2.16.0**

2022-12-21

**✨ Improvements**

In this version we are adding support for iPay88 card payments.

We have also added events to monitor the Headless flow.

**🔧 Fixes**

* Remove Xcode configuration flags from podspec.
* Apple Pay will return an error on simulator

**v2.15.1**

2022-11-29

**🔧 Fixes**

* Fixing the MBWay local asset loading
* Removed the `GENERATE_INFOPLIST_FILE` as part of the `xcconfig` of the `PrimerSDK` podspec as it was causing an issue upon archiving the hosting apps
* Added `CODE_SIGNING_ALLOWED => NO` to `xcconfig` in `podspec` to remove the Signing requirement introduced in Xcode 14+

**v2.15.0**

2022-11-17

**🔧 Fixes**

* Fixed the Contributing link in our SDK Readme
* Added the `GENERATE_INFOPLIST_FILE` as part of the `xcconfig` of the `PrimerSDK` podspec
* Improved the Cardholder Name field availability in Card form

**v2.14.3**

2022-11-11

**🔧 Fixes**

* Fixed an issue with regards to the availability of retrieving some assets
* Small improvements in the way the Country selector in billing address gets loaded

**v2.14.2**

2022-11-08

**🔧 Fixes**

* Fixed 3DS on frictionless flows
* Sending analytics events with correct `sdkVersion`

**v2.14.1**

2022-11-04

**🔧 Fixes**

* Fixed the PayPal vaulting service

**v2.14.0**

2022-10-27

In this version we are obsoleting the 3DS vaulting via the **`PrimerSettings.PrimerCardPaymentOptions`** .

Above flow is now obsoleted and 3DS will always follow workflows.

**🔧 Fixes**

* We have fixed wrong cardholder name checkout modules evaluations which resulted in not requesting cardholder name on headless
* We have fixed raw data validation callbacks not being fired on headless

**v2.13.1**

2022-10-24

**🔧 Fixes**

Fixing the Blik flow.

> [!NOTE]
>
> ℹ️ This fix solves the issue affecting versions from `2.7.0` to `2.13.0`. We recommend updating to this `2.13.1` version.

**v2.13.0**

2022-10-21

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

**💳 APMs support**

**Retail Outlets via Xendit**

In this version of the SDK we added the support for Retail Outlets via Xendit.

Retail Outlets via Xendit Payment Method now is fully supported via Headless Universal Checkout (Beta) via the Raw Data Manager.

Check this out in [our documentation](https://www.notion.so/52426f47b9b04f808a6b88ee51301196?pvs=21) 🙌

**v2.12.2**

2022-10-19

**🔧 Fixes**

Fixed on Headless Universal Checkout with `ADYEN_BANCONTACT_CARD` flow failing on some scenarios.

**v2.12.1**

2022-10-10

**🔧 Fixes**

Fix Klarna vault flow failing on some scenarios.

**v2.12.0**

2022-10-06

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

**💳 APMs support**

**Bancontact via Adyen**

In this version of the SDK we added the support for Bancontact Debit via Adyen.

Bancontact Debit via Adyen Payment Method now is fully supported via Headless Universal Checkout (Beta) and the standard SDK implementation.

In this release, developers have the ability of initializing the raw data for a Bancontact Card 💳  and  perform the Tokenization flow via their own fully customized UI yet utilizing all of the features that make Primer great.

This update also bring an improvement of `CardFormUIManager` , now accepting other Card inputs to perform payments.

In order to do so, you can now initialize the `CardFormUIManager` with \*\*`public** **init**(paymentMethodType: String)` as opposed to its classic initializer which has been utilizing the standard `PAYMENT_CARD` payment method type.

**Apple Pay billing address**

Last but not least, we are now capturing the billing address out of an Apple Pay payment.

To enable this feature, when configuring the Checkout with the `PrimerSettings` , developers can setup `PrimerApplePayOptions` with another parameter: `isCaptureBillingAddressEnabled` . The SDK will take care of showing the option of adding the billing address and capture it.

**v2.11.1**

2022-10-03

**🔧 Fixes**

Fix crash with Primer's raw data manager on HUC and processor 3DS

**v2.11.0**

2022-09-30

**✨ Improvements**

> [!NOTE]
>
> 👌
>
> Alongside the listed features below, we have performed improvements to our codebase.

In this version of the SDK we improved the raw data validation in the Headless Universal Checkout flow.

**v2.9.0**

2022-09-16

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

In this version of the SDK we added the support for Multibanco via Universal Checkout.

Multibanco Payment Method now is fully supported via Headless Universal Checkout (Beta) and the standard SDK implementation.

PromptPay is also now supported via Omise too 🙌.

In Headless Universal Checkout (Beta), developers will access to a new event which will provide an object `PrimerCheckoutQRCodeInfo` containing the data needed to build their awesome UI / UX on top.

For PromptPay specifically, the object will be `PromptPayCheckoutAdditionalInfo`

**\`func** primerHeadlessUniversalCheckoutDidReceiveAdditionalInfo(\_ additionalInfo: PrimerCheckoutAdditionalInfo?)\*\*

**v2.8.0**

2022-09-08

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

The `PrimerKlarnaSDK` is now also supported on Swift Package Manager. No changes are required if you're integrating the `PrimerSDK` with the SPM, since it's going to add the Klarna SDK by default.

Also there's a fix on the infinite loading with Xendit.

Try it out and let us know what do you think 🙌!

**v2.7.0**

2022-09-01

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

This release changes the way that Klarna is integrated, and switches on Klarna's native iOS SDK (with CocoaPods, SPM will soon follow). It also add **MultiBanco** and **MBWay** support on Headless Universal Checkout raw data manager.

Also there's a fix on local images not being returned by the HUC.

Try it out and let us know what do you think 🙌!

**v1.37.0**

2022-09-01

**✨ Improvements**

This release changes the way that Klarna is integrated, and switches on Klarna's native iOS SDK (with CocoaPods, SPM will soon follow).

Try it out and let us know what do you think 🙌!

**v2.6.0**

2022-08-24

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

Last release was all about bringing the possibility to Headless Checkout of utilizing the raw data a card 💳  contains so that developers could utilize their own fully customized UI and still use all of the features that make Primer great.

We kept expanding the Headless Checkout feature, now providing to our developers the raw phone number data they can utilize to create payments.

The payment method supporting that is only **OVO via Xendit** for now.

Try it out and let us know what do you think 🙌!

***

We didn't stop here though, alongside the phone number capture, we have enriched our suite of available payment methods adding MB Way, working with Portuguese phone numbers 🇵🇹  and needing the MB Way App to complete the payment.

Here is a preview 👇

![Simulator Screen Recording - iPhone 11 - 2022-08-23 at 18.48.28.gif](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6089039b-e4ef-424b-aa53-0ed7663ba0ac/Simulator_Screen_Recording_-_iPhone_11_-_2022-08-23_at_18.48.28.gif)

**v2.5.0**

2022-08-16

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

This release enhance the capabilities of our SDK in its Headless Checkout feature, bringing the possibility of utilizing your fully customized UI and still use all of the features that make Primer great. We now give to our developers all the raw data a card contains.

Try it out and let us know what do you think 🙌!

**v2.4.0**

2022-08-10

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

This release brings a totally new way of retrieving the APMs.

We have now the possibility of providing some APMs without even push a new release 🙌.

That's a huge milestone for us and the developments of our product.

***

As everything game-changing, it comes with a cost. To be able to support this release, we have made some changes that requires some work in case you are already utilizing the SDK.

**🚨 **Migration info**🚨**

Payment methods' types in version prior to this one (`<2.4.0`) were represented by a `enum PrimerPaymentMethodType` , hence accessible via: `.paymentMethod` .

In this version, we are no longer exposing the `enum` , and return a plain `String` instead.

**v2.3.0**

2022-07-29

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

**💳 APMs support**

Fast and PromptPay via Rapyd

![Screen Shot 2022-07-28 at 17.45.42.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7873ba30-8b73-4217-aef5-57a1eb57b369/Screen_Shot_2022-07-28_at_17.45.42.png)

![Screen Shot 2022-07-28 at 17.52.14.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/985e5e7f-4ccc-4f6c-a9a2-ed07acc58047/Screen_Shot_2022-07-28_at_17.52.14.png)

![](https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/ios/Screen_Shot_2022-07-28_at_17.45.42.webp?fit=max\&auto=format\&n=2gUFYKfNb_svpxsN\&q=85\&s=e8bb1c519851e8d322fd89ebed7720b3)

![](https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/ios/Screen_Shot_2022-07-28_at_17.52.14.webp?fit=max\&auto=format\&n=2gUFYKfNb_svpxsN\&q=85\&s=7aae5367db46aff000a04a3c755ceae4)

**v2.2.1**

2022-07-18

* Internal codebase refactors
* Fix Danger check

**v2.2.0**

2022-07-13

**✨ Improvements**

> [!NOTE]
>
> 👌 Alongside the listed features below, we have performed improvements to our codebase.

**💳 APMs support**

Grab Pay, Poli and GCash via Rapyd

![](https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/ios/poli-simulator.webp?fit=max\&auto=format\&n=2gUFYKfNb_svpxsN\&q=85\&s=ab5f65f97c7e7698ee3b56a439287fe3)

![](https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/ios/grabpay-gcash-simulator.webp?fit=max\&auto=format\&n=2gUFYKfNb_svpxsN\&q=85\&s=b34748ff595f0640b2e98a94ff68c8d2)

**Billing address support 🧾**

We can now capture the billing address before performing a payment.

![](https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/ios/simulator_screenshot_724BBFE3-68B7-402F-BE79-289A9C4D1C1D.webp?fit=max\&auto=format\&n=2gUFYKfNb_svpxsN\&q=85\&s=28fa9497a203b1fd4c6fc34d5706001b)

![](https://mintcdn.com/primer-cc826789/2gUFYKfNb_svpxsN/images/changelogs/ios/simulator_screenshot_312BB2C8-007D-4074-AB36-086BE8CE8BFE.webp?fit=max\&auto=format\&n=2gUFYKfNb_svpxsN\&q=85\&s=19499368933869d130b72080086d8d8b)

**v1.36.2**

2022-07-13

* Fix checkout with Adyen iDeal

**v2.1.0**

2022-07-07

**✨ Improvements**

*The version 2 of the Headless Universal Checkout is out!*

> [!TIP]
>
> 💡 Take a look at the [migration guide](https://primer.io/docs/changelogs/migration-guides/) for updating your integration to version 2.

**✨ Payments created automatically**

Primer Headless Universal Checkout | SDK

Starting from this version, automatic payment creation is included in the `Headless Universal Checkout`. You should now only care about creating best possible and seamless experience for your users, we will take care of the rest. Please take a look at our simple [explanation](https://www.notion.so/iOS-SDK-5a86e1d933fc4fae83b1497f80c7310a?pvs=21) about the changes we made.

**v2.0.1**

2022-06-20

* Fix Klarna checkout
* Dummy APMs

**v2.0.0**

2022-06-08

**✨ Improvements**

*The version 2 of the SDK is out!*
*This includes a simplified way to integrate Primer*

> [!TIP]
>
> 📚 Take a look at the [migration guide](https://primer.io/docs/changelogs/migration-guides/) for updating your integration to version 2.

**✨ Payments created automatically**

Universal Checkout | SDK

Creating payments with Universal Checkout is now *seamless.* There's no more need for **callbacks**, **API calls** and **headaches** to create a payment. It's all done under the hood 🧙

***In the past, creating payments involved manual payment handling:***
On the **client side**, you would have had to implement the dreaded `clientTokenCallback`, `onTokenizeSuccess` and `onResumeSuccess` delegate functions:

```swift theme={"dark"}
extension MyViewController: PrimerDelegate {

   func clientTokenCallback(_ completion: @escaping(String ? , Error ? ) - > Void) {
      // API call to fetch client token from your backend.
      fetchClientToken() {
         (token, err) in
         completion(token, err)
      }
		}

	func onTokenizeSuccess(_ paymentMethodToken: PaymentMethodToken, resumeHandler: ResumeHandlerProtocol) {
	   // Send the payment method token to your server to create a payment
	   sendPaymentMethodToken(token: paymentMethodToken) { (res, err) in
	      if let err = err {
	         resumeHandler.handle(error: err)
	      } else if
	      let res = res {
	         guard
	         let requiredActionDic = res["requiredAction"] as ? [String: Any],
	            let clientToken = requiredActionDic["clientToken"] as ? String
	         else {
	            resumeHandler.handleSuccess()
	            return
	         }

	         resumeHandler.handle(newClientToken: clientToken)
	      }
	   }
	}

	func onResumeSuccess(_ resumeToken: String, resumeHandler: ResumeHandlerProtocol) {
	   // Resume the payment
	   sendResumeToken(resumeToken) {
	      (res, err) in
	      if let err = err {
	         resumeHandler.handle(error: err)
	      } else if let res = res {
	         resumeHandler.handleSuccess()
	      }
	   }
	}

}
```

On the **server side**, you had to manually call our **Payments API** in order to create a payment 🤷

**Rejoice!** As from version `2.0.0` no manual payment handling is required! Payment creation is now, as mentioned above, :chef-kiss: - *seamless.*

Feel free to rip out the above mentioned callbacks when migrating to version `2.0.0` and enjoy the feeling of utter relaxation as all your payment handling is now done by Universal Checkout 💆

> [accordion] For the nerds ❤️
>
> *
>
> *Payment lifecycle callbacks*
>
> If you would still like to have some insights into how Universal Checkout is handling payment creation, we've introduced some new optional callbacks which will notify you during certain events in the payment lifecycle.
>
> > [!TIP]
> >
> > 💡 For more information on these callbacks, take a look at the **Payment Lifecycle Callbacks** section in our new and improved [API reference](https://www.notion.so/f62b4be8f24642989e63c25a8fb5f0ba?pvs=21)
>
> *Manual payment handling*
>
> For the **brave** and **bold** among us who would still like to manually handle payments in the checkout and perform the necessary API calls for payment creation - take a look at our [manual payment creation guide](https://primer.io/docs/checkout/advanced/manual-payment-creation.md#ios) 📚

**🔨 Deprecation**

The iOS SDK's move to version 2 has brought a lot of exciting changes and along with these changes, some deprecations.

> [!NOTE]
>
> 📚 Please take a look at our iOS SDK version 2 [migration guide](https://primer.io/docs/changelogs/migration-guides/sdk-v1-to-v2#ios) for a full list of the deprecations made.

**v1.36.1**

2022-06-15

* Add Klarna checkout

**v1.36.0**

2022-06-02

* Add the HUC beta feature

**v1.35.0**

2022-05-27

* Fix vaulting with PayPal
* Return error when vaulting without a customer id in the client session

**v1.34.0**

2022-05-23

* Added following APMs
  * Coinbase
  * OpenNode
  * 2c2p
  * PayShop
* Minor codebase improvements

**v1.33.1**

2022-05-19

* Fix Apple Pay merchant name not showing

**v1.33.0 \[BETA]**

2022-05-11

* Add the `Processor3DS` functionality

**v1.32.5**

2022-05-04

* Refactor Apple Pay cancellation flow
* Change primer error message to something generic

**v1.32.4**

2022-04-22

* Translations updates
* Better accents handling when uppercased text is presented
* Better handling of subunits for VND (Vietnamese Dong) currency

**v1.32.3**

2022-04-19

* Fixes cardholder name field not deleting characters
* Changes cardholder name field’s keyboard type

**v1.32.2**

2022-04-14

* Fixes Klarna tokenization when vaulting
* Fixes disabled user interaction on Dot Pay

**v1.32.1**

2022-04-12

* Fixes Klarna and Twint logos

**v1.32.0**

2022-04-11

* Added following APMs
  * Paytrail
  * Interac

**v1.31.0**

2022-04-06

* Client session validation improvement via dedicated BE API
* React Native bridge fixes
* PayPal logo aligned with other platforms
* Other UI improvements

**v1.30.0**

2022-03-28

* Adds payment method Blik
* Adds React Native helpers.

**v1.29.0**

2022-03-11

* Added right-to-left support
* Various bug fixes and enhancements

**v1.28.0 \[BETA 9]**

2022-05-19

* Fix Apple Pay merchant name not showing

**v1.28.0-beta.2**

2022-02-28

* Implements the Headless Universal Checkout for cards and APMs (except for Blik, Adyen Dot Pay and Adyen iDeal)

**v1.27.4**

2022-02-17

* Add missing localized strings
* Fix PayNow image color

**v1.27.3**

2022-02-15

* Fix compiler warnings

**v1.27.1**

2022-02-07

* Remove submodule responsible for localization because it was blocking SPM
* Make License file a resource
* Fix SPM import errors

**v1.27.0**

2022-02-07

* Improved UI for loading, success & error screens
* Fix APM redirect failing on some cases
* Remove some warnings

**v1.26.0**

2022-02-03

* Added the support for the 12 new languages;
  * Danish
  * Dutch
  * French
  * German
  * Greek
  * Italian
  * Norwegian
  * Polish
  * Portuguese
  * Spanish
  * Swedish
  * Turkish

**v1.25.0**

2022-02-01

* Improvements to payment method redirections

**v1.24.0**

2022-01-28

* Add Xfers
* Add payer info on PayPal
* Fix RN bug

**v1.23.0**

2022-01-18

* Tokenization will always return a `SINGLE_USE` token
* Add locale in analytics

**v1.22.0**

2022-01-11

* Support for capturing postal code in card form and observing using client session actions
* Additional currencies and associated symbols
* Improved error handling
* Improvements to surcharge UI
* Autofocus on the next field in the card form feature added.

**v1.20.0**

2021-12-22

* Add Atome Payment Method in beta

**v1.19.7**

2021-12-21

* Fix replacing that was replacing country code.

**v1.19.6**

2021-12-20

* Ignore client session warning if client session has already modified the settings
* Fix bug with enum's default case.

**v1.19.5**

2021-12-17

* Fixes dark mode colors
* Fixes searchfield return button tap bug
* Add missing "+" on payment methods surcharge
* Changes amount in minor units in the example app
* Sort picker view rows in the example app alphabetically

**v1.19.4**

2021-12-14

* Fixes client token env issue

**v1.19.3**

2021-12-13

* Fixes Apaya redirection for subdomains

**v1.19.2**

2021-12-13

* Add tests
* Minor fixes

**v1.19.1**

2021-12-08

* Minor fixes

**v1.19.0**

2021-12-06

* Minor fixes
* Surcharge feature stable

**v1.19.0-beta.3**

2021-12-03

* Adds surcharge functionality
* Adds client session actions ([documentation](https://www.notion.so/Client-Session-Actions-Guide-0614d5706c87460eb5fd4ae87665a281?pvs=21))
* Fix laggy cardnumber field
* Various fixes

**v1.18.0**

2021-11-30

* Adds Bancontact, EPS, Giropay, iDeal and Sofort via Buckaroo
* Minor fixes on the Example app
* Minor fix on PayPal presentation

**v1.17.0**

2021-11-23

* **Deprecates** `amount`, `currency`, `countryCode`, `customerId`, `customer`, `billingAddress` & `orderItems` from `PrimerSettings` in favour of setting them in the client-session with POST `/client-session`.

✨    [Settings Migration Guide](https://www.notion.so/Settings-Migration-Guide-91bedb704039464f8d74d78dcf1abb2f?pvs=21)

* **Deprecates** `PrimerTheme` and introduces `PrimerThemeData`.
* Restructure SDK theming
* Adds Payconiq, Giropay & Bancontact via PayNL, and iDeal & Bancontact via Mollie
* Focus on cardnumber field when opening card form
* Provide error when a payment method hasn't been configured
* Provides the functionality to change the background view's color
* Integrate with client session ([documentation](https://primer.io/docs/api-reference/get-started/overview))

**v1.16.1**

2021-12-13

* Fixes Apaya redirection for subdomains

**v1.16.0**

2021-11-17

* Fixes status bar bug on Apaya webview
* Adds iDeal & DotPay view Adyen
* Fixes 3DS challenge not being presented when opted-in in scenes

**v1.15.1**

2021-11-11

* Hotfix for broken case, and its presentation.

**v1.15.0**

2021-11-05

* Adds payment methods
  1. iDeal
  2. Hoolah
  3. Ali Pay
  4. Trustly
  5. Giropay
  6. Twint

**v1.14.3**

2021-11-04

* Fixes Apaya crash when presenting and dismissing almost at the same moment.

**v1.14.1**

2021-11-01

* Fixes Apaya bug when dismissed.

**v1.14.0**

2021-10-25

* Add card network and validation icons on the card form
* Bug fixes

**v1.13.3**

2021-10-04

* Bump

**v1.13.2**

2021-10-04

* Fix Apple Pay bug on React Native

**v1.13.1**

2021-10-04

* Fix resume handler protocol in certain situations.

**v1.13.0**

2021-10-04

* Adds dynamic 3DS logic
* Applies minor fixes

**v1.12.3**

2021-10-01

* Fixes unknown payment method parse.

**v1.12.2**

2021-09-29

* Fixes SDK presentation when opted-in to `UISceneDelegate`

**v1.12.1**

2021-09-28

* Fixes Swift Package Manager installation

**v1.12.0**

2021-09-24

* **Deprecates** `showCheckout(_ controller:, flow:)` in favour of:
  1. `showUniversalCheckout(on:)`
  2. `showVaultManager(on:)`
  3. `showPaymentMethod(:, withIntent:, on: UIViewController)`
* Applies minor fixes
* Fixes failing tests

**v1.11.4**

2021-09-23

**✨ Improvements**

* Phonenumber for Apaya can be passed in `PrimerSettings.Customer`
* Minor fixes

**v1.11.3**

2021-09-22

**✨ Improvements**

* Refactors UI
* Fixes UI bugs introduced on iOS 15

**v1.10.1**

2021-09-20

**✨ Improvements**

* Fix Xcode 12.4 building
* Refactor currency formatting

**v1.10.0**

2021-09-16

**✨ Improvements**

* Add the Apaya payment method
* Fix card view validation
* Apply minor fixes

**v1.8.4**

2021-07-19

**✨ Improvements**

* Fix configuration parse bug on staging
* Add missing Klarna `tokenDetails` on tokenization
* Fix bottom view bouncing when the keyboard was presented at the same time as a push animation
* Fix bottom view scrolling bug on universal checkout and vault manager

**v1.8.0**

2021-07-07

**Breaking Changes**

* Delegate function's `clientTokenCallback` completion handler has been modified.

**✨ Improvements**

* Delegate functions `tokenAddedToVault`, `onTokenizeSuccess`, `onCheckoutDismissed`, `checkoutFailed` are now optional.
* Deprecate `authorizePayment` delegate function in favour of `onTokenizeSuccess`.
* Fix return & cancel urls for PayPal checkout

**v1.7.3**

2021-06-28

**✨ Improvements**

* Add cancel error ( `domain: "primer", code: 1500`)
* Add UI tests
* Embed PromiseKit for future use

**v1.7.0**

2021-06-17

**✨ Improvements**

* Automatically redirect from Klarna to BankId (if installed)
* Fix UI bugs on universal checkout & vault
* Fix Apple Pay cancel from button

**v1.6.1**

2021-06-14

**✨ Improvements**

* Fix dismissing root view controller on error
* Fix flows
* Deprecate `authorizePayment` in favor of `onTokenizeSuccess`

**v1.6.0**

2021-05-31

**Features**

* Add ApplePay

**✨ Improvements**

* Add ApplePay functionality.
* Add PENDING amount functionality on `OrderItem`. Initializer throws errors if not initialzied correctly.
* Add payment networks
* Change the order of fields on the card form view.
* Modify extensions access levels.
* Use subclasses and extend them, if needed.
* Remove duplications and unused functionality.

**v1.5.5**

2021-05-21

**✨ Improvements**

* `countryCode` can be passed from the backend or, optionally, on the SDK. Backend `countryCode` has higher priority.
* Fix wrong error description.
* Expose `LocaleData` and let it be set on the `PrimerSettings` object. If no `LocaleData` is provided the SDK will default to the system's `Locale`.
* Modify classes, protocols and extensions access level.

**v1.5.4**

2021-05-18

**✨ Improvements**

* Update example

**v1.5.3**

2021-05-18

**✨ Improvements**

* Fix vault title
* Fix card form title
* Update labels
* General UI fixes

**v1.5.2**

2021-05-12

**✨ Improvements**

* Validate `token` parameter on webview redirects
* Catch `cancel` state on webview redirects
* Refactor webview process, work with a completion handler instead of `viewWillDisappear`
* Expose errors
* Move various functionalities from view controllers' view life-cycle to more appropriate places
* All public facing API call are dispatched on the main queue (for now)
* Add & fix Klarna validations
* Fix missing `super()` calls
* Add scheme variable for logging and default it to false
* Remove alerts
* Delegate methods are called on the main queue
* Remove unused variables. Modify one-liners to be more readable.

**v1.5.1**

2021-05-07

**Breaking Changes**

* The `completion` of the `clientTokenCallback(_:)` delegate function now expects a string

**✨ Improvements**

* `exp` has been added in the client token payload and token validation is performed. If token is expired an error will be returned through the `checkoutFailed(with:)` delegate function

**v1.4.4**

2021-04-27

**✨ Improvements**

* Provide `isInitialLoadingHidden` param which hides the initial loading view
* Refactor the success/failure view
* Expose errors trough the `checkoutFailed(with:)` delegate function
* Update icons

**Bug fixes**

* Remove card scanner button
* From vault, move back to checkout if no card is present
* Remove `Add new card` from the vault manager
* Replace `Klarna customer token` copy with user's Klarna email

**v1.4.3**

2021-04-22

**✨ Improvements**

* Expose `tokenAddedToVault(_: PaymentMethodToken)` delegate function

**Bug fixes**

* Rename `Klarna Customer Token` to user's email (if present)
* Rename `SAVED CARD` to `SAVED PAYMENT METHOD`

**v1.4.2**

2021-04-15

**✨ Improvements**

* Refactor Klarna flow

**Bug fixes**

* Update success screen
* Update localizable strings

**v1.4.1**

2021-04-15

**Bug fixes**

* Fix Swift Package Manager bundled resources
* Fix Swift Package Manager localization strings
* Update Swift version to `5.3`

**v1.3.1**

2021-03-28

**✨ Improvements**

* Introduce the Klarna payment method (in beta)
* The Vault Manager now supports vaulting PayPal
* Add Swift Package Manager integration support
* Various performance and size optimisation

**Bug fixes**

* Include toolbar above keyboard on date picker
* Fix buggy behaviour of RN bridge
* Improve the validation of the IBAN field in the Direct Debit form

[Client Session Actions Guide](https://www.notion.so/Client-Session-Actions-Guide-0614d5706c87460eb5fd4ae87665a281?pvs=21)

> [!NOTE]
>
> ⚠️
>
> If you are also integrating `Primer3DS`, make sure to install v.1.1.2 to avoid archiving issues with Xcode 14.3.1


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.