Version 5.0.0 is a major update with significant breaking changes. Please consult the v5 Migration Guide for detailed instructions on updating your integration.
- Built with Xcode 26.0, Swift version 6.2.
- Minimum iOS version requirement increased from 14.0 to 15.0.
⚠️ Breaking changes required
New Features & Previews
- New: Simplified payment integration - Added
processPaymentIntent,processSetupIntent, andprocessRefund. These new methods combine thecollectandconfirmsteps into a single operation. - New: Swift async variants - Added modern async versions for asynchronous Terminal methods, allowing to await results directly instead of using completion blocks. Operation cancellation is handled via Swift Task cancellation.
- New: Added a
reconnectingenum value toSCPConnectionStatus. This new status is used specifically when an auto-reconnect operation is in progress. - Update: During a connection attempt, the
Terminal.connectedReaderproperty will now remainniluntil the connection completes successfully. Previously, the property would be populated while the connection was still in progress. - Preview: Collect non-payment data from NFC instruments and magnetic Stripe cards. The SDK now returns new, specific subclasses for this data:
SCPMagstripeCollectedDataandSCPNfcUidCollectedData.- Fix: Resolved an issue where collecting magstripe data would cause an error on smart readers.
- To request access to this private preview, please email terminal-collect-data@stripe.com.
- Preview: Mail Order / Telephone Order (MOTO) Payments. The
motoboolean has been replaced by a dedicatedSCPMotoConfigurationobject.- To request access to this private preview, please contact Stripe Support.
Platform & Initialization
- Update:
setTokenProviderhas been replaced withTerminal.initWithTokenProvidermethod. You must call this method before using theTerminal.sharedinstance. - Update: Debug symbols (
dSYMs) are no longer bundled with the XCFramework, reducing the overall framework size. - Update: The
SCPCancelablecompletion block is now guaranteed to be called after an operation completes. Every call tocancelwill have its own completion block invoked when the cancellation is finished. - Update:
clearCachedCredentialsnow requires that no reader is connected. The method has been updated to return aResultin Swift (or aBOOLwith anNSErrorin Objective-C) to indicate success or failure.
Reader Discovery & Connection
- Update: When the location permission status is undetermined, the SDK will now wait up to 2 minutes for the user to respond to the permission prompt before failing with
SCPErrorLocationServicesDisabled. - Update:
initandneware no longer available forDiscoveryConfiguration. They must now be initialized using their associated builder.
Payment & Data Collection
- Update: The
paymentStatuslogic has been refined for two-step payments. AftercollectPaymentMethodsucceeds, the status will transition toready. However, if you callconfirmPaymentIntentimmediately from within the collect completion block, the status will skipreadyand go directly toprocessing. - Update: Customer cancellation is now enabled by default on readers that support it during payment, setup, refund, and data collection flows.
- This change is supported by a refactor of the
customerCancellationproperty, which has been changed from aBOOLto the newSCPCustomerCancellationenum. Cancellation can be disabled by setting the property toSCPCustomerCancellationDisableIfAvailable.
- This change is supported by a refactor of the
- Update: Added the
clientSecretproperty toSCPPaymentIntentandSCPSetupIntent. - Update: Added the
customerproperty toSCPPaymentIntent. - Update: The
paymentMethodTypesproperty onSCPSetupIntentis now an array ofNSNumbers (representingSCPPaymentMethodType) in Objective-C, and an array ofPaymentMethodTypein Swift. - Update: Calls to collect will now wait for card removal instead of failing immediately with a
CardLeftInReadererror. - Update: Creating Interac refund parameters via
SCPRefundParametersBuildernow requires the PaymentIntent'sclientSecretto be passed in.
Deprecation
- Removed: Support for the Stripe Reader P400 has been removed.
- Deprecated:
collectRefundPaymentMethodandconfirmRefundare now deprecated, and replaced byprocessRefund. - Removed: Removed
SCPJSONDecodablefrom public headers. UseretrievePaymentIntentandretrieveSetupIntentto get the latest instance of a resource.
Renaming & Refactoring
- Update: The
chargefield onSCPRefundhas been renamed tochargeId. - Update:
SCPTippingConfiguration.eligibleAmountis now readonly. - Update:
SCPSimulatedCollectInputsResultSucceeded.simulatedCollectInputsSkipBehavioris now readonly. - Update: As part of MOTO changes,
MotoConfiguration.skipCvvhas been renamed toMotoConfiguration.skipCvc.