Releases: stripe/stripe-terminal-ios
Releases · stripe/stripe-terminal-ios
5.0.0
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.
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.
4.7.3
New
- Added support for S710 and S710 devkit readers.
Fixes
- Fixes an issue where collecting magstripe data would error when connected to a smart reader.
- Fixes an issue where collecting a payment after collecting NFC data would report a "device busy" error.
4.7.2
4.7.2 2025-09-15
Fixes
- Fixes an issue where
connectReaderfor Tap to Pay on iPhone would incorrectly report success if an Apple-provided reader software upate was interrupted by the app moving to the background.
4.7.1
4.7.0
4.7.0 2025-09-04
New
- Support for PayNow, a popular payment method in Singapore, is now available for Terminal smart readers in public preview.
- Support for PayPay, a popular digital wallet in Japan, is now available for Terminal smart readers in private preview.
- If you are interested in joining this preview, please contact Stripe support.
Fixes
- Fixes #355: SDK will now correctly report
SCPErrorOfflineEncryptionKeysUnavailableinstead ofSCPErrorUnexpectedSdkErrorwhen the iOS device is locked and the offline encryption keys are unavailable.
4.6.1
4.6.1 2025-08-07
- Built with Xcode 16.0 Swift version 6.0.
Fixes
- Fixed issue with connecting to a reader for the first time while offline
4.6.0
4.6.0 2025-08-04
- Built with Xcode 16.0 Swift version 6.0.
New
- Improved error handling when device is tampered. Connecting to a tampered reader will now fail with the
SCPErrorReaderTamperederror code. - Preview: Added
ConfirmConfiguration.surchargeandSurchargeConfigurationto configure surcharging onconfirmPaymentIntent.- If you are interested in joining the preview, please contact Stripe support.
- Preview: Added a
printmethod to enable printing images on the Verifone V660p reader.- If you are interested in joining the preview, please contact Stripe support.
Updates
- Preview: The
ConfirmConfiguration.amountSurchargefield has been renamed toConfirmConfiguration.surcharge.amount.- If you are interested in joining this preview, please contact Stripe support.
4.5.0
- Built with Xcode 16.0 Swift version 6.0.
New
- New: Added
cardholderVerificationMethodtoSCPReceiptDetails.- See
cardholder_verification_methodfor the list of supported verification methods.
- See
Updates
- iOS Location permission is no longer enforced when discovering readers, and will instead only be enforced when confirming payment intents.
Fixes
- Fixed issue with issuing Interac refunds when
onBehalfOfparameter is provided. - Fixed issue where
SCPCardPresentParametersfields were dropped. - Fixed issue where calling
discoverReaderswhile a mobile reader is connected would cause the SDK to enter an unexpected state preventing subsequentcollectPaymentMethodrequests from responding.
4.4.0
- Built with Xcode 16.0 Swift version 6.0.
New
- Added simulated Internet reader support for collecting inputs. See the updated
SCPSimulatorConfigurationfor usage. - Added
TapToPayInternalNetworkErrorerror code for network errors surfaced in Tap to Pay on iPhone and changed related errors fromInternalNetworkErrortoTapToPayInternalNetworkError. - Added new mobile reader disconnect reasons:
bluetoothSignalLost,usbDisconnected, andidlePowerDowntoSCPDisconnectReason.
Fixes
- Fixed an issue where calling
collectPaymentMethodwhen no reader was connected to the SDK falsely returnedSCPErrorFeatureNotAvailableWithConnectedReader. This error is now correctly reported asSCPErrorNotConnectedToReader. - Fixed an issue where the auto-reconnect feature would attempt to reconnect after a reader disconnected due to critically low battery and then disconnect again. Auto-reconnect is no longer attempted in this scenario.
- Fixed an issue where connection attempt to a reader incorrectly returned
SCPErrorNotConnectedToInternetif fetching the connection token failed. The correct errorSCPErrorConnectionTokenProviderCompletedWithErroris now reported instead. - Fixed an issue where the WisePad 3 reader would remain on the processing screen for 30 seconds when a collectPaymentMethod request with
updatePaymentIntentapplied fails. The reader now exits the processing screen immediately.
4.3.0
- Built with Xcode 16.0 Swift version 6.0.
- New: Added field
requestPartialAuthorizationtoSCPCardPresentParameters.- If you are interested in joining this preview, please email stripe-terminal-betas@stripe.com.
- New: Added field
cardDetailstoSCPPaymentMethodDetails.- Note for internet reader integrations, this feature requires reader software version
2.31or later to be installed on your internet reader.
- Note for internet reader integrations, this feature requires reader software version
- Update: If the
fetchConnectionTokencompletion block is called with an empty string for the token the SDK will fail the command withSCPErrorConnectionTokenProviderCompletedWithNothing. - Fix: Resolved an issue where the SDK could be left in an unexpected state if
discoverReaderswas called while an existingdiscoverReaderswas already in progress. - Preview: CollectInputs now requires a unique
idfor eachSelectionButton.- If you are interested in joining this preview, please email stripe-terminal-betas@stripe.com.
- Fix: Auto reconnect now reports
SCPErrorBluetoothConnectTimedOutif it times out reconnecting to a reader instead ofSCPErrorCanceled. - Fix: Auto reconnect will continue trying to reconnect while the app is in the background. When the app becomes active the reconnect timer will give another 60 seconds for reconnect to succeed before timing out.
- Fix: Resolved an issue where the
allowRedisplayparameter was not correctly applied when usingupdatePaymentIntentwithcollectPaymentMethod