From ec58501836d014ce10c96d6fc0b8609f0b793daf Mon Sep 17 00:00:00 2001 From: Andrii Vysotskyi Date: Fri, 6 Nov 2026 14:45:53 +0100 Subject: [PATCH 1/9] chore(ad-hoc): deprecate untyped representation properties Deprecating POTypedRepresentation.wrappedValue never warned on property access, only on wrapped property declarations. Deprecate the wrapped properties themselves so that reading the raw value warns and points to the typed projection, and migrate internal usages to it. --- .../ProcessOut/Sources/Core/Utils/POTypedRepresentation.swift | 1 - .../Cards/Requests/POCardTokenizationRequest.swift | 1 + .../Repositories/Cards/Requests/POCardUpdateRequest.swift | 1 + .../Sources/Repositories/Cards/Responses/POCard.swift | 4 ++++ .../Cards/Responses/POCardIssuerInformation.swift | 2 ++ .../Requests/POAssignCustomerTokenRequest.swift | 1 + .../CustomerTokens/Responses/POCustomerToken.swift | 1 + .../Invoices/Requests/POInvoiceAuthorizationRequest.swift | 1 + .../CustomerActions/Requests/PO3DS2Configuration.swift | 1 + .../CustomerTokens/DefaultCustomerTokensService.swift | 2 +- .../Delegate/POCardTokenizationDelegate.swift | 2 +- .../Modules/CardUpdate/Delegate/POCardUpdateInformation.swift | 3 +++ 12 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Sources/ProcessOut/Sources/Core/Utils/POTypedRepresentation.swift b/Sources/ProcessOut/Sources/Core/Utils/POTypedRepresentation.swift index 2c034f3bc..1b9cb906e 100644 --- a/Sources/ProcessOut/Sources/Core/Utils/POTypedRepresentation.swift +++ b/Sources/ProcessOut/Sources/Core/Utils/POTypedRepresentation.swift @@ -17,7 +17,6 @@ public struct POTypedRepresentation { self._wrappedValue = wrappedValue } - @available(*, deprecated, message: "Use typed representation accessible via projectedValue.typed instead.") public var wrappedValue: Wrapped { get { _wrappedValue } set { _wrappedValue = newValue } diff --git a/Sources/ProcessOut/Sources/Repositories/Cards/Requests/POCardTokenizationRequest.swift b/Sources/ProcessOut/Sources/Repositories/Cards/Requests/POCardTokenizationRequest.swift index 79abfd34e..4672af8cb 100644 --- a/Sources/ProcessOut/Sources/Repositories/Cards/Requests/POCardTokenizationRequest.swift +++ b/Sources/ProcessOut/Sources/Repositories/Cards/Requests/POCardTokenizationRequest.swift @@ -29,6 +29,7 @@ public struct POCardTokenizationRequest: Codable, Sendable { public let contact: POContact? /// Preferred scheme defined by the Customer. + @available(*, deprecated, message: "Use $preferredScheme.typed instead.") @POTypedRepresentation public private(set) var preferredScheme: String? diff --git a/Sources/ProcessOut/Sources/Repositories/Cards/Requests/POCardUpdateRequest.swift b/Sources/ProcessOut/Sources/Repositories/Cards/Requests/POCardUpdateRequest.swift index bd9e30602..b36d33f0b 100644 --- a/Sources/ProcessOut/Sources/Repositories/Cards/Requests/POCardUpdateRequest.swift +++ b/Sources/ProcessOut/Sources/Repositories/Cards/Requests/POCardUpdateRequest.swift @@ -17,6 +17,7 @@ public struct POCardUpdateRequest: Codable, Sendable { /// Preferred scheme defined by the Customer. This gets priority when processing the Transaction. /// Pass `nil` to keep existing value. + @available(*, deprecated, message: "Use $preferredScheme.typed instead.") @POTypedRepresentation public private(set) var preferredScheme: String? diff --git a/Sources/ProcessOut/Sources/Repositories/Cards/Responses/POCard.swift b/Sources/ProcessOut/Sources/Repositories/Cards/Responses/POCard.swift index 595ccca8a..162a79380 100644 --- a/Sources/ProcessOut/Sources/Repositories/Cards/Responses/POCard.swift +++ b/Sources/ProcessOut/Sources/Repositories/Cards/Responses/POCard.swift @@ -18,14 +18,17 @@ public struct POCard: Codable, Hashable, Sendable { public let projectId: String /// Scheme of the card. + @available(*, deprecated, message: "Use $scheme.typed instead.") @POTypedRepresentation public private(set) var scheme: String /// Co-scheme of the card, such as Carte Bancaire. + @available(*, deprecated, message: "Use $coScheme.typed instead.") @POTypedRepresentation public private(set) var coScheme: String? /// Preferred scheme defined by the Customer. + @available(*, deprecated, message: "Use $preferredScheme.typed instead.") @POTypedRepresentation public private(set) var preferredScheme: String? @@ -60,6 +63,7 @@ public struct POCard: Codable, Hashable, Sendable { public let expYear: Int /// CVC check status. + @available(*, deprecated, message: "Use $cvcCheck.typed instead.") @POTypedRepresentation public var cvcCheck: String diff --git a/Sources/ProcessOut/Sources/Repositories/Cards/Responses/POCardIssuerInformation.swift b/Sources/ProcessOut/Sources/Repositories/Cards/Responses/POCardIssuerInformation.swift index ce69c8268..501f7cff4 100644 --- a/Sources/ProcessOut/Sources/Repositories/Cards/Responses/POCardIssuerInformation.swift +++ b/Sources/ProcessOut/Sources/Repositories/Cards/Responses/POCardIssuerInformation.swift @@ -9,10 +9,12 @@ public struct POCardIssuerInformation: Codable, Sendable { /// Scheme of the card. + @available(*, deprecated, message: "Use $scheme.typed instead.") @POTypedRepresentation public private(set) var scheme: String /// Co-scheme of the card, such as Carte Bancaire. + @available(*, deprecated, message: "Use $coScheme.typed instead.") @POTypedRepresentation public private(set) var coScheme: String? diff --git a/Sources/ProcessOut/Sources/Repositories/CustomerTokens/Requests/POAssignCustomerTokenRequest.swift b/Sources/ProcessOut/Sources/Repositories/CustomerTokens/Requests/POAssignCustomerTokenRequest.swift index 6383e8518..125686687 100644 --- a/Sources/ProcessOut/Sources/Repositories/CustomerTokens/Requests/POAssignCustomerTokenRequest.swift +++ b/Sources/ProcessOut/Sources/Repositories/CustomerTokens/Requests/POAssignCustomerTokenRequest.swift @@ -23,6 +23,7 @@ public struct POAssignCustomerTokenRequest: Codable, Sendable { // sourcery: Aut public let source: String /// Card scheme or co-scheme that should get priority if it is available. + @available(*, deprecated, message: "Use $preferredScheme.typed instead.") @POTypedRepresentation public private(set) var preferredScheme: String? diff --git a/Sources/ProcessOut/Sources/Repositories/CustomerTokens/Responses/POCustomerToken.swift b/Sources/ProcessOut/Sources/Repositories/CustomerTokens/Responses/POCustomerToken.swift index 5b1caf0a3..b2aa01cef 100644 --- a/Sources/ProcessOut/Sources/Repositories/CustomerTokens/Responses/POCustomerToken.swift +++ b/Sources/ProcessOut/Sources/Repositories/CustomerTokens/Responses/POCustomerToken.swift @@ -32,6 +32,7 @@ public struct POCustomerToken: Identifiable, Codable, Sendable { public let invoiceId: String? /// Source used to create the token (which will usually be a Card). + @available(*, deprecated, message: "Use $type.typed instead.") @POTypedRepresentation public private(set) var type: String diff --git a/Sources/ProcessOut/Sources/Repositories/Invoices/Requests/POInvoiceAuthorizationRequest.swift b/Sources/ProcessOut/Sources/Repositories/Invoices/Requests/POInvoiceAuthorizationRequest.swift index c333a4a66..080438759 100644 --- a/Sources/ProcessOut/Sources/Repositories/Invoices/Requests/POInvoiceAuthorizationRequest.swift +++ b/Sources/ProcessOut/Sources/Repositories/Invoices/Requests/POInvoiceAuthorizationRequest.swift @@ -30,6 +30,7 @@ public struct POInvoiceAuthorizationRequest: Codable, Sendable { // sourcery: Au public let enableThreeDS2 = true // sourcery:coding: key="enable_three_d_s_2" /// Card scheme or co-scheme that should get priority if it is available. + @available(*, deprecated, message: "Use $preferredScheme.typed instead.") @POTypedRepresentation public private(set) var preferredScheme: String? diff --git a/Sources/ProcessOut/Sources/Services/CustomerActions/Requests/PO3DS2Configuration.swift b/Sources/ProcessOut/Sources/Services/CustomerActions/Requests/PO3DS2Configuration.swift index 5ccb28227..b61d90c8b 100644 --- a/Sources/ProcessOut/Sources/Services/CustomerActions/Requests/PO3DS2Configuration.swift +++ b/Sources/ProcessOut/Sources/Services/CustomerActions/Requests/PO3DS2Configuration.swift @@ -21,6 +21,7 @@ public struct PO3DS2Configuration: Codable, Hashable, Sendable { public let directoryServerTransactionId: String /// Card scheme from the card used to initiate the payment. + @available(*, deprecated, message: "Use $scheme.typed instead.") @POTypedRepresentation public private(set) var scheme: PO3DS2ConfigurationCardScheme? diff --git a/Sources/ProcessOut/Sources/Services/CustomerTokens/DefaultCustomerTokensService.swift b/Sources/ProcessOut/Sources/Services/CustomerTokens/DefaultCustomerTokensService.swift index 364624a0c..c30e1c3fd 100644 --- a/Sources/ProcessOut/Sources/Services/CustomerTokens/DefaultCustomerTokensService.swift +++ b/Sources/ProcessOut/Sources/Services/CustomerTokens/DefaultCustomerTokensService.swift @@ -102,7 +102,7 @@ private extension POAssignCustomerTokenRequest { // swiftlint:disable:this no_ex customerId: customerId, tokenId: tokenId, source: newSource ?? source, - preferredScheme: preferredScheme, + preferredScheme: $preferredScheme.typed?.rawValue, verify: verify, invoiceId: invoiceId, thirdPartySdkVersion: newSdkVersion ?? thirdPartySdkVersion, diff --git a/Sources/ProcessOutUI/Sources/Modules/CardTokenization/Delegate/POCardTokenizationDelegate.swift b/Sources/ProcessOutUI/Sources/Modules/CardTokenization/Delegate/POCardTokenizationDelegate.swift index 28bb25da3..5def7a3fb 100644 --- a/Sources/ProcessOutUI/Sources/Modules/CardTokenization/Delegate/POCardTokenizationDelegate.swift +++ b/Sources/ProcessOutUI/Sources/Modules/CardTokenization/Delegate/POCardTokenizationDelegate.swift @@ -99,7 +99,7 @@ extension POCardTokenizationDelegate { @MainActor public func preferredScheme(issuerInformation: POCardIssuerInformation) -> String? { - issuerInformation.scheme + issuerInformation.$scheme.typed.rawValue } @MainActor diff --git a/Sources/ProcessOutUI/Sources/Modules/CardUpdate/Delegate/POCardUpdateInformation.swift b/Sources/ProcessOutUI/Sources/Modules/CardUpdate/Delegate/POCardUpdateInformation.swift index c52b52dd3..31596a1b1 100644 --- a/Sources/ProcessOutUI/Sources/Modules/CardUpdate/Delegate/POCardUpdateInformation.swift +++ b/Sources/ProcessOutUI/Sources/Modules/CardUpdate/Delegate/POCardUpdateInformation.swift @@ -22,14 +22,17 @@ public struct POCardUpdateInformation: Sendable { public let iin: String? /// Scheme of the card. + @available(*, deprecated, message: "Use $scheme.typed instead.") @POTypedRepresentation public private(set) var scheme: String? /// Co-scheme of the card, such as Carte Bancaire. + @available(*, deprecated, message: "Use $coScheme.typed instead.") @POTypedRepresentation public private(set) var coScheme: String? /// Preferred scheme previously selected by customer if any. + @available(*, deprecated, message: "Use $preferredScheme.typed instead.") @POTypedRepresentation public private(set) var preferredScheme: String? From e456174e6e2c96e87509f3a4b21ce1d25d6e78ee Mon Sep 17 00:00:00 2001 From: Andrii Vysotskyi Date: Fri, 6 Nov 2026 14:58:34 +0100 Subject: [PATCH 2/9] chore(ad-hoc): silence delegate backward compatibility deprecation warnings Default implementations of new delegate methods forward to their deprecated counterparts to keep existing integrations working. Ignore DeprecatedDeclaration on those bridges instead of deprecating them, which would warn every conformer relying on optional defaults. --- ...ativeAlternativePaymentMethodDelegate.swift | 6 ++++++ .../Service/POCheckout3DSServiceDelegate.swift | 18 ++++++++++++++++++ .../Delegate/POCardTokenizationDelegate.swift | 6 ++++++ 3 files changed, 30 insertions(+) diff --git a/Sources/ProcessOut/Sources/UI/Modules/NativeAlternativePaymentMethod/Interactor/PONativeAlternativePaymentMethodDelegate.swift b/Sources/ProcessOut/Sources/UI/Modules/NativeAlternativePaymentMethod/Interactor/PONativeAlternativePaymentMethodDelegate.swift index bf7e6041f..a5909654d 100644 --- a/Sources/ProcessOut/Sources/UI/Modules/NativeAlternativePaymentMethod/Interactor/PONativeAlternativePaymentMethodDelegate.swift +++ b/Sources/ProcessOut/Sources/UI/Modules/NativeAlternativePaymentMethod/Interactor/PONativeAlternativePaymentMethodDelegate.swift @@ -42,11 +42,17 @@ public protocol PONativeAlternativePaymentMethodDelegate: AnyObject, Sendable { extension PONativeAlternativePaymentMethodDelegate { + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func nativeAlternativePayment(didEmitEvent event: PONativeAlternativePaymentMethodEvent) { nativeAlternativePaymentMethodDidEmitEvent(event) } + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func nativeAlternativePayment( defaultValuesFor parameters: [PONativeAlternativePaymentMethodParameter] diff --git a/Sources/ProcessOutCheckout3DS/Sources/Service/POCheckout3DSServiceDelegate.swift b/Sources/ProcessOutCheckout3DS/Sources/Service/POCheckout3DSServiceDelegate.swift index 090bd8229..519251c6e 100644 --- a/Sources/ProcessOutCheckout3DS/Sources/Service/POCheckout3DSServiceDelegate.swift +++ b/Sources/ProcessOutCheckout3DS/Sources/Service/POCheckout3DSServiceDelegate.swift @@ -93,6 +93,9 @@ public protocol POCheckout3DSServiceDelegate: AnyObject, Sendable { /// Provides default implementations to ensure backward compatibility. extension POCheckout3DSServiceDelegate { + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func checkout3DSService( _ service: POCheckout3DSService, @@ -101,6 +104,9 @@ extension POCheckout3DSServiceDelegate { willCreateAuthenticationRequest(configuration: configuration) } + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func checkout3DSService( _ service: POCheckout3DSService, @@ -109,6 +115,9 @@ extension POCheckout3DSServiceDelegate { configuration(with: parameters) } + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func checkout3DSService( _ service: POCheckout3DSService, shouldContinueWith warnings: Set @@ -118,6 +127,9 @@ extension POCheckout3DSServiceDelegate { } } + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func checkout3DSService( _ service: POCheckout3DSService, @@ -126,6 +138,9 @@ extension POCheckout3DSServiceDelegate { didCreateAuthenticationRequest(result: result) } + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func checkout3DSService( _ service: POCheckout3DSService, willPerformChallengeWith parameters: PO3DS2ChallengeParameters @@ -133,6 +148,9 @@ extension POCheckout3DSServiceDelegate { willHandle(challenge: parameters) } + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func checkout3DSService( _ service: POCheckout3DSService, didPerformChallenge result: Result diff --git a/Sources/ProcessOutUI/Sources/Modules/CardTokenization/Delegate/POCardTokenizationDelegate.swift b/Sources/ProcessOutUI/Sources/Modules/CardTokenization/Delegate/POCardTokenizationDelegate.swift index 5def7a3fb..bd1552165 100644 --- a/Sources/ProcessOutUI/Sources/Modules/CardTokenization/Delegate/POCardTokenizationDelegate.swift +++ b/Sources/ProcessOutUI/Sources/Modules/CardTokenization/Delegate/POCardTokenizationDelegate.swift @@ -74,11 +74,17 @@ extension POCardTokenizationDelegate { // Ignored } + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func cardTokenization(preferredSchemeWith issuerInformation: POCardIssuerInformation) -> POCardScheme? { preferredScheme(issuerInformation: issuerInformation).map(POCardScheme.init) } + #if hasAttribute(diagnose) + @diagnose(DeprecatedDeclaration, as: ignored) + #endif @MainActor public func cardTokenization(didTokenizeCard card: POCard, shouldSaveCard: Bool) async throws { try await processTokenizedCard(card: card) From acefb9bb2b91149645804f0374a357d375ba9cf7 Mon Sep 17 00:00:00 2001 From: Andrii Vysotskyi Date: Fri, 6 Nov 2026 16:21:34 +0100 Subject: [PATCH 3/9] chore(ad-hoc): remove redundant AuthenticationError sendable conformance AuthenticationError conforms to Error, which already refines Sendable, so the retroactive conformance is redundant and triggers a warning. --- .../Sources/Extensions/Checkout3DS+Sendable.swift | 3 --- 1 file changed, 3 deletions(-) diff --git a/Sources/ProcessOutCheckout3DS/Sources/Extensions/Checkout3DS+Sendable.swift b/Sources/ProcessOutCheckout3DS/Sources/Extensions/Checkout3DS+Sendable.swift index fd3091ff1..0e352d867 100644 --- a/Sources/ProcessOutCheckout3DS/Sources/Extensions/Checkout3DS+Sendable.swift +++ b/Sources/ProcessOutCheckout3DS/Sources/Extensions/Checkout3DS+Sendable.swift @@ -21,6 +21,3 @@ extension AuthenticationResult: @retroactive @unchecked Sendable { } /// Marks `ChallengeParameters` as `Sendable` retroactively. extension ChallengeParameters: @retroactive @unchecked Sendable { } - -/// Marks `AuthenticationError` as `Sendable` retroactively. -extension AuthenticationError: @retroactive @unchecked Sendable { } From 74d5f678ae05f5640882b3a6fbb7433a0e9d6565 Mon Sep 17 00:00:00 2001 From: Andrii Vysotskyi Date: Fri, 6 Nov 2026 16:35:11 +0100 Subject: [PATCH 4/9] chore(ad-hoc): compare typed preferred scheme in cards service test --- .../ProcessOutTests/Sources/Integration/CardsServiceTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/ProcessOutTests/Sources/Integration/CardsServiceTests.swift b/Tests/ProcessOutTests/Sources/Integration/CardsServiceTests.swift index 796966c8e..705900c1d 100644 --- a/Tests/ProcessOutTests/Sources/Integration/CardsServiceTests.swift +++ b/Tests/ProcessOutTests/Sources/Integration/CardsServiceTests.swift @@ -110,7 +110,7 @@ struct CardsServiceTests { let card = try await sut.tokenize(request: request) // Then - #expect(card.preferredScheme == request.preferredScheme) + #expect(card.$preferredScheme.typed == request.$preferredScheme.typed) } // MARK: - Private Properties From 58dbc4d40eaee8b3c1fe181c16e64395fe0b1d41 Mon Sep 17 00:00:00 2001 From: Andrii Vysotskyi Date: Mon, 9 Nov 2026 10:00:23 +0100 Subject: [PATCH 5/9] chore(ad-hoc): raise test targets deployment target to iOS 17 Testing and XCTest frameworks shipped with Xcode are built for iOS 17, which made the linker warn for test bundles targeting iOS 16. --- project.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/project.yml b/project.yml index bae3e60a9..0c5b0e160 100644 --- a/project.yml +++ b/project.yml @@ -78,7 +78,7 @@ targets: ProcessOutTests: type: bundle.unit-test platform: iOS - deploymentTarget: "16.0" + deploymentTarget: "17.0" settings: TARGET_ROOT: $(PROJECT_DIR)/Tests/ProcessOutTests dependencies: @@ -87,7 +87,7 @@ targets: ProcessOutUITests: type: bundle.unit-test platform: iOS - deploymentTarget: "16.0" + deploymentTarget: "17.0" settings: TARGET_ROOT: $(PROJECT_DIR)/Tests/ProcessOutUITests dependencies: @@ -128,7 +128,7 @@ targets: ProcessOutCheckout3DSTests: type: bundle.unit-test platform: iOS - deploymentTarget: "16.0" + deploymentTarget: "17.0" settings: TARGET_ROOT: $(PROJECT_DIR)/Tests/ProcessOutCheckout3DSTests dependencies: @@ -137,7 +137,7 @@ targets: ProcessOutNetcetera3DSTests: type: bundle.unit-test platform: iOS - deploymentTarget: "16.0" + deploymentTarget: "17.0" settings: TARGET_ROOT: $(PROJECT_DIR)/Tests/ProcessOutNetcetera3DSTests dependencies: From 6326259fa76f659c35c8f89393b7766fa2d4d0f1 Mon Sep 17 00:00:00 2001 From: Andrii Vysotskyi Date: Mon, 9 Nov 2026 10:18:10 +0100 Subject: [PATCH 6/9] chore(ad-hoc): handle unknown future cases in native alternative payment switches With library evolution enabled, PONativeAlternativePaymentElementV2 and PONativeAlternativePaymentFormV2.Parameter may gain cases, so switching over them needs @unknown default. --- .../NativeAlternativePaymentDefaultInteractor.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sources/ProcessOutUI/Sources/Modules/NativeAlternativePayment/Interactor/NativeAlternativePaymentDefaultInteractor.swift b/Sources/ProcessOutUI/Sources/Modules/NativeAlternativePayment/Interactor/NativeAlternativePaymentDefaultInteractor.swift index 50b2d1f12..e137686fb 100644 --- a/Sources/ProcessOutUI/Sources/Modules/NativeAlternativePayment/Interactor/NativeAlternativePaymentDefaultInteractor.swift +++ b/Sources/ProcessOutUI/Sources/Modules/NativeAlternativePayment/Interactor/NativeAlternativePaymentDefaultInteractor.swift @@ -712,6 +712,8 @@ final class NativeAlternativePaymentDefaultInteractor: return .group(try await resolve(group: group)) case .unknown: return nil + @unknown default: + return nil } return nil } @@ -918,6 +920,9 @@ final class NativeAlternativePaymentDefaultInteractor: case .unknown: assertionFailure("Unable to validate unknown parameter.") return nil + @unknown default: + assertionFailure("Unable to validate unknown parameter.") + return nil } validation = .init( name: parameter.specification.key, From 9be62defce9dffb7c9f35ed6149c9d63885ea3de Mon Sep 17 00:00:00 2001 From: Andrii Vysotskyi Date: Mon, 9 Nov 2026 10:25:19 +0100 Subject: [PATCH 7/9] chore(ad-hoc): import UIKit in card scanner interactor Scoped imports are not supported in module interfaces. --- .../CardScanner/Interactor/DefaultCardScannerInteractor.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/ProcessOutUI/Sources/Modules/CardScanner/Interactor/DefaultCardScannerInteractor.swift b/Sources/ProcessOutUI/Sources/Modules/CardScanner/Interactor/DefaultCardScannerInteractor.swift index a693df98b..b1605db9c 100644 --- a/Sources/ProcessOutUI/Sources/Modules/CardScanner/Interactor/DefaultCardScannerInteractor.swift +++ b/Sources/ProcessOutUI/Sources/Modules/CardScanner/Interactor/DefaultCardScannerInteractor.swift @@ -5,7 +5,7 @@ // Created by Andrii Vysotskyi on 25.11.2024. // -import class UIKit.UIApplication +import UIKit import AVFoundation @_spi(PO) import ProcessOut From 0e03cf9059718826f095a63e154e393b0a272b05 Mon Sep 17 00:00:00 2001 From: Andrii Vysotskyi Date: Mon, 9 Nov 2026 10:29:06 +0100 Subject: [PATCH 8/9] chore(ad-hoc): update readme requirements and modules Require Xcode 26.2, the version pinned by CI, and list ProcessOutCoreUI alongside other published modules. --- Example/README.md | 2 +- README.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Example/README.md b/Example/README.md index ed01dcc35..3aebf1fbf 100644 --- a/Example/README.md +++ b/Example/README.md @@ -4,7 +4,7 @@ Project demonstrates multiple flows that ProcessOut framework is capable of. ## Requirements -- A recent version of Xcode (tested with 16.0) +- Xcode 26.2 or later - [Homebrew](https://brew.sh) package manager ### Installation diff --git a/README.md b/README.md index f95bb96aa..7820ae2ce 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ Get started with our ProcessOut [documentation](https://docs.processout.com/) or - [ProcessOut](https://swiftpackageindex.com/processout/processout-ios/documentation/processout) - [ProcessOutCheckout3DS](https://swiftpackageindex.com/processout/processout-ios/documentation/processoutcheckout3ds) +- [ProcessOutCoreUI](https://swiftpackageindex.com/processout/processout-ios/documentation/processoutcoreui) - [ProcessOutNetcetera3DS](https://swiftpackageindex.com/processout/processout-ios/documentation/processoutnetcetera3ds) - [ProcessOutUI](https://swiftpackageindex.com/processout/processout-ios/documentation/processoutui) @@ -17,6 +18,7 @@ Get started with our ProcessOut [documentation](https://docs.processout.com/) or | ---------------------- | ---------------------------------------------------------------------------- | | ProcessOut | Allows to interact with ProcessOut API and provides a UI to handle payments. | | ProcessOutCheckout3DS | Integration with Checkout.com 3D Secure (3DS) mobile SDK. | +| ProcessOutCoreUI | Shared styling primitives used by ProcessOutUI. | | ProcessOutNetcetera3DS | Integration with Netcetera 3D Secure (3DS) mobile SDK. | | ProcessOutUI | ProcessOut prebuilt UI to handle payments. | @@ -32,7 +34,7 @@ We welcome contributions of any kind including new features, bug fixes, and gene ### Development requirements -- A recent version of Xcode (tested with 16.0) +- Xcode 26.2 or later - [Homebrew](https://brew.sh/) package manager ### Installation From 2d5df48b98bd896d61121ecac5e8ae924fdd1bcc Mon Sep 17 00:00:00 2001 From: Andrii Vysotskyi Date: Mon, 9 Nov 2026 10:59:36 +0100 Subject: [PATCH 9/9] chore(ad-hoc): fix 3DS2 configuration scheme migration hint The enum-backed wrapper exposes typed() as a method. --- .../Services/CustomerActions/Requests/PO3DS2Configuration.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/ProcessOut/Sources/Services/CustomerActions/Requests/PO3DS2Configuration.swift b/Sources/ProcessOut/Sources/Services/CustomerActions/Requests/PO3DS2Configuration.swift index b61d90c8b..a309932ab 100644 --- a/Sources/ProcessOut/Sources/Services/CustomerActions/Requests/PO3DS2Configuration.swift +++ b/Sources/ProcessOut/Sources/Services/CustomerActions/Requests/PO3DS2Configuration.swift @@ -21,7 +21,7 @@ public struct PO3DS2Configuration: Codable, Hashable, Sendable { public let directoryServerTransactionId: String /// Card scheme from the card used to initiate the payment. - @available(*, deprecated, message: "Use $scheme.typed instead.") + @available(*, deprecated, message: "Use $scheme.typed() instead.") @POTypedRepresentation public private(set) var scheme: PO3DS2ConfigurationCardScheme?