From b56b5f2489e0a4f793f366b75eb12bd695c4a404 Mon Sep 17 00:00:00 2001 From: Jax DesMarais-Leder Date: Thu, 11 Jul 2024 12:01:27 -0500 Subject: [PATCH 1/8] Update `URLOpener.openURL(_:options:completionHandler:)` for Xcode 16 beta 3 (#1360) * update open method name to work for xcode 15 and xcode 16 beta 3+; update logic and tests --- CHANGELOG.md | 2 ++ Sources/BraintreeCore/UIApplication+URLOpener.swift | 10 +++++++++- Sources/BraintreePayPal/BTPayPalClient.swift | 2 +- Sources/BraintreeVenmo/BTVenmoClient.swift | 4 ++-- UnitTests/BraintreeTestShared/FakeApplication.swift | 4 ++-- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9252e9c91..ccfabbcee8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## unreleased * BraintreeShopperInsights (BETA) * Add error when using an invalid authorization type +* BraintreeCore + * Update `URLOpener.openURL(_:options:completionHandler:)` protocol method to fix method signature change in Xcode 16 beta 3 (fixes #1359) ## 6.22.0 (2024-07-02) * BraintreeThreeDSecure diff --git a/Sources/BraintreeCore/UIApplication+URLOpener.swift b/Sources/BraintreeCore/UIApplication+URLOpener.swift index 30efc970ec..4b68101986 100644 --- a/Sources/BraintreeCore/UIApplication+URLOpener.swift +++ b/Sources/BraintreeCore/UIApplication+URLOpener.swift @@ -7,7 +7,7 @@ import UIKit public protocol URLOpener { func canOpenURL(_ url: URL) -> Bool - func open(_ url: URL, options: [UIApplication.OpenExternalURLOptionsKey: Any], completionHandler completion: ((Bool) -> Void)?) + func open(_ url: URL, completionHandler completion: ((Bool) -> Void)?) func isPayPalAppInstalled() -> Bool func isVenmoAppInstalled() -> Bool } @@ -33,4 +33,12 @@ extension UIApplication: URLOpener { } return canOpenURL(payPalURL) } + + /// :nodoc: This method is exposed for internal Braintree use only. Do not use. It is not covered by Semantic Versioning and may change or be removed at any time. + /// Indicates whether the PayPal App is installed. + // TODO: once Xcode 16 is the minimum supported version remove this method and update the protocol to the default open signature from UIApplication + @_documentation(visibility: private) + public func open(_ url: URL, completionHandler completion: ((Bool) -> Void)?) { + UIApplication.shared.open(url, options: [:], completionHandler: completion) + } } diff --git a/Sources/BraintreePayPal/BTPayPalClient.swift b/Sources/BraintreePayPal/BTPayPalClient.swift index 76681ecb31..dd3dc82cec 100644 --- a/Sources/BraintreePayPal/BTPayPalClient.swift +++ b/Sources/BraintreePayPal/BTPayPalClient.swift @@ -389,7 +389,7 @@ import BraintreeDataCollector return } - application.open(redirectURL, options: [:]) { success in + application.open(redirectURL) { success in self.invokedOpenURLSuccessfully(success, completion: completion) } } diff --git a/Sources/BraintreeVenmo/BTVenmoClient.swift b/Sources/BraintreeVenmo/BTVenmoClient.swift index ffb4731c93..d4ccdd2cf3 100644 --- a/Sources/BraintreeVenmo/BTVenmoClient.swift +++ b/Sources/BraintreeVenmo/BTVenmoClient.swift @@ -253,7 +253,7 @@ import BraintreeCore /// Switches to the App Store to download the Venmo application. @objc public func openVenmoAppPageInAppStore() { - application.open(appStoreURL, options: [:], completionHandler: nil) + application.open(appStoreURL, completionHandler: nil) } // MARK: - Internal Methods @@ -343,7 +343,7 @@ import BraintreeCore } func startVenmoFlow(with appSwitchURL: URL, shouldVault vault: Bool, completion: @escaping (BTVenmoAccountNonce?, Error?) -> Void) { - application.open(appSwitchURL, options: [:]) { success in + application.open(appSwitchURL) { success in self.invokedOpenURLSuccessfully(success, shouldVault: vault, completion: completion) } } diff --git a/UnitTests/BraintreeTestShared/FakeApplication.swift b/UnitTests/BraintreeTestShared/FakeApplication.swift index bf7b6683d5..94415dcd7d 100644 --- a/UnitTests/BraintreeTestShared/FakeApplication.swift +++ b/UnitTests/BraintreeTestShared/FakeApplication.swift @@ -9,10 +9,10 @@ public class FakeApplication: URLOpener { public var cannedCanOpenURL: Bool = true public var canOpenURLWhitelist: [URL] = [] - public func open(_ url: URL, options: [UIApplication.OpenExternalURLOptionsKey : Any], completionHandler: ((Bool) -> Void)?) { + public func open(_ url: URL, completionHandler completion: ((Bool) -> Void)?) { lastOpenURL = url openURLWasCalled = true - completionHandler?(cannedOpenURLSuccess) + completion?(cannedOpenURLSuccess) } @objc public func canOpenURL(_ url: URL) -> Bool { From b4ff6ce555b099b57c2ef74e225998fd262164b1 Mon Sep 17 00:00:00 2001 From: Jax DesMarais-Leder Date: Fri, 12 Jul 2024 07:57:37 -0500 Subject: [PATCH 2/8] Update Custom Fields Implementation (#1362) * remove custom fields from ViewController causing all 3DS UI tests to fail * only set custom fields on request if it is not nil * add CHANGELOG entry --- CHANGELOG.md | 2 ++ Demo/Application/Features/ThreeDSecureViewController.swift | 6 ------ Sources/BraintreeThreeDSecure/BTThreeDSecureClient.swift | 7 +++++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccfabbcee8..290cd7d540 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ * Add error when using an invalid authorization type * BraintreeCore * Update `URLOpener.openURL(_:options:completionHandler:)` protocol method to fix method signature change in Xcode 16 beta 3 (fixes #1359) +* BraintreeThreeDSecure + * Fix bug to conditionally unwrap `customFields` - this caused an error when this value was not set on `BTThreeDSecureRequest` ## 6.22.0 (2024-07-02) * BraintreeThreeDSecure diff --git a/Demo/Application/Features/ThreeDSecureViewController.swift b/Demo/Application/Features/ThreeDSecureViewController.swift index 911625b563..315e0d7580 100644 --- a/Demo/Application/Features/ThreeDSecureViewController.swift +++ b/Demo/Application/Features/ThreeDSecureViewController.swift @@ -92,12 +92,6 @@ class ThreeDSecureViewController: PaymentButtonBaseViewController { private func createThreeDSecureRequest(with nonce: String) -> BTThreeDSecureRequest { let request = BTThreeDSecureRequest() - let customFields = [ - "test" : "test", - "test1": "test1", - ] - - request.customFields = customFields request.threeDSecureRequestDelegate = self request.amount = 10.32 request.nonce = nonce diff --git a/Sources/BraintreeThreeDSecure/BTThreeDSecureClient.swift b/Sources/BraintreeThreeDSecure/BTThreeDSecureClient.swift index c06322e7f2..4f4df67b2a 100644 --- a/Sources/BraintreeThreeDSecure/BTThreeDSecureClient.swift +++ b/Sources/BraintreeThreeDSecure/BTThreeDSecureClient.swift @@ -351,10 +351,13 @@ import BraintreeCore "challengeRequested": request.challengeRequested, "exemptionRequested": request.exemptionRequested, "requestedExemptionType": request.requestedExemptionType.stringValue, - "dataOnlyRequested": request.dataOnlyRequested, - "customFields": request.customFields + "dataOnlyRequested": request.dataOnlyRequested ] + if let customFields = request.customFields { + requestParameters["customFields"] = customFields + } + if request._cardAddChallenge == .requested || request.cardAddChallengeRequested == true { requestParameters["cardAdd"] = true } else if request._cardAddChallenge == .notRequested { From 5e5fa3bd946d1b5ef9a2763d2c7d92fb639c939a Mon Sep 17 00:00:00 2001 From: Jax DesMarais-Leder Date: Mon, 15 Jul 2024 12:57:52 -0500 Subject: [PATCH 3/8] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 290cd7d540..27401cfa3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ * BraintreeShopperInsights (BETA) * Add error when using an invalid authorization type * BraintreeCore - * Update `URLOpener.openURL(_:options:completionHandler:)` protocol method to fix method signature change in Xcode 16 beta 3 (fixes #1359) + * Update `URLOpener.openURL(_:completionHandler:)` protocol method to fix method signature change in Xcode 16 beta 3 (fixes #1359) * BraintreeThreeDSecure * Fix bug to conditionally unwrap `customFields` - this caused an error when this value was not set on `BTThreeDSecureRequest` From 0b01a6191f9eadfbb7e76445409b6097d82bf069 Mon Sep 17 00:00:00 2001 From: braintreeps Date: Mon, 15 Jul 2024 18:01:41 +0000 Subject: [PATCH 4/8] Remove SPMTest app to avoid Carthage timeout --- .../SPMTest/SPMTest.xcodeproj/project.pbxproj | 502 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/xcschemes/SPMTest.xcscheme | 78 --- SampleApps/SPMTest/SPMTest/AppDelegate.swift | 29 - .../AccentColor.colorset/Contents.json | 11 - ...20 - iPhone App Icon-ipad-spotlight@1x.png | Bin 3422 -> 0 bytes ... - iPhone App Icon-ipad-spotlight@2x-1.png | Bin 3991 -> 0 bytes ...20 - iPhone App Icon-ipad-spotlight@2x.png | Bin 3991 -> 0 bytes .../120 - iPhone App Icon-ipad@1x.png | Bin 3936 -> 0 bytes .../120 - iPhone App Icon-ipad@2x.png | Bin 5205 -> 0 bytes .../120 - iPhone App Icon@2x.png | Bin 4590 -> 0 bytes .../120 - iPhone Pro App Icon-ipad@2x.png | Bin 5073 -> 0 bytes .../AppIcon.appiconset/Contents.json | 106 ---- .../AppIcon.appiconset/unused-1024-logo.png | Bin 104035 -> 0 bytes .../SPMTest/Assets.xcassets/Contents.json | 6 - .../Base.lproj/LaunchScreen.storyboard | 25 - .../SPMTest/Base.lproj/Main.storyboard | 24 - SampleApps/SPMTest/SPMTest/Info.plist | 68 --- .../SPMTest/SPMTest/SceneDelegate.swift | 45 -- .../SPMTest/SPMTest/ViewController.swift | 32 -- 21 files changed, 941 deletions(-) delete mode 100644 SampleApps/SPMTest/SPMTest.xcodeproj/project.pbxproj delete mode 100644 SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 SampleApps/SPMTest/SPMTest.xcodeproj/xcshareddata/xcschemes/SPMTest.xcscheme delete mode 100644 SampleApps/SPMTest/SPMTest/AppDelegate.swift delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AccentColor.colorset/Contents.json delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@1x.png delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x-1.png delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x.png delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad@1x.png delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad@2x.png delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon@2x.png delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone Pro App Icon-ipad@2x.png delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/unused-1024-logo.png delete mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/Contents.json delete mode 100644 SampleApps/SPMTest/SPMTest/Base.lproj/LaunchScreen.storyboard delete mode 100644 SampleApps/SPMTest/SPMTest/Base.lproj/Main.storyboard delete mode 100644 SampleApps/SPMTest/SPMTest/Info.plist delete mode 100644 SampleApps/SPMTest/SPMTest/SceneDelegate.swift delete mode 100644 SampleApps/SPMTest/SPMTest/ViewController.swift diff --git a/SampleApps/SPMTest/SPMTest.xcodeproj/project.pbxproj b/SampleApps/SPMTest/SPMTest.xcodeproj/project.pbxproj deleted file mode 100644 index 8fe73f7363..0000000000 --- a/SampleApps/SPMTest/SPMTest.xcodeproj/project.pbxproj +++ /dev/null @@ -1,502 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 45B2CA822C08D70E00FCCD4C /* BraintreePayPalMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = 45B2CA812C08D70E00FCCD4C /* BraintreePayPalMessaging */; }; - 80214E042551FB5A00695A6F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80214E032551FB5A00695A6F /* AppDelegate.swift */; }; - 80214E062551FB5A00695A6F /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80214E052551FB5A00695A6F /* SceneDelegate.swift */; }; - 80214E082551FB5A00695A6F /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80214E072551FB5A00695A6F /* ViewController.swift */; }; - 80214E0B2551FB5A00695A6F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 80214E092551FB5A00695A6F /* Main.storyboard */; }; - 80214E0D2551FB5C00695A6F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 80214E0C2551FB5C00695A6F /* Assets.xcassets */; }; - 80214E102551FB5C00695A6F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 80214E0E2551FB5C00695A6F /* LaunchScreen.storyboard */; }; - BE35FCDB2A1BD2EF008F0326 /* BraintreeLocalPayment in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCDA2A1BD2EF008F0326 /* BraintreeLocalPayment */; }; - BE35FCE22A1C0885008F0326 /* BraintreeAmericanExpress in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE12A1C0885008F0326 /* BraintreeAmericanExpress */; }; - BE35FCE42A1C0885008F0326 /* BraintreeApplePay in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE32A1C0885008F0326 /* BraintreeApplePay */; }; - BE35FCE62A1C0885008F0326 /* BraintreeCard in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE52A1C0885008F0326 /* BraintreeCard */; }; - BE35FCE82A1C0885008F0326 /* BraintreeCore in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE72A1C0885008F0326 /* BraintreeCore */; }; - BE35FCEA2A1C0885008F0326 /* BraintreeDataCollector in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE92A1C0885008F0326 /* BraintreeDataCollector */; }; - BE35FCEC2A1C0885008F0326 /* BraintreeLocalPayment in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCEB2A1C0885008F0326 /* BraintreeLocalPayment */; }; - BE35FCEE2A1C0885008F0326 /* BraintreePayPal in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCED2A1C0885008F0326 /* BraintreePayPal */; }; - BE35FCF02A1C0885008F0326 /* BraintreePayPalNativeCheckout in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCEF2A1C0885008F0326 /* BraintreePayPalNativeCheckout */; }; - BE35FCF22A1C0885008F0326 /* BraintreeSEPADirectDebit in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCF12A1C0885008F0326 /* BraintreeSEPADirectDebit */; }; - BE35FCF42A1C0885008F0326 /* BraintreeThreeDSecure in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCF32A1C0885008F0326 /* BraintreeThreeDSecure */; }; - BE35FCF62A1C0885008F0326 /* BraintreeVenmo in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCF52A1C0885008F0326 /* BraintreeVenmo */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 42C1D7CC25C8B34C00C33708 /* CardinalMobile.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CardinalMobile.framework; path = Frameworks/CardinalMobile.framework; sourceTree = ""; }; - 80214E002551FB5A00695A6F /* SPMTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SPMTest.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 80214E032551FB5A00695A6F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 80214E052551FB5A00695A6F /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 80214E072551FB5A00695A6F /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 80214E0A2551FB5A00695A6F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 80214E0C2551FB5C00695A6F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 80214E0F2551FB5C00695A6F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 80214E112551FB5C00695A6F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9C1FC8B927CED7DF00E6E14D /* braintree_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = braintree_ios; path = ../..; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 80214DFD2551FB5A00695A6F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - BE35FCEC2A1C0885008F0326 /* BraintreeLocalPayment in Frameworks */, - BE35FCE82A1C0885008F0326 /* BraintreeCore in Frameworks */, - BE35FCEE2A1C0885008F0326 /* BraintreePayPal in Frameworks */, - BE35FCF62A1C0885008F0326 /* BraintreeVenmo in Frameworks */, - BE35FCE22A1C0885008F0326 /* BraintreeAmericanExpress in Frameworks */, - BE35FCDB2A1BD2EF008F0326 /* BraintreeLocalPayment in Frameworks */, - BE35FCE42A1C0885008F0326 /* BraintreeApplePay in Frameworks */, - BE35FCE62A1C0885008F0326 /* BraintreeCard in Frameworks */, - BE35FCF02A1C0885008F0326 /* BraintreePayPalNativeCheckout in Frameworks */, - BE35FCF42A1C0885008F0326 /* BraintreeThreeDSecure in Frameworks */, - BE35FCF22A1C0885008F0326 /* BraintreeSEPADirectDebit in Frameworks */, - BE35FCEA2A1C0885008F0326 /* BraintreeDataCollector in Frameworks */, - 45B2CA822C08D70E00FCCD4C /* BraintreePayPalMessaging in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 42C2D3002583D8CF00E525AE /* Frameworks */ = { - isa = PBXGroup; - children = ( - 42C1D7CC25C8B34C00C33708 /* CardinalMobile.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 80214DF72551FB5A00695A6F = { - isa = PBXGroup; - children = ( - 9C1FC8B827CED7DF00E6E14D /* Packages */, - 80214E022551FB5A00695A6F /* SPMTest */, - 80214E012551FB5A00695A6F /* Products */, - 42C2D3002583D8CF00E525AE /* Frameworks */, - ); - sourceTree = ""; - }; - 80214E012551FB5A00695A6F /* Products */ = { - isa = PBXGroup; - children = ( - 80214E002551FB5A00695A6F /* SPMTest.app */, - ); - name = Products; - sourceTree = ""; - }; - 80214E022551FB5A00695A6F /* SPMTest */ = { - isa = PBXGroup; - children = ( - 80214E032551FB5A00695A6F /* AppDelegate.swift */, - 80214E052551FB5A00695A6F /* SceneDelegate.swift */, - 80214E072551FB5A00695A6F /* ViewController.swift */, - 80214E092551FB5A00695A6F /* Main.storyboard */, - 80214E0C2551FB5C00695A6F /* Assets.xcassets */, - 80214E0E2551FB5C00695A6F /* LaunchScreen.storyboard */, - 80214E112551FB5C00695A6F /* Info.plist */, - ); - path = SPMTest; - sourceTree = ""; - }; - 9C1FC8B827CED7DF00E6E14D /* Packages */ = { - isa = PBXGroup; - children = ( - 9C1FC8B927CED7DF00E6E14D /* braintree_ios */, - ); - name = Packages; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 80214DFF2551FB5A00695A6F /* SPMTest */ = { - isa = PBXNativeTarget; - buildConfigurationList = 80214E142551FB5C00695A6F /* Build configuration list for PBXNativeTarget "SPMTest" */; - buildPhases = ( - 80214DFC2551FB5A00695A6F /* Sources */, - 80214DFD2551FB5A00695A6F /* Frameworks */, - 80214DFE2551FB5A00695A6F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SPMTest; - packageProductDependencies = ( - BE35FCDA2A1BD2EF008F0326 /* BraintreeLocalPayment */, - BE35FCE12A1C0885008F0326 /* BraintreeAmericanExpress */, - BE35FCE32A1C0885008F0326 /* BraintreeApplePay */, - BE35FCE52A1C0885008F0326 /* BraintreeCard */, - BE35FCE72A1C0885008F0326 /* BraintreeCore */, - BE35FCE92A1C0885008F0326 /* BraintreeDataCollector */, - BE35FCEB2A1C0885008F0326 /* BraintreeLocalPayment */, - BE35FCED2A1C0885008F0326 /* BraintreePayPal */, - BE35FCEF2A1C0885008F0326 /* BraintreePayPalNativeCheckout */, - BE35FCF12A1C0885008F0326 /* BraintreeSEPADirectDebit */, - BE35FCF32A1C0885008F0326 /* BraintreeThreeDSecure */, - BE35FCF52A1C0885008F0326 /* BraintreeVenmo */, - 45B2CA812C08D70E00FCCD4C /* BraintreePayPalMessaging */, - ); - productName = SPMTest; - productReference = 80214E002551FB5A00695A6F /* SPMTest.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 80214DF82551FB5A00695A6F /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1210; - LastUpgradeCheck = 1210; - TargetAttributes = { - 80214DFF2551FB5A00695A6F = { - CreatedOnToolsVersion = 12.1; - }; - }; - }; - buildConfigurationList = 80214DFB2551FB5A00695A6F /* Build configuration list for PBXProject "SPMTest" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 80214DF72551FB5A00695A6F; - packageReferences = ( - BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */, - ); - productRefGroup = 80214E012551FB5A00695A6F /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 80214DFF2551FB5A00695A6F /* SPMTest */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 80214DFE2551FB5A00695A6F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 80214E102551FB5C00695A6F /* LaunchScreen.storyboard in Resources */, - 80214E0D2551FB5C00695A6F /* Assets.xcassets in Resources */, - 80214E0B2551FB5A00695A6F /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 80214DFC2551FB5A00695A6F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 80214E082551FB5A00695A6F /* ViewController.swift in Sources */, - 80214E042551FB5A00695A6F /* AppDelegate.swift in Sources */, - 80214E062551FB5A00695A6F /* SceneDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 80214E092551FB5A00695A6F /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 80214E0A2551FB5A00695A6F /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 80214E0E2551FB5C00695A6F /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 80214E0F2551FB5C00695A6F /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 80214E122551FB5C00695A6F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_BITCODE = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.1; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 80214E132551FB5C00695A6F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_BITCODE = NO; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.1; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 80214E152551FB5C00695A6F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 20; - DEVELOPMENT_TEAM = 43253H4X22; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Frameworks", - ); - INFOPLIST_FILE = SPMTest/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.braintreepayments.SPMTest; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_WORKSPACE = YES; - }; - name = Debug; - }; - 80214E162551FB5C00695A6F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 20; - DEVELOPMENT_TEAM = 43253H4X22; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Frameworks", - ); - INFOPLIST_FILE = SPMTest/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.braintreepayments.SPMTest; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_WORKSPACE = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 80214DFB2551FB5A00695A6F /* Build configuration list for PBXProject "SPMTest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 80214E122551FB5C00695A6F /* Debug */, - 80214E132551FB5C00695A6F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 80214E142551FB5C00695A6F /* Build configuration list for PBXNativeTarget "SPMTest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 80214E152551FB5C00695A6F /* Debug */, - 80214E162551FB5C00695A6F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCRemoteSwiftPackageReference section */ - BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/braintree/braintree_ios"; - requirement = { - branch = main; - kind = branch; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - -/* Begin XCSwiftPackageProductDependency section */ - 45B2CA812C08D70E00FCCD4C /* BraintreePayPalMessaging */ = { - isa = XCSwiftPackageProductDependency; - productName = BraintreePayPalMessaging; - }; - BE35FCDA2A1BD2EF008F0326 /* BraintreeLocalPayment */ = { - isa = XCSwiftPackageProductDependency; - productName = BraintreeLocalPayment; - }; - BE35FCE12A1C0885008F0326 /* BraintreeAmericanExpress */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreeAmericanExpress; - }; - BE35FCE32A1C0885008F0326 /* BraintreeApplePay */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreeApplePay; - }; - BE35FCE52A1C0885008F0326 /* BraintreeCard */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreeCard; - }; - BE35FCE72A1C0885008F0326 /* BraintreeCore */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreeCore; - }; - BE35FCE92A1C0885008F0326 /* BraintreeDataCollector */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreeDataCollector; - }; - BE35FCEB2A1C0885008F0326 /* BraintreeLocalPayment */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreeLocalPayment; - }; - BE35FCED2A1C0885008F0326 /* BraintreePayPal */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreePayPal; - }; - BE35FCEF2A1C0885008F0326 /* BraintreePayPalNativeCheckout */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreePayPalNativeCheckout; - }; - BE35FCF12A1C0885008F0326 /* BraintreeSEPADirectDebit */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreeSEPADirectDebit; - }; - BE35FCF32A1C0885008F0326 /* BraintreeThreeDSecure */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreeThreeDSecure; - }; - BE35FCF52A1C0885008F0326 /* BraintreeVenmo */ = { - isa = XCSwiftPackageProductDependency; - package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; - productName = BraintreeVenmo; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 80214DF82551FB5A00695A6F /* Project object */; -} diff --git a/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a625..0000000000 --- a/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003d..0000000000 --- a/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/SampleApps/SPMTest/SPMTest.xcodeproj/xcshareddata/xcschemes/SPMTest.xcscheme b/SampleApps/SPMTest/SPMTest.xcodeproj/xcshareddata/xcschemes/SPMTest.xcscheme deleted file mode 100644 index 38ec8a362a..0000000000 --- a/SampleApps/SPMTest/SPMTest.xcodeproj/xcshareddata/xcschemes/SPMTest.xcscheme +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SampleApps/SPMTest/SPMTest/AppDelegate.swift b/SampleApps/SPMTest/SPMTest/AppDelegate.swift deleted file mode 100644 index f7f60fd743..0000000000 --- a/SampleApps/SPMTest/SPMTest/AppDelegate.swift +++ /dev/null @@ -1,29 +0,0 @@ -import UIKit - -@main -class AppDelegate: UIResponder, UIApplicationDelegate { - - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - return true - } - - // MARK: UISceneSession Lifecycle - - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) - } - - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { - // Called when the user discards a scene session. - // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. - // Use this method to release any resources that were specific to the discarded scenes, as they will not return. - } - - -} - diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AccentColor.colorset/Contents.json b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AccentColor.colorset/Contents.json deleted file mode 100644 index eb87897008..0000000000 --- a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AccentColor.colorset/Contents.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "colors" : [ - { - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@1x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@1x.png deleted file mode 100644 index 3d059cba61790bb3b8a924e5f37e1f8ab2450bf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3422 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 AZvX%Q diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x-1.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x-1.png deleted file mode 100644 index f3bfe7c0242dcecc1ab785ffc1438a674cfd5f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3991 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 diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x.png deleted file mode 100644 index f3bfe7c0242dcecc1ab785ffc1438a674cfd5f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3991 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 diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad@1x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad@1x.png deleted file mode 100644 index c47b7752ebded78d2f77e4baf9a3f5ff65fcb659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3936 zcmaJ^=Q|q?xD8_O)*dx#)SfkKk5F1$1u<)n8Z}Cds8K|1AuVcCvqFv7dsXaNR3rAL zR;c^C_Yb%q&N!jL{r?3C(SJM$HxdE>$kg04 zGz@h$G&l|Y-Z;B?IspJWl(|_!rY4IFap-p0_K64FoV@2OA*7sBiaPW_qj=p&L;Toi zzCcYvZ8};3^VgulcNE=BK&o!U)x5diGv zlj-TJFZuv+x*XfFExrQJcu6ff=EL|?d;m#CpM0AiRpPb0YaSrD)MX<97_aM4N;{wJ zhTR@=zBxgfTsuezW%RyS{}`-~K5wA-B+eLF`zA{Zj~DEf{=TO_UcQH@(6%ftKkCg$XRQ2X&gdb|T(Oi<1^QT*Udl-eTUu7C zr#Uu8K?O&@zPqHk$8^cN{T%KU{*vFtcoMU1X0)9_8XfP7ig^aLND+Na79BCW9>FBT zPs|*i>p|xlU<(L~kvDACB_4XC1kiX)z~ikFf*-bLMI%8r)Y0Zzom%UkEE)1|>xP5e zI>CEgUya*j^MWGzwI6SxFmusbv}ZT|gB0SoU&*AQqT=|%c9d+9Qa%K$oPg*^9U6ix z0#O}&H&tN0n)1SbCn&Li7x=;52QUK-nE<|wlJOz32EOW|^dYB+1gVn6cI%1btwP;M zqK;|k3)Q}*FceegsL#=`T9UleP&1UHBk0$NPoYUuy`JDJXA=DItw6(2>HP6qmR1tT zhnug&6P(gScX(mZwAuL6_LK{NACZf7ifkmHp3&c$!Sr8<8M~I(pEoloQ#JK4uCpEk zgkx-b(n(Z@NC+miEl5~TG}Tiqc<^YsJW{!f@hh|tDOAO*ElE15z8eHYaRv6-Obi3e zm^d(O-ND>`&f&TEY_?;zxjy5jj5CcC^g61&Yk*DE^DtE8UN7Z3-$`(r;40lw6m_@%vBP_=4zdWg zh(~M590Q&FDWsM_k0@%cEKVLz9#a|?k}Z` z@x4r^(~ad}H0BY=X@HvQx^qMLl=#}Y(uWmZgZ!Alsx}5SJo%iqywqtbh8a)z=nS5- zX{j&1lz-l$`cCzoMu{xgwtbE4^*TH|kdHHh~t^nHOlUH}ojQ=xQMfGaWuUAROWyKKyywZ^YY{ z22E>vU{ImDQ#Zw1!o{LKUGi?Kx#2~F!jjXHI6FwT7&o21(|^vf-F{B$#Oq{*eS&4f zvS5)T#zZ~hc2`oy%q6gN7z&nrCcW8$#-NvFYTaz^+XOPN1-%8|XL4scXX0fhf73U6 zGfOv{`_1c{!Hl>&pS!*LqC0L@v@!`@h7QU@=h{l&Z`{W1*0simG~c-Y?cG({O=m%{ zbg(e9n6bd62c9w`yb;3)EMiM~u))=myb)-LwcKj75zovy95Z$1MJCD@RM#AoiA*XN zuT&~kJC-9YT#8;I#~(t{M6G1inyi~lg47N4#4N;YYmJTyl#TMM^NTw{omLSeT@##3 zc8O}AyUPm_3Oeoc?2FbNAAd`&oD?jwEK(ehbNu0(aH5Q{;;W0#)lJh)8h&B2FtciE z*NSdHQ+RB;@<~@dMGY3#{Q`rlwCBFc_dXkXU-a(twGg>dqD5jZ!wQ3~@PV+2$eu6< zSO83D;nlEPchkGnhwy+nh7HELV;qs=r7N3_)fFOZft?3oiU>&E3IpmT3VlI!!Hwg? zNf0Z=1;@2hT`s&0e1eJ&o2A{`UT+>hfnkXGL;1f?>z1wMg2x5MDaVV*DHx9#XGEC% zCVkhN+5A#PUyH(QgMA8S%$74TmU}m2FXofB0{guBRu+^N@0xK!)OysZpv1w9vh*z$ zG`Y=3c|vqmWUBrXf3Pzu z`_n)DzdA6U&%7VNEiZ#0-L30?JNA;jIK6Zhk4Lpflbl%Byc1SujJ_Jxb=bKgk2VL?Thxu# z+eOB$s66{U={*ltoRQV;%W!U+$-fSxe-i!}@cv5MTLXu^x?UN(h(2g9xhTN}{SG7v z`n9stdS;R10Jd42sQC@4#*Up9o;IOg?RS{lTlv~iyCuI)ZjdamZ+~9v4w^07E#8H) zBqKK4cSD;Fa+d~|=R4QDBBt?@2>OYYAJMV3MGRdUdQ_`<_1phiuj)nb74EinxC6SjIcNnAl~qcRpEcjtQNxQ{91Co>St`=(NTH+wbjT+x2M|8?FD zjr{169NVlRcAt4&YtT!Gu0RWEH)!vIszGSjHEbp1`+5KIC=5Q0iRl#h_v12ivNAtB z2-oi7Fx+?SF}atc@_ep7i!Kn9s|3bL}$v3@51o4hH~$OS+nBrongz2wPVxGq%Cb^oD4^ZaH-w(7>r- zaa8x8F2R>elI0P`aoX%!&zZX!L9%?_h9w;q9I+nuIu?~M?mvPI!&r-`pA@4`gz_yOmLd@mDI zD!^!*d7$ef@T1?jIFUAwYKDL8|3#mv&M3k`#@U_6GU|AOq1;~ zW{G#>jBuN~nph^FYa-rIoaAQ-r}PUAITnq=2$CHPy)_EayM+X2Sf3uvBu&Xz{rr_S zNJGLUAswqPnwYGepSeeu@r1DSYo`pH{SLm-?t3fnkoi_?ZH=&lRn&v8c7*CsBojJg8jc6~Tb#n1_1*^i(bs?3v z8Dv7)pOs@KQ>QIfQnr4j$K|D>d@K4i>`ouui-^@{()nKGl3zi3geTVLxCiF;3E(LF z1%f+Y9|Y*IEWxlWV6Y%$_mWH8?!IF)XM)>8>Yt|B$0?;EG3ZLG$hbIWl^vU`|Brxy zLrakBKU;IduWySt9bz&x1|!Yln@gEKS%J%64&?Qvze@DgJkH)inD4*I}0y&J@ffzRY>_A0pq z5}u1e2Kv6cp?|!4Pvyz(pN`Dyt`8UIAV6l}l;qNX+W*7&V#()10&z?We2NCBX*rrf~y+MA& zwz#o{9!SrP{1HjCL({e`&vQRym*Gu6z_+WfX{=|IP_p+vBjHth7I5{ou8*?F0Gd;< z_wLpQ^6XRZq_^w>N!S%*cK^QENgbV4%t?Au2hoq9Hz{mBDEeD+VdYQV%}m+bL`$OO zAz??6If}IPsv8l>GblIQCko8%n9;Bdb=`^oqpmd|#9X2x z2|}zeTHTUdM{$yMZ%uH8(S*24Pm05-N8~=ZI*wVABkY&F%yIurp<)e>&CE~x%{AGy z;?%b#5F~VTOIg#VP1=D+0((A9dWS)*5U+dWkM-^tx&gA*=V^C9D#?1uI%)l^}>-B344MST#zlUXoZ5 zy%VA@FYi~p5AVah_spD`Gjs2p4`*(&@gpb&84DQz0HDy-(R}=G=Ki-x?)>XaJsg|> z0GXPHhK8}Oh6aampr5OUw+jHELs9q!{={^FAqk6?MUT^Raqyn7gpqPgD(KJyO_Ft^ zjR_Ou`GPe;+7KE+bLS`B1kfZdCoKp#F4l35^bfW10LDa9Yi$wXMS4&#eT>V;4_YiO zY_!ZRxE(~ywE>K;V}U)-VFb}qB{0bT4#t|6Zlv#wkcpar5=PLy?CJ`Ho@)|LU!#@s z@~U(OP^bH%(a!BZgu9ISp3UAyWpc@C@Z15AY0bzeM)EPP5xzD>^)pM}0*6m>1SJzC zBpFIbOY68+`aXD{R;~-R59K2HR!dkc#+W;#iV*F_xP0E_G6b;1I+ypCTiFX@7xWX| ze8Ae7z|_?FTLXYNB+qVigRjIpSyBtayr2As5J2*}Prf6NGW9~OHedfjWd{4&G`&GyOE}NrLSREW=DLx*djGVk;RhtZk-sK0dUG=S-_6!%rOHr``l4oTdp%Y-~jvq z0h)1dkMAaW+h+CsCg%sI?(TX&BPjL~721@&DvtFV?n;zD%NyChGFPZzREgo%rGMa} zwN_DCp|3eQN=}KyI^)l%Z&$kIJ-!X~3coGxW;{yRG&9+JO&Xu<-kzWs1IrL~CX0`n zS&m|o;U{K}EcAl72iXB466B3rb&0?FDFHONiFkZf!U!XFtf(c(zIJxF*JplsmM$4~ zvvGM3Y@On}Y@o(vx_(NY?i|QlD$HEA6z`28q|G3H{*Fv4MpT?o*q(wd`hh*31i^8h{($M2uyNp{SQ-C2*1)IT6#iiHXs9Y#B1T`F z02kvy5_?EZU#eD4f_^ zOB;zz+~qssaSo|Fc!G#{nq0yu2a0*X=jeq-1vV0B&&V&$5c;>ojNLz$^;#K}DO-9N zmst-1!U=Xg*(9o8Nr)!2VI-_an(7%a9s(LpuS~A@gw}LMW<{#P0WG(3{-2iN%nnScl@AOhE^BskB+{ZxYH@dCf6TbUnFj_>}n2oY_MUouPqD7OJ*J4LrphcDz(sD#ot` z_#j4lY+C9IkL2~fsD`SBYLq{wsPdhL)#SDnS{k7>BlIG~pxFUz!t^SjHo9Gi#7hV^u zHGws@HI_Bh@Z&o@;`Zkc9y6CCvJvfw^kb>@FW43A519`hwznOEIT!bR@4v|5%5lvh z$Vsm;F!P&%%oNu6)EG^Rd-8cYcrJKe&4|{fVJorlB5a|Z)a~kZ(spB8a#-u7=ilCK zrR{8%e3niYW)?FRq||^kbG~o>Q2tu}hSXrQyCwJ&&~nXk=9~=&L&ILN>;7Ky2TW(Zlo^;6SMnZa!{gdQe0pBz6;uA z6*b&F&hgzoRjmM1RgzND-Slam0!lF)l_MLpM;@1~tp#>L0V5L-8Y9YfSgPri6 zu&Kz7@I4Db3lPkwdAsql_j_NymyJ`zV4~-W6Kbqtas5+$wa8L%*ItA|zD?sIL;It4 z>?!3b*A?HD1hG<5ND`XzZ2oz$Kzn?|49(8wa_iU;VuhGLod4sLZsk&;#hBn2#aJ1b zobixxT7)TZB4D|dEihBmSrlOx;$Jdt_9JJ-a_4f?a4u~lxX-6=ab9Tw-+CoPrB9U! zO&xq)nZ3b+1>3$vet4Ss^g~P5nd5=yL8bCT*QBxY8rz+16+Fu+OIVOHPi~%LTc$FVZs)u zRc(YNf}=u-;T|h}I8Sh3_1Wa2e$vYBZ?ctr(FfLVP`lp)Kdn`dU>h>*Fcty#@3P)w zU!uNErt7I*GiW%m`vPAB&SkeJU1eI?gfxt5h*Y@03HwJ%o5IhCEaTZ{dXA{m1>QX#xGD@?4vYNl@JHkG6JaiQ)?J5lq za_bDfNxa5L?|V_!C(Jfj|M>CKl8(%5P5 zjyhN$Q2(NCvWylPv!e9w_onyWTXaR$d;UOj*-rd*9QmE{+lcpP*3Obe#M6t#(bM=n zbopud75rB)3H;~cR@*Tw&(XqmVZ7m&P5s*FpVB`q?N4_*%^j=)?5RA`ozt5otD4Yy zA3UKmmD}&PV_4Gj*U{VIEqjIE2Y<|UE%`)E5u_3I6D!|^uysUzJu~*ISM%w2__cn-LKC3ngFWd%GYZplvQ@ILWqQ)G20pF?4Eo`J{nZGktKBkw zQ1;~xMhlE$?VVByz1@}0ps7%4tcB-7l;7hKY zP6ji#c8$)Ba*ESb;4et8|Ag@QxUMgq#UEcuKD3Ag07$XAnrcr%2=)pC+*#+?2fLW{ zOhzd*sq+PW;g1Ymk)g-e>5F5}hg5Khqpr=q@eb+|H{4Enq|*c-+S^Pf&qI68^K?pt zMA0oZuTWy>ZEhVm#yhyA2xf0mAcYojol^AMOy{QCQ-cRk&&1YsoIO8yZiFX8U?&gG z!Vi=WR;IT0Pxg%;7T!Q!WJL23+KoR!y6D;$13+aYmZZkw^&u8-V3ymr8}=Grunx^ z0GT#%GwnNj%cCYaP#MwxSaxt!%bwGPf8z9z^RBi7?{(yEn=d4cwpuw?C|4=g>)5H0 zD}nBC*rnB%v^)yWes8fW>FoB8TSxeV^u?EdAJpx$NuJtjRhz;r*fh9=A5(l1$z-Ica`(jvF4jZ$bba;Ho$yF|ydy7yBJK(Oq?;G7x`>RQN`AfEwcf0fQ zw1mH*Uv*ZY2Z=}HVnO6jDy*9}cwDbrM!hSH_`X%a$YxKLo5ZD*bI;XE39elZ>^(OACVYsC3nqviUZ?Dbc!=^)?3cyy#iR#BCt{+^#PY50wrLWs# z?jvIVUIj_zRth4mu6kaHiOdaW8~u`Cb!Lkh8ItQD;(#Rs`<{-gFj;1)%+RIw)1(j5 z(D`jf`@rSz zghBRjzUdp#5)%kqT6W33oM3-DKIPbt5aDLE ztpTH`pF%U19}l5x&&nQCc#v1vvn-n<$E-VF-mM1DTmKwhtP^!ul>~tu<|P+oC2(SA z^bUR-RIp(6&A01(mgj-&-&TRca4Mr;yXOMldF)sCw!1hBONcw?B`2g#QX9uVUn?wh z``P|1f<8{Hushk0vXr|daSmPBE8Y8nsFvdixABl~`I5PctEkJ79~*;RZEw;<@G8kG zwhJ!Wo3(}H`10TYhoIDOtFN|S%~YIDBtf+-oeeRZ&&}}cmyRB+jCSpW{3nTjrN0)w zi104IAKouwkY>m&mP3!X_r-9DYb#g@<+f#M2-&);Ve$oXtvcdn669B9%(^@$`^LaB z-&%Ckj34%#-h|z|71WQs(uG2$X5arigK~YdQpUjQsA7YdO@F+Kyp52u01T)tU9{V? zxvCg=Y;kUv;9X4&N*(vNJf#+0Hy4+8gjPLG3rdKU9x&1fChT=v4+si`Y3v>9KW;qC z1Am&AR!lA*sf>3lW9#dM)W6zk8X4A~Rx3ZP`^uyby~!=$NF6 zsu0|QmPWDpIe!jV_JKZ>B_n;2I;}|7kPY4cE@c}Y1bpV_^X~m&c`0tnlxg~>k;&<3<*)&4~NyLUa~C-zXlm+372NL9tSSSbiY4Gau9glg=wd>=!O{-7(f|3*9N2agCMk}S5a->{8e z?7OLvGQ>Qo0_B*t#vkF+Uc2m6;DKWU&In}KQ7`?$v&}~=eSIxHUuN;F zT!L@KkY3!s+{qZkjVA&tH^wk;I^OgP;bix5S`dTjmw*-R>xJORY3@(QpO!8c;ZgVO z#d-vJFH|6pDlI?Lhch9YR+u(3kl>rVkuzUX)azAP7)sL0QoOp__Zm##G6tSy5g*axTnK>dVd2Z?V7rAb?@O2)G40WSgkSy5 z@YiY(i`}v1``!@I9L(fzIa=F#eNClX(bk(ncbD0*?f#jWok*-pR?Sl>hFu%KTD@?E zo%8b|G>nN}a5!f7`U3$GvaN@^@S z6X=;@?hPsPvb+Ut@T`HqL-QUk6uiMOS|ovpO>jt2XLWI7&)z`NOP1x7Hr3MBOS@xm za;&Lx3SRq2pW3AOShFej)21DJ7nxLR+jYq~S9n|G6{JqN*x&ZA-n^~Vz)4S-++M;w z83;^snr#^BOH&|g{;{>u^;#*p$hu{CX`O5xtLS07q4YZChJAW}_2W@HD-5fU6X3qE zw4P?-BJeiK9;-s_s^v|gcsm-qkz*1(auYAWyL)p?a1(sS{ZqtyMaiyecA>q7Tob>P zG`V$B`B&roK4}%*uK@9&;86&NDh9|Qp;-t3nYs-c5c~@X09uXde+lCMiab=wQ>>Rr U^hc}zdlv$9wH|3UsN2W>2V!U9!2kdN diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon@2x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon@2x.png deleted file mode 100644 index 728c48c142447463a7fb2436c5a36ae842af5e18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4590 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 diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone Pro App Icon-ipad@2x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone Pro App Icon-ipad@2x.png deleted file mode 100644 index c94ea173bf2d70f8016c31e073150acc853f15e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5073 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 h@tMH?ujS5f@arD5W_y<2{texRwgyU00>e5 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

T#kT|qD_WPl_Y#l#zluE-fs1r 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 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SampleApps/SPMTest/SPMTest/Base.lproj/Main.storyboard b/SampleApps/SPMTest/SPMTest/Base.lproj/Main.storyboard deleted file mode 100644 index 25a763858e..0000000000 --- a/SampleApps/SPMTest/SPMTest/Base.lproj/Main.storyboard +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SampleApps/SPMTest/SPMTest/Info.plist b/SampleApps/SPMTest/SPMTest/Info.plist deleted file mode 100644 index 2a6805b164..0000000000 --- a/SampleApps/SPMTest/SPMTest/Info.plist +++ /dev/null @@ -1,68 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - $(PRODUCT_BUNDLE_PACKAGE_TYPE) - CFBundleShortVersionString - 1.0 - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - LSRequiresIPhoneOS - - NSLocationWhenInUseUsageDescription - Location isn't used - UIApplicationSceneManifest - - UIApplicationSupportsMultipleScenes - - UISceneConfigurations - - UIWindowSceneSessionRoleApplication - - - UISceneConfigurationName - Default Configuration - UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate - UISceneStoryboardFile - Main - - - - - UIApplicationSupportsIndirectInputEvents - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/SampleApps/SPMTest/SPMTest/SceneDelegate.swift b/SampleApps/SPMTest/SPMTest/SceneDelegate.swift deleted file mode 100644 index d47e9706ea..0000000000 --- a/SampleApps/SPMTest/SPMTest/SceneDelegate.swift +++ /dev/null @@ -1,45 +0,0 @@ -import UIKit - -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - - var window: UIWindow? - - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. - // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. - // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). - guard let _ = (scene as? UIWindowScene) else { return } - } - - func sceneDidDisconnect(_ scene: UIScene) { - // Called as the scene is being released by the system. - // This occurs shortly after the scene enters the background, or when its session is discarded. - // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). - } - - func sceneDidBecomeActive(_ scene: UIScene) { - // Called when the scene has moved from an inactive state to an active state. - // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. - } - - func sceneWillResignActive(_ scene: UIScene) { - // Called when the scene will move from an active state to an inactive state. - // This may occur due to temporary interruptions (ex. an incoming phone call). - } - - func sceneWillEnterForeground(_ scene: UIScene) { - // Called as the scene transitions from the background to the foreground. - // Use this method to undo the changes made on entering the background. - } - - func sceneDidEnterBackground(_ scene: UIScene) { - // Called as the scene transitions from the foreground to the background. - // Use this method to save data, release shared resources, and store enough scene-specific state information - // to restore the scene back to its current state. - } - - -} - diff --git a/SampleApps/SPMTest/SPMTest/ViewController.swift b/SampleApps/SPMTest/SPMTest/ViewController.swift deleted file mode 100644 index e1eafe7ecb..0000000000 --- a/SampleApps/SPMTest/SPMTest/ViewController.swift +++ /dev/null @@ -1,32 +0,0 @@ -import UIKit -import BraintreeAmericanExpress -import BraintreeApplePay -import BraintreeCard -import BraintreeCore -import BraintreeDataCollector -import BraintreeLocalPayment -import BraintreePayPal -import BraintreePayPalMessaging -import BraintreeThreeDSecure -import BraintreeVenmo -import BraintreePayPalNativeCheckout -import BraintreeSEPADirectDebit - -class ViewController: UIViewController { - - override func viewDidLoad() { - let apiClient = BTAPIClient(authorization: "sandbox_9dbg82cq_dcpspy2brwdjr3qn")! - - let amexClient = BTAmericanExpressClient(apiClient: apiClient) - let applePayClient = BTApplePayClient(apiClient: apiClient) - let cardClient = BTCardClient(apiClient: apiClient) - let dataCollector = BTDataCollector(apiClient: apiClient) - let localPaymentClient = BTLocalPaymentClient(apiClient: apiClient) - let payPalClient = BTPayPalClient(apiClient: apiClient) - let payPalMessagingView = BTPayPalMessagingView(apiClient: apiClient) - let threeDSecureClient = BTThreeDSecureClient(apiClient: apiClient) - let venmoClient = BTVenmoClient(apiClient: apiClient) - let payPalNativeCheckoutClient = BTPayPalNativeCheckoutClient(apiClient: apiClient) - let sepaDirectDebitClient = BTSEPADirectDebitClient(apiClient: apiClient) - } -} From d7b7f59e0ee9596a899f4579f720b2ab3d65b725 Mon Sep 17 00:00:00 2001 From: braintreeps Date: Mon, 15 Jul 2024 18:01:41 +0000 Subject: [PATCH 5/8] Bump version to 6.23.0 --- Braintree.podspec | 2 +- CHANGELOG.md | 2 +- Demo/Application/Supporting Files/Braintree-Demo-Info.plist | 4 ++-- Sources/BraintreeCore/BTCoreConstants.swift | 2 +- Sources/BraintreeCore/Info.plist | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Braintree.podspec b/Braintree.podspec index 8e4209b13c..3f343e8649 100644 --- a/Braintree.podspec +++ b/Braintree.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "Braintree" - s.version = "6.22.0" + s.version = "6.23.0" s.summary = "Braintree iOS SDK: Helps you accept card and alternative payments in your iOS app." s.description = <<-DESC Braintree is a full-stack payments platform for developers diff --git a/CHANGELOG.md b/CHANGELOG.md index 27401cfa3d..ff75a3a217 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Braintree iOS SDK Release Notes -## unreleased +## 6.23.0 (2024-07-15) * BraintreeShopperInsights (BETA) * Add error when using an invalid authorization type * BraintreeCore diff --git a/Demo/Application/Supporting Files/Braintree-Demo-Info.plist b/Demo/Application/Supporting Files/Braintree-Demo-Info.plist index 24c9da5925..2ddcbf97ad 100644 --- a/Demo/Application/Supporting Files/Braintree-Demo-Info.plist +++ b/Demo/Application/Supporting Files/Braintree-Demo-Info.plist @@ -41,7 +41,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 6.22.0 + 6.23.0 CFBundleURLTypes @@ -56,7 +56,7 @@ CFBundleVersion - 6.22.0 + 6.23.0 LSApplicationQueriesSchemes com.braintreepayments.Demo.payments diff --git a/Sources/BraintreeCore/BTCoreConstants.swift b/Sources/BraintreeCore/BTCoreConstants.swift index 2af6082577..44a2407f68 100644 --- a/Sources/BraintreeCore/BTCoreConstants.swift +++ b/Sources/BraintreeCore/BTCoreConstants.swift @@ -5,7 +5,7 @@ import Foundation @objcMembers public class BTCoreConstants: NSObject { /// :nodoc: This property is exposed for internal Braintree use only. Do not use. It is not covered by Semantic Versioning and may change or be removed at any time. - public static var braintreeSDKVersion: String = "6.22.0" + public static var braintreeSDKVersion: String = "6.23.0" /// :nodoc: This property is exposed for internal Braintree use only. Do not use. It is not covered by Semantic Versioning and may change or be removed at any time. public static let callbackURLScheme: String = "sdk.ios.braintree" diff --git a/Sources/BraintreeCore/Info.plist b/Sources/BraintreeCore/Info.plist index 6c0cf3eaaa..3b1106b193 100644 --- a/Sources/BraintreeCore/Info.plist +++ b/Sources/BraintreeCore/Info.plist @@ -15,11 +15,11 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 6.22.0 + 6.23.0 CFBundleSignature ???? CFBundleVersion - 6.22.0 + 6.23.0 NSPrincipalClass From b0100df44e09b3c42ad8cfe06424344f14fb9c41 Mon Sep 17 00:00:00 2001 From: braintreeps Date: Mon, 15 Jul 2024 18:01:41 +0000 Subject: [PATCH 6/8] Revert "Remove SPMTest app to avoid Carthage timeout" This reverts commit 0b01a6191f9eadfbb7e76445409b6097d82bf069. --- .../SPMTest/SPMTest.xcodeproj/project.pbxproj | 502 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/SPMTest.xcscheme | 78 +++ SampleApps/SPMTest/SPMTest/AppDelegate.swift | 29 + .../AccentColor.colorset/Contents.json | 11 + ...20 - iPhone App Icon-ipad-spotlight@1x.png | Bin 0 -> 3422 bytes ... - iPhone App Icon-ipad-spotlight@2x-1.png | Bin 0 -> 3991 bytes ...20 - iPhone App Icon-ipad-spotlight@2x.png | Bin 0 -> 3991 bytes .../120 - iPhone App Icon-ipad@1x.png | Bin 0 -> 3936 bytes .../120 - iPhone App Icon-ipad@2x.png | Bin 0 -> 5205 bytes .../120 - iPhone App Icon@2x.png | Bin 0 -> 4590 bytes .../120 - iPhone Pro App Icon-ipad@2x.png | Bin 0 -> 5073 bytes .../AppIcon.appiconset/Contents.json | 106 ++++ .../AppIcon.appiconset/unused-1024-logo.png | Bin 0 -> 104035 bytes .../SPMTest/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../SPMTest/Base.lproj/Main.storyboard | 24 + SampleApps/SPMTest/SPMTest/Info.plist | 68 +++ .../SPMTest/SPMTest/SceneDelegate.swift | 45 ++ .../SPMTest/SPMTest/ViewController.swift | 32 ++ 21 files changed, 941 insertions(+) create mode 100644 SampleApps/SPMTest/SPMTest.xcodeproj/project.pbxproj create mode 100644 SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 SampleApps/SPMTest/SPMTest.xcodeproj/xcshareddata/xcschemes/SPMTest.xcscheme create mode 100644 SampleApps/SPMTest/SPMTest/AppDelegate.swift create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@1x.png create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x-1.png create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x.png create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad@1x.png create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad@2x.png create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon@2x.png create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone Pro App Icon-ipad@2x.png create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/unused-1024-logo.png create mode 100644 SampleApps/SPMTest/SPMTest/Assets.xcassets/Contents.json create mode 100644 SampleApps/SPMTest/SPMTest/Base.lproj/LaunchScreen.storyboard create mode 100644 SampleApps/SPMTest/SPMTest/Base.lproj/Main.storyboard create mode 100644 SampleApps/SPMTest/SPMTest/Info.plist create mode 100644 SampleApps/SPMTest/SPMTest/SceneDelegate.swift create mode 100644 SampleApps/SPMTest/SPMTest/ViewController.swift diff --git a/SampleApps/SPMTest/SPMTest.xcodeproj/project.pbxproj b/SampleApps/SPMTest/SPMTest.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..8fe73f7363 --- /dev/null +++ b/SampleApps/SPMTest/SPMTest.xcodeproj/project.pbxproj @@ -0,0 +1,502 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 45B2CA822C08D70E00FCCD4C /* BraintreePayPalMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = 45B2CA812C08D70E00FCCD4C /* BraintreePayPalMessaging */; }; + 80214E042551FB5A00695A6F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80214E032551FB5A00695A6F /* AppDelegate.swift */; }; + 80214E062551FB5A00695A6F /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80214E052551FB5A00695A6F /* SceneDelegate.swift */; }; + 80214E082551FB5A00695A6F /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80214E072551FB5A00695A6F /* ViewController.swift */; }; + 80214E0B2551FB5A00695A6F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 80214E092551FB5A00695A6F /* Main.storyboard */; }; + 80214E0D2551FB5C00695A6F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 80214E0C2551FB5C00695A6F /* Assets.xcassets */; }; + 80214E102551FB5C00695A6F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 80214E0E2551FB5C00695A6F /* LaunchScreen.storyboard */; }; + BE35FCDB2A1BD2EF008F0326 /* BraintreeLocalPayment in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCDA2A1BD2EF008F0326 /* BraintreeLocalPayment */; }; + BE35FCE22A1C0885008F0326 /* BraintreeAmericanExpress in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE12A1C0885008F0326 /* BraintreeAmericanExpress */; }; + BE35FCE42A1C0885008F0326 /* BraintreeApplePay in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE32A1C0885008F0326 /* BraintreeApplePay */; }; + BE35FCE62A1C0885008F0326 /* BraintreeCard in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE52A1C0885008F0326 /* BraintreeCard */; }; + BE35FCE82A1C0885008F0326 /* BraintreeCore in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE72A1C0885008F0326 /* BraintreeCore */; }; + BE35FCEA2A1C0885008F0326 /* BraintreeDataCollector in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCE92A1C0885008F0326 /* BraintreeDataCollector */; }; + BE35FCEC2A1C0885008F0326 /* BraintreeLocalPayment in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCEB2A1C0885008F0326 /* BraintreeLocalPayment */; }; + BE35FCEE2A1C0885008F0326 /* BraintreePayPal in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCED2A1C0885008F0326 /* BraintreePayPal */; }; + BE35FCF02A1C0885008F0326 /* BraintreePayPalNativeCheckout in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCEF2A1C0885008F0326 /* BraintreePayPalNativeCheckout */; }; + BE35FCF22A1C0885008F0326 /* BraintreeSEPADirectDebit in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCF12A1C0885008F0326 /* BraintreeSEPADirectDebit */; }; + BE35FCF42A1C0885008F0326 /* BraintreeThreeDSecure in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCF32A1C0885008F0326 /* BraintreeThreeDSecure */; }; + BE35FCF62A1C0885008F0326 /* BraintreeVenmo in Frameworks */ = {isa = PBXBuildFile; productRef = BE35FCF52A1C0885008F0326 /* BraintreeVenmo */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 42C1D7CC25C8B34C00C33708 /* CardinalMobile.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CardinalMobile.framework; path = Frameworks/CardinalMobile.framework; sourceTree = ""; }; + 80214E002551FB5A00695A6F /* SPMTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SPMTest.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 80214E032551FB5A00695A6F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 80214E052551FB5A00695A6F /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + 80214E072551FB5A00695A6F /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 80214E0A2551FB5A00695A6F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 80214E0C2551FB5C00695A6F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 80214E0F2551FB5C00695A6F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 80214E112551FB5C00695A6F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9C1FC8B927CED7DF00E6E14D /* braintree_ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = braintree_ios; path = ../..; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 80214DFD2551FB5A00695A6F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + BE35FCEC2A1C0885008F0326 /* BraintreeLocalPayment in Frameworks */, + BE35FCE82A1C0885008F0326 /* BraintreeCore in Frameworks */, + BE35FCEE2A1C0885008F0326 /* BraintreePayPal in Frameworks */, + BE35FCF62A1C0885008F0326 /* BraintreeVenmo in Frameworks */, + BE35FCE22A1C0885008F0326 /* BraintreeAmericanExpress in Frameworks */, + BE35FCDB2A1BD2EF008F0326 /* BraintreeLocalPayment in Frameworks */, + BE35FCE42A1C0885008F0326 /* BraintreeApplePay in Frameworks */, + BE35FCE62A1C0885008F0326 /* BraintreeCard in Frameworks */, + BE35FCF02A1C0885008F0326 /* BraintreePayPalNativeCheckout in Frameworks */, + BE35FCF42A1C0885008F0326 /* BraintreeThreeDSecure in Frameworks */, + BE35FCF22A1C0885008F0326 /* BraintreeSEPADirectDebit in Frameworks */, + BE35FCEA2A1C0885008F0326 /* BraintreeDataCollector in Frameworks */, + 45B2CA822C08D70E00FCCD4C /* BraintreePayPalMessaging in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 42C2D3002583D8CF00E525AE /* Frameworks */ = { + isa = PBXGroup; + children = ( + 42C1D7CC25C8B34C00C33708 /* CardinalMobile.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 80214DF72551FB5A00695A6F = { + isa = PBXGroup; + children = ( + 9C1FC8B827CED7DF00E6E14D /* Packages */, + 80214E022551FB5A00695A6F /* SPMTest */, + 80214E012551FB5A00695A6F /* Products */, + 42C2D3002583D8CF00E525AE /* Frameworks */, + ); + sourceTree = ""; + }; + 80214E012551FB5A00695A6F /* Products */ = { + isa = PBXGroup; + children = ( + 80214E002551FB5A00695A6F /* SPMTest.app */, + ); + name = Products; + sourceTree = ""; + }; + 80214E022551FB5A00695A6F /* SPMTest */ = { + isa = PBXGroup; + children = ( + 80214E032551FB5A00695A6F /* AppDelegate.swift */, + 80214E052551FB5A00695A6F /* SceneDelegate.swift */, + 80214E072551FB5A00695A6F /* ViewController.swift */, + 80214E092551FB5A00695A6F /* Main.storyboard */, + 80214E0C2551FB5C00695A6F /* Assets.xcassets */, + 80214E0E2551FB5C00695A6F /* LaunchScreen.storyboard */, + 80214E112551FB5C00695A6F /* Info.plist */, + ); + path = SPMTest; + sourceTree = ""; + }; + 9C1FC8B827CED7DF00E6E14D /* Packages */ = { + isa = PBXGroup; + children = ( + 9C1FC8B927CED7DF00E6E14D /* braintree_ios */, + ); + name = Packages; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 80214DFF2551FB5A00695A6F /* SPMTest */ = { + isa = PBXNativeTarget; + buildConfigurationList = 80214E142551FB5C00695A6F /* Build configuration list for PBXNativeTarget "SPMTest" */; + buildPhases = ( + 80214DFC2551FB5A00695A6F /* Sources */, + 80214DFD2551FB5A00695A6F /* Frameworks */, + 80214DFE2551FB5A00695A6F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SPMTest; + packageProductDependencies = ( + BE35FCDA2A1BD2EF008F0326 /* BraintreeLocalPayment */, + BE35FCE12A1C0885008F0326 /* BraintreeAmericanExpress */, + BE35FCE32A1C0885008F0326 /* BraintreeApplePay */, + BE35FCE52A1C0885008F0326 /* BraintreeCard */, + BE35FCE72A1C0885008F0326 /* BraintreeCore */, + BE35FCE92A1C0885008F0326 /* BraintreeDataCollector */, + BE35FCEB2A1C0885008F0326 /* BraintreeLocalPayment */, + BE35FCED2A1C0885008F0326 /* BraintreePayPal */, + BE35FCEF2A1C0885008F0326 /* BraintreePayPalNativeCheckout */, + BE35FCF12A1C0885008F0326 /* BraintreeSEPADirectDebit */, + BE35FCF32A1C0885008F0326 /* BraintreeThreeDSecure */, + BE35FCF52A1C0885008F0326 /* BraintreeVenmo */, + 45B2CA812C08D70E00FCCD4C /* BraintreePayPalMessaging */, + ); + productName = SPMTest; + productReference = 80214E002551FB5A00695A6F /* SPMTest.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 80214DF82551FB5A00695A6F /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1210; + LastUpgradeCheck = 1210; + TargetAttributes = { + 80214DFF2551FB5A00695A6F = { + CreatedOnToolsVersion = 12.1; + }; + }; + }; + buildConfigurationList = 80214DFB2551FB5A00695A6F /* Build configuration list for PBXProject "SPMTest" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 80214DF72551FB5A00695A6F; + packageReferences = ( + BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */, + ); + productRefGroup = 80214E012551FB5A00695A6F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 80214DFF2551FB5A00695A6F /* SPMTest */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 80214DFE2551FB5A00695A6F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 80214E102551FB5C00695A6F /* LaunchScreen.storyboard in Resources */, + 80214E0D2551FB5C00695A6F /* Assets.xcassets in Resources */, + 80214E0B2551FB5A00695A6F /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 80214DFC2551FB5A00695A6F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 80214E082551FB5A00695A6F /* ViewController.swift in Sources */, + 80214E042551FB5A00695A6F /* AppDelegate.swift in Sources */, + 80214E062551FB5A00695A6F /* SceneDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 80214E092551FB5A00695A6F /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 80214E0A2551FB5A00695A6F /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 80214E0E2551FB5C00695A6F /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 80214E0F2551FB5C00695A6F /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 80214E122551FB5C00695A6F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_BITCODE = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 80214E132551FB5C00695A6F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_BITCODE = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 80214E152551FB5C00695A6F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 20; + DEVELOPMENT_TEAM = 43253H4X22; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Frameworks", + ); + INFOPLIST_FILE = SPMTest/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.braintreepayments.SPMTest; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_WORKSPACE = YES; + }; + name = Debug; + }; + 80214E162551FB5C00695A6F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 20; + DEVELOPMENT_TEAM = 43253H4X22; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Frameworks", + ); + INFOPLIST_FILE = SPMTest/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.braintreepayments.SPMTest; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_WORKSPACE = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 80214DFB2551FB5A00695A6F /* Build configuration list for PBXProject "SPMTest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 80214E122551FB5C00695A6F /* Debug */, + 80214E132551FB5C00695A6F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 80214E142551FB5C00695A6F /* Build configuration list for PBXNativeTarget "SPMTest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 80214E152551FB5C00695A6F /* Debug */, + 80214E162551FB5C00695A6F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/braintree/braintree_ios"; + requirement = { + branch = main; + kind = branch; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 45B2CA812C08D70E00FCCD4C /* BraintreePayPalMessaging */ = { + isa = XCSwiftPackageProductDependency; + productName = BraintreePayPalMessaging; + }; + BE35FCDA2A1BD2EF008F0326 /* BraintreeLocalPayment */ = { + isa = XCSwiftPackageProductDependency; + productName = BraintreeLocalPayment; + }; + BE35FCE12A1C0885008F0326 /* BraintreeAmericanExpress */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreeAmericanExpress; + }; + BE35FCE32A1C0885008F0326 /* BraintreeApplePay */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreeApplePay; + }; + BE35FCE52A1C0885008F0326 /* BraintreeCard */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreeCard; + }; + BE35FCE72A1C0885008F0326 /* BraintreeCore */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreeCore; + }; + BE35FCE92A1C0885008F0326 /* BraintreeDataCollector */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreeDataCollector; + }; + BE35FCEB2A1C0885008F0326 /* BraintreeLocalPayment */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreeLocalPayment; + }; + BE35FCED2A1C0885008F0326 /* BraintreePayPal */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreePayPal; + }; + BE35FCEF2A1C0885008F0326 /* BraintreePayPalNativeCheckout */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreePayPalNativeCheckout; + }; + BE35FCF12A1C0885008F0326 /* BraintreeSEPADirectDebit */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreeSEPADirectDebit; + }; + BE35FCF32A1C0885008F0326 /* BraintreeThreeDSecure */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreeThreeDSecure; + }; + BE35FCF52A1C0885008F0326 /* BraintreeVenmo */ = { + isa = XCSwiftPackageProductDependency; + package = BE35FCE02A1C0885008F0326 /* XCRemoteSwiftPackageReference "braintree_ios" */; + productName = BraintreeVenmo; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 80214DF82551FB5A00695A6F /* Project object */; +} diff --git a/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000..919434a625 --- /dev/null +++ b/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000000..18d981003d --- /dev/null +++ b/SampleApps/SPMTest/SPMTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/SampleApps/SPMTest/SPMTest.xcodeproj/xcshareddata/xcschemes/SPMTest.xcscheme b/SampleApps/SPMTest/SPMTest.xcodeproj/xcshareddata/xcschemes/SPMTest.xcscheme new file mode 100644 index 0000000000..38ec8a362a --- /dev/null +++ b/SampleApps/SPMTest/SPMTest.xcodeproj/xcshareddata/xcschemes/SPMTest.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleApps/SPMTest/SPMTest/AppDelegate.swift b/SampleApps/SPMTest/SPMTest/AppDelegate.swift new file mode 100644 index 0000000000..f7f60fd743 --- /dev/null +++ b/SampleApps/SPMTest/SPMTest/AppDelegate.swift @@ -0,0 +1,29 @@ +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + // MARK: UISceneSession Lifecycle + + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { + // Called when a new scene session is being created. + // Use this method to select a configuration to create the new scene with. + return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } + + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + // Called when the user discards a scene session. + // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. + // Use this method to release any resources that were specific to the discarded scenes, as they will not return. + } + + +} + diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AccentColor.colorset/Contents.json b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000000..eb87897008 --- /dev/null +++ b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@1x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..3d059cba61790bb3b8a924e5f37e1f8ab2450bf1 GIT binary patch literal 3422 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x-1.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f3bfe7c0242dcecc1ab785ffc1438a674cfd5f2c GIT binary patch literal 3991 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 literal 0 HcmV?d00001 diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad-spotlight@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f3bfe7c0242dcecc1ab785ffc1438a674cfd5f2c GIT binary patch literal 3991 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 literal 0 HcmV?d00001 diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad@1x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon-ipad@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c47b7752ebded78d2f77e4baf9a3f5ff65fcb659 GIT binary patch literal 3936 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 U^hc}zdlv$9wH|3UsN2W>2V!U9!2kdN literal 0 HcmV?d00001 diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon@2x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone App Icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..728c48c142447463a7fb2436c5a36ae842af5e18 GIT binary patch literal 4590 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 literal 0 HcmV?d00001 diff --git a/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone Pro App Icon-ipad@2x.png b/SampleApps/SPMTest/SPMTest/Assets.xcassets/AppIcon.appiconset/120 - iPhone Pro App Icon-ipad@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c94ea173bf2d70f8016c31e073150acc853f15e1 GIT binary patch literal 5073 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 h@tMH?ujS5f@arD5W_y<2{texRwgyU00>e5 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

T#kT|qD_WPl_Y#l#zluE-fs1r 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 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleApps/SPMTest/SPMTest/Base.lproj/Main.storyboard b/SampleApps/SPMTest/SPMTest/Base.lproj/Main.storyboard new file mode 100644 index 0000000000..25a763858e --- /dev/null +++ b/SampleApps/SPMTest/SPMTest/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SampleApps/SPMTest/SPMTest/Info.plist b/SampleApps/SPMTest/SPMTest/Info.plist new file mode 100644 index 0000000000..2a6805b164 --- /dev/null +++ b/SampleApps/SPMTest/SPMTest/Info.plist @@ -0,0 +1,68 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + LSRequiresIPhoneOS + + NSLocationWhenInUseUsageDescription + Location isn't used + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/SampleApps/SPMTest/SPMTest/SceneDelegate.swift b/SampleApps/SPMTest/SPMTest/SceneDelegate.swift new file mode 100644 index 0000000000..d47e9706ea --- /dev/null +++ b/SampleApps/SPMTest/SPMTest/SceneDelegate.swift @@ -0,0 +1,45 @@ +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). + guard let _ = (scene as? UIWindowScene) else { return } + } + + func sceneDidDisconnect(_ scene: UIScene) { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). + } + + func sceneDidBecomeActive(_ scene: UIScene) { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + func sceneWillResignActive(_ scene: UIScene) { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + func sceneWillEnterForeground(_ scene: UIScene) { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + func sceneDidEnterBackground(_ scene: UIScene) { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + + +} + diff --git a/SampleApps/SPMTest/SPMTest/ViewController.swift b/SampleApps/SPMTest/SPMTest/ViewController.swift new file mode 100644 index 0000000000..e1eafe7ecb --- /dev/null +++ b/SampleApps/SPMTest/SPMTest/ViewController.swift @@ -0,0 +1,32 @@ +import UIKit +import BraintreeAmericanExpress +import BraintreeApplePay +import BraintreeCard +import BraintreeCore +import BraintreeDataCollector +import BraintreeLocalPayment +import BraintreePayPal +import BraintreePayPalMessaging +import BraintreeThreeDSecure +import BraintreeVenmo +import BraintreePayPalNativeCheckout +import BraintreeSEPADirectDebit + +class ViewController: UIViewController { + + override func viewDidLoad() { + let apiClient = BTAPIClient(authorization: "sandbox_9dbg82cq_dcpspy2brwdjr3qn")! + + let amexClient = BTAmericanExpressClient(apiClient: apiClient) + let applePayClient = BTApplePayClient(apiClient: apiClient) + let cardClient = BTCardClient(apiClient: apiClient) + let dataCollector = BTDataCollector(apiClient: apiClient) + let localPaymentClient = BTLocalPaymentClient(apiClient: apiClient) + let payPalClient = BTPayPalClient(apiClient: apiClient) + let payPalMessagingView = BTPayPalMessagingView(apiClient: apiClient) + let threeDSecureClient = BTThreeDSecureClient(apiClient: apiClient) + let venmoClient = BTVenmoClient(apiClient: apiClient) + let payPalNativeCheckoutClient = BTPayPalNativeCheckoutClient(apiClient: apiClient) + let sepaDirectDebitClient = BTSEPADirectDebitClient(apiClient: apiClient) + } +} From 006ec11c4388c1defbc183edd5307bcad330e8f0 Mon Sep 17 00:00:00 2001 From: Jax DesMarais-Leder Date: Mon, 15 Jul 2024 14:57:55 -0500 Subject: [PATCH 7/8] [OPEN DEV] Add Swiftlint to `BraintreeCore` (#1364) * Add swiftlint.yml to GitHub workflows * Add .swiftlint.yml file with ruleset - this ruleset is the same as PPCP * Add build script for swiftlint * Address all swiftlint violations in BraintreeCore --- .github/workflows/swiftlint.yml | 18 +++ .swiftlint.yml | 106 ++++++++++++++++++ Braintree.xcodeproj/project.pbxproj | 21 ++++ DEVELOPMENT.md | 10 ++ README.md | 7 +- .../Analytics/BTAnalyticsService.swift | 8 +- .../Analytics/FPTIBatchData.swift | 11 +- .../Authorization/BTClientToken.swift | 8 +- .../Authorization/BTClientTokenError.swift | 2 + .../Authorization/TokenizationKey.swift | 6 +- .../Authorization/TokenizationKeyError.swift | 1 - Sources/BraintreeCore/BTAPIClient.swift | 26 ++++- .../BraintreeCore/BTAppContextSwitcher.swift | 12 +- Sources/BraintreeCore/BTCoreConstants.swift | 2 + .../BraintreeCore/BTGraphQLErrorTree.swift | 2 +- Sources/BraintreeCore/BTGraphQLHTTP.swift | 19 +++- .../BTGraphQLMultiErrorNode.swift | 2 +- .../BTGraphQLSingleErrorNode.swift | 2 +- Sources/BraintreeCore/BTHTTP.swift | 83 +++++++++----- Sources/BraintreeCore/BTJSON.swift | 7 +- Sources/BraintreeCore/BTJSONError.swift | 4 +- Sources/BraintreeCore/BTLogLevel.swift | 4 +- .../BTPaymentMethodNonceParser.swift | 2 + Sources/BraintreeCore/BTPostalAddress.swift | 15 +-- Sources/BraintreeCore/BTURLUtils.swift | 11 +- .../BTWebAuthenticationSession.swift | 10 +- .../BraintreeCore/ConfigurationLoader.swift | 2 +- .../UIApplication+URLOpener.swift | 2 +- 28 files changed, 315 insertions(+), 88 deletions(-) create mode 100644 .github/workflows/swiftlint.yml create mode 100644 .swiftlint.yml diff --git a/.github/workflows/swiftlint.yml b/.github/workflows/swiftlint.yml new file mode 100644 index 0000000000..81504daa1e --- /dev/null +++ b/.github/workflows/swiftlint.yml @@ -0,0 +1,18 @@ +name: Lint +on: [pull_request] +concurrency: + group: lint-${{ github.event.number }} + cancel-in-progress: true +jobs: + swiftlint: + name: SwiftLint + runs-on: macOS-14-xlarge + steps: + - name: Check out repository + uses: actions/checkout@v3 + - name: Use Xcode 15.0.1 + run: sudo xcode-select -switch /Applications/Xcode_15.0.1.app + - name: Install SwiftLint + run: brew install swiftlint + - name: Run SwiftLint + run: swiftlint --strict diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 0000000000..998ab2c849 --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,106 @@ +# Reference: https://github.com/realm/SwiftLint +# Required Swiftlint Version +# swiftlint_version: 0.55.1 + +# Paths to include in lint +included: + - Sources/BraintreeCore + +excluded: + - Sources/BraintreeCore/BTAPIPinnedCertificates.swift + +disabled_rules: + - todo + - type_name # tests will have the format _Tests + - xctfail_message + - blanket_disable_command + - non_optional_string_data_conversion + - attributes + - multiline_function_chains + +opt_in_rules: + - array_init + - closure_end_indentation + - closure_spacing + - collection_alignment + - colon # promote to error + - convenience_type + - discouraged_object_literal + - empty_collection_literal + - empty_count + - empty_string + - enum_case_associated_values_count + - fatal_error_message + - first_where + - force_unwrapping + - implicitly_unwrapped_optional + - indentation_width + - last_where + - legacy_random + - literal_expression_end_indentation + - multiline_arguments + - multiline_function_chains + - multiline_literal_brackets + - multiline_parameters + - multiline_parameters_brackets + - operator_usage_whitespace + - overridden_super_call + - pattern_matching_keywords + - prefer_self_type_over_type_of_self + - redundant_nil_coalescing + - redundant_type_annotation + - strict_fileprivate + - toggle_bool + - trailing_closure + - unneeded_parentheses_in_closure_argument + - vertical_whitespace_closing_braces + - yoda_condition + +custom_rules: + array_constructor: + name: "Array/Dictionary initializer" + regex: '[let,var] .+ = (\[.+\]\(\))' + capture_group: 1 + message: "Use explicit type annotation when initializing empty arrays and dictionaries" + severity: warning + space_after_main_type: + name: "No space after main type" + regex: '(class|struct|extension)((?-s)\s.*\{$\n)(?!^\s*$)' + message: "Empty line required after main declarations" + severity: warning + +force_cast: warning +force_try: warning +function_body_length: + warning: 60 + +legacy_hashing: error + +identifier_name: + excluded: + - i + - id + - x + - y + - z + +indentation_width: + indentation_width: 4 + +line_length: + warning: 140 + ignores_urls: true + ignores_comments: true + +multiline_arguments: + first_argument_location: next_line + only_enforce_after_first_closure_on_first_line: true + +private_over_fileprivate: + validate_extensions: true + +trailing_whitespace: + ignores_empty_lines: true + +vertical_whitespace: + max_empty_lines: 2 diff --git a/Braintree.xcodeproj/project.pbxproj b/Braintree.xcodeproj/project.pbxproj index 28541553bd..7ea3a7cca2 100644 --- a/Braintree.xcodeproj/project.pbxproj +++ b/Braintree.xcodeproj/project.pbxproj @@ -2237,6 +2237,7 @@ 570B9385285397520041BAFE /* Frameworks */, 570B9386285397520041BAFE /* Headers */, 570B93A8285397520041BAFE /* Resources */, + BE676C532C417B8F000A6579 /* Swiftlint */, ); buildRules = ( ); @@ -3154,6 +3155,26 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + BE676C532C417B8F000A6579 /* Swiftlint */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = Swiftlint; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/bin/sh\n\nif test -d \"/opt/homebrew/bin/\"; then\n PATH=\"/opt/homebrew/bin/:${PATH}\"\nfi\n\nexport PATH\n\nif which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + showEnvVarsInLog = 0; + }; CDAB67F3BC5BE564FCFFD6BC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index e0b5b80967..210b00c758 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -6,6 +6,16 @@ This document outlines development practices that we follow while developing thi The included demo app utilizes a [sandbox sample merchant server](https://braintree-sample-merchant.herokuapp.com) hosted on Heroku. +## SwiftLint + +Ensure that you have [SwiftLint](https://github.com/realm/SwiftLint) installed as we utilize it within our project. + +To install via [Homebrew](https://brew.sh/) run: +``` +brew install swiftlint +``` +Our Xcode workspace has a `Run Phase` which integrates in `SwiftLint` so the only prerequisite is installing via `Homebrew`. + ## Tests Each module has a corresponding unit test target. These can be run individually, or all at once via the `UnitTests` scheme. diff --git a/README.md b/README.md index 47004ef0d3..0b983dc76e 100644 --- a/README.md +++ b/README.md @@ -84,11 +84,12 @@ Versions 4.9.6 and below use outdated SSL certificates and are unsupported. ## Demo +1. Our Xcode project uses SwiftLint. To ensure you have it installed see [DEVELOPMENT.md](https://github.com/braintree/braintree_ios/blob/main/DEVELOPMENT.md#swiftlint) 1. Run `pod install` * There is a known M1 mac issue with CocoaPods. See [this solution](https://github.com/CocoaPods/CocoaPods/issues/10220#issuecomment-730963835) to resolve `ffi` dependency issues. -2. Resolve the Swift Package Manager packages if needed: `File` > `Packages` > `Resolve Package Versions` or by running `swift package resolve` in Terminal -3. Open `Braintree.xcworkspace` in Xcode -4. Select the `Demo` scheme, and then run +1. Resolve the Swift Package Manager packages if needed: `File` > `Packages` > `Resolve Package Versions` or by running `swift package resolve` in Terminal +1. Open `Braintree.xcworkspace` in Xcode +1. Select the `Demo` scheme, and then run Xcode 15.0+ is required to run the demo app. diff --git a/Sources/BraintreeCore/Analytics/BTAnalyticsService.swift b/Sources/BraintreeCore/Analytics/BTAnalyticsService.swift index f92c0e3e61..b73916eb98 100644 --- a/Sources/BraintreeCore/Analytics/BTAnalyticsService.swift +++ b/Sources/BraintreeCore/Analytics/BTAnalyticsService.swift @@ -4,8 +4,10 @@ class BTAnalyticsService: Equatable { // MARK: - Internal Properties + // swiftlint:disable force_unwrapping /// The FPTI URL to post all analytic events. static let url = URL(string: "https://api.paypal.com")! + // swiftlint:enable force_unwrapping /// The HTTP client for communication with the analytics service endpoint. Exposed for testing. var http: BTHTTP? @@ -131,7 +133,11 @@ class BTAnalyticsService: Equatable { if await !BTAnalyticsService.events.isEmpty { do { let configuration = try await apiClient.fetchConfiguration() - let postParameters = await createAnalyticsEvent(config: configuration, sessionID: apiClient.metadata.sessionID, events: Self.events.allValues) + let postParameters = await createAnalyticsEvent( + config: configuration, + sessionID: apiClient.metadata.sessionID, + events: Self.events.allValues + ) http?.post("v1/tracking/batch/events", parameters: postParameters) { _, _, _ in } await Self.events.removeAll() } catch { diff --git a/Sources/BraintreeCore/Analytics/FPTIBatchData.swift b/Sources/BraintreeCore/Analytics/FPTIBatchData.swift index f79f471f0b..0083e3380c 100644 --- a/Sources/BraintreeCore/Analytics/FPTIBatchData.swift +++ b/Sources/BraintreeCore/Analytics/FPTIBatchData.swift @@ -1,15 +1,18 @@ import UIKit +// swiftlint:disable nesting /// The POST body for a batch upload of FPTI events struct FPTIBatchData: Codable { let events: [EventsContainer] // Single-element "events" array required by FPTI formatting init(metadata: Metadata, events fptiEvents: [Event]?) { - self.events = [EventsContainer( - metadata: metadata, - fptiEvents: fptiEvents ?? [] - )] + self.events = [ + EventsContainer( + metadata: metadata, + fptiEvents: fptiEvents ?? [] + ) + ] } struct EventsContainer: Codable { diff --git a/Sources/BraintreeCore/Authorization/BTClientToken.swift b/Sources/BraintreeCore/Authorization/BTClientToken.swift index c88a0317ba..061ae0539c 100644 --- a/Sources/BraintreeCore/Authorization/BTClientToken.swift +++ b/Sources/BraintreeCore/Authorization/BTClientToken.swift @@ -3,7 +3,7 @@ import Foundation /// An authorization string used to initialize the Braintree SDK @_documentation(visibility: private) @objcMembers public class BTClientToken: NSObject, NSCoding, NSCopying, ClientAuthorization { - + // NEXT_MAJOR_VERSION (v7): properties exposed for Objective-C interoperability + Drop-in access. // Once the entire SDK is in Swift, determine if we want public properties to be internal and // what we can make internal without breaking the Drop-in. @@ -38,8 +38,7 @@ import Foundation // Client token must be decoded first because the other values are retrieved from it self.json = try Self.decodeClientToken(clientToken) - guard let authorizationFingerprint = json["authorizationFingerprint"].asString(), - !authorizationFingerprint.isEmpty else { + guard let authorizationFingerprint = json["authorizationFingerprint"].asString(), !authorizationFingerprint.isEmpty else { throw BTClientTokenError.invalidAuthorizationFingerprint } @@ -113,8 +112,7 @@ import Foundation // MARK: - NSObject override public override func isEqual(_ object: Any?) -> Bool { - guard object is BTClientToken, - let otherToken = object as? BTClientToken else { + guard object is BTClientToken, let otherToken = object as? BTClientToken else { return false } diff --git a/Sources/BraintreeCore/Authorization/BTClientTokenError.swift b/Sources/BraintreeCore/Authorization/BTClientTokenError.swift index 4920c76f2d..3e73ffbf1d 100644 --- a/Sources/BraintreeCore/Authorization/BTClientTokenError.swift +++ b/Sources/BraintreeCore/Authorization/BTClientTokenError.swift @@ -37,6 +37,7 @@ public enum BTClientTokenError: Error, CustomNSError, LocalizedError, Equatable } } + // swiftlint:disable line_length public var errorDescription: String? { switch self { case .invalidAuthorizationFingerprint: @@ -51,4 +52,5 @@ public enum BTClientTokenError: Error, CustomNSError, LocalizedError, Equatable return "Failed to decode client token. \(description)" } } + // swiftlint:enable line_length } diff --git a/Sources/BraintreeCore/Authorization/TokenizationKey.swift b/Sources/BraintreeCore/Authorization/TokenizationKey.swift index 5cf6d03034..e291045b47 100644 --- a/Sources/BraintreeCore/Authorization/TokenizationKey.swift +++ b/Sources/BraintreeCore/Authorization/TokenizationKey.swift @@ -27,10 +27,10 @@ class TokenizationKey: ClientAuthorization { guard tokenizationKey.range(of: pattern, options: .regularExpression) != nil else { return nil } let tokenizationKeyParts = tokenizationKey.split(separator: "_", maxSplits: 3) - let environment: String = String(tokenizationKeyParts[0]) - let merchantID: String = String(tokenizationKeyParts[2]) + let environment = String(tokenizationKeyParts[0]) + let merchantID = String(tokenizationKeyParts[2]) - var components: URLComponents = URLComponents() + var components = URLComponents() components.scheme = environment == "development" ? "http" : "https" guard let host = host(for: environment) else { return nil } diff --git a/Sources/BraintreeCore/Authorization/TokenizationKeyError.swift b/Sources/BraintreeCore/Authorization/TokenizationKeyError.swift index f24780889e..44d9c35e19 100644 --- a/Sources/BraintreeCore/Authorization/TokenizationKeyError.swift +++ b/Sources/BraintreeCore/Authorization/TokenizationKeyError.swift @@ -21,4 +21,3 @@ public enum TokenizationKeyError: Int, Error, CustomNSError, LocalizedError, Equ } } } - diff --git a/Sources/BraintreeCore/BTAPIClient.swift b/Sources/BraintreeCore/BTAPIClient.swift index e567812921..be507bec08 100644 --- a/Sources/BraintreeCore/BTAPIClient.swift +++ b/Sources/BraintreeCore/BTAPIClient.swift @@ -1,5 +1,6 @@ import Foundation +// swiftlint:disable type_body_length file_length /// This class acts as the entry point for accessing the Braintree APIs via common HTTP methods performed on API endpoints. /// - Note: It also manages authentication via tokenization key and provides access to a merchant's gateway configuration. @objcMembers public class BTAPIClient: NSObject, BTHTTPNetworkTiming { @@ -46,7 +47,7 @@ import Foundation switch authorizationType { case .tokenizationKey: do { - self.authorization = try TokenizationKey(authorization) + self.authorization = try TokenizationKey(authorization) } catch { return nil } @@ -68,7 +69,7 @@ import Foundation http?.networkTimingDelegate = self // Kickoff the background request to fetch the config - fetchOrReturnRemoteConfiguration { configuration, error in + fetchOrReturnRemoteConfiguration { _, _ in // No-op } } @@ -148,7 +149,7 @@ import Foundation "session_id": metadata.sessionID ] - get("v1/payment_methods", parameters: parameters) { body, response, error in + get("v1/payment_methods", parameters: parameters) { body, _, error in if let error { completion(nil, error) return @@ -158,7 +159,10 @@ import Foundation body?["paymentMethods"].asArray()?.forEach { paymentInfo in let type: String? = paymentInfo["type"].asString() - let paymentMethodNonce: BTPaymentMethodNonce? = BTPaymentMethodNonceParser.shared.parseJSON(paymentInfo, withParsingBlockForType: type) + let paymentMethodNonce: BTPaymentMethodNonce? = BTPaymentMethodNonceParser.shared.parseJSON( + paymentInfo, + withParsingBlockForType: type + ) if let paymentMethodNonce { paymentMethodNonces.append(paymentMethodNonce) @@ -269,7 +273,13 @@ import Foundation } let postParameters = BTAPIRequest(requestBody: parameters, metadata: metadata, httpType: httpType) - http(for: httpType)?.post(path, configuration: configuration, parameters: postParameters, headers: headers, completion: completion) + http(for: httpType)?.post( + path, + configuration: configuration, + parameters: postParameters, + headers: headers, + completion: completion + ) } } @@ -339,7 +349,11 @@ import Foundation let pattern: String = "([a-zA-Z0-9]+)_[a-zA-Z0-9]+_([a-zA-Z0-9_]+)" guard let regularExpression = try? NSRegularExpression(pattern: pattern) else { return nil } - let tokenizationKeyMatch: NSTextCheckingResult? = regularExpression.firstMatch(in: authorization, options: [], range: NSRange(location: 0, length: authorization.count)) + let tokenizationKeyMatch: NSTextCheckingResult? = regularExpression.firstMatch( + in: authorization, + options: [], + range: NSRange(location: 0, length: authorization.count) + ) return tokenizationKeyMatch != nil ? .tokenizationKey : .clientToken } diff --git a/Sources/BraintreeCore/BTAppContextSwitcher.swift b/Sources/BraintreeCore/BTAppContextSwitcher.swift index 913665c4b4..db875e268d 100644 --- a/Sources/BraintreeCore/BTAppContextSwitcher.swift +++ b/Sources/BraintreeCore/BTAppContextSwitcher.swift @@ -18,8 +18,8 @@ import UIKit // MARK: - Private Properties - private var appContextSwitchClients = [BTAppContextSwitchClient.Type]() - + private var appContextSwitchClients: [BTAppContextSwitchClient.Type] = [] + // MARK: - Public Methods /// Determine whether the return URL can be handled. @@ -35,11 +35,9 @@ import UIKit /// - Returns: `true` when the SDK has handled the URL successfully @objc(handleOpenURL:) @discardableResult public func handleOpen(_ url: URL) -> Bool { - for appContextSwitchClient in appContextSwitchClients { - if appContextSwitchClient.canHandleReturnURL(url) { - appContextSwitchClient.handleReturnURL(url) - return true - } + for appContextSwitchClient in appContextSwitchClients where appContextSwitchClient.canHandleReturnURL(url) { + appContextSwitchClient.handleReturnURL(url) + return true } return false } diff --git a/Sources/BraintreeCore/BTCoreConstants.swift b/Sources/BraintreeCore/BTCoreConstants.swift index 44a2407f68..5800160166 100644 --- a/Sources/BraintreeCore/BTCoreConstants.swift +++ b/Sources/BraintreeCore/BTCoreConstants.swift @@ -20,9 +20,11 @@ import Foundation static let graphQLVersion: String = "2018-03-06" + // swiftlint:disable force_unwrapping static let payPalProductionURL = URL(string: "https://api.paypal.com")! static let payPalSandboxURL = URL(string: "https://api.sandbox.paypal.com")! + // swiftlint:enable force_unwrapping // MARK: - BTHTTPError Constants diff --git a/Sources/BraintreeCore/BTGraphQLErrorTree.swift b/Sources/BraintreeCore/BTGraphQLErrorTree.swift index f31d8dc6bf..fa290fb4c1 100644 --- a/Sources/BraintreeCore/BTGraphQLErrorTree.swift +++ b/Sources/BraintreeCore/BTGraphQLErrorTree.swift @@ -3,7 +3,7 @@ import Foundation class BTGraphQLErrorTree { let message: String - let rootNode: BTGraphQLMultiErrorNode = BTGraphQLMultiErrorNode() + let rootNode = BTGraphQLMultiErrorNode() init(message: String) { self.message = message diff --git a/Sources/BraintreeCore/BTGraphQLHTTP.swift b/Sources/BraintreeCore/BTGraphQLHTTP.swift index 7d74b6bdf1..1285efa5ee 100644 --- a/Sources/BraintreeCore/BTGraphQLHTTP.swift +++ b/Sources/BraintreeCore/BTGraphQLHTTP.swift @@ -6,15 +6,26 @@ class BTGraphQLHTTP: BTHTTP { // MARK: - Properties - private let exceptionName: NSExceptionName = NSExceptionName("") + private let exceptionName = NSExceptionName("") // MARK: - Overrides - override func get(_ path: String, configuration: BTConfiguration? = nil, parameters: Encodable? = nil, completion: @escaping RequestCompletion) { + override func get( + _ path: String, + configuration: BTConfiguration? = nil, + parameters: Encodable? = nil, + completion: @escaping RequestCompletion + ) { NSException(name: exceptionName, reason: "GET is unsupported").raise() } - override func post(_ path: String, configuration: BTConfiguration? = nil, parameters: [String: Any]? = nil, headers: [String: String]? = nil, completion: @escaping RequestCompletion) { + override func post( + _ path: String, + configuration: BTConfiguration? = nil, + parameters: [String: Any]? = nil, + headers: [String: String]? = nil, + completion: @escaping RequestCompletion + ) { httpRequest(method: "POST", configuration: configuration, parameters: parameters, completion: completion) } @@ -103,7 +114,7 @@ class BTGraphQLHTTP: BTHTTP { let body = BTJSON(value: json) // Success case - if let _ = body.asDictionary(), body["errors"].asArray() == nil { + if body.asDictionary() != nil, body["errors"].asArray() == nil { callCompletionAsync(with: completion, body: body, response: httpResponse, error: nil) return } diff --git a/Sources/BraintreeCore/BTGraphQLMultiErrorNode.swift b/Sources/BraintreeCore/BTGraphQLMultiErrorNode.swift index 645439231a..4e7d0ea11b 100644 --- a/Sources/BraintreeCore/BTGraphQLMultiErrorNode.swift +++ b/Sources/BraintreeCore/BTGraphQLMultiErrorNode.swift @@ -43,7 +43,7 @@ class BTGraphQLMultiErrorNode: BTGraphQLErrorNode { return result } - func toDictionary() -> [String : Any] { + func toDictionary() -> [String: Any] { var result: [String: Any] = ["field": field] result["fieldErrors"] = mapChildrenInOrder { $0.toDictionary() } return result diff --git a/Sources/BraintreeCore/BTGraphQLSingleErrorNode.swift b/Sources/BraintreeCore/BTGraphQLSingleErrorNode.swift index ef49e9d2df..00e054e93f 100644 --- a/Sources/BraintreeCore/BTGraphQLSingleErrorNode.swift +++ b/Sources/BraintreeCore/BTGraphQLSingleErrorNode.swift @@ -12,7 +12,7 @@ class BTGraphQLSingleErrorNode: BTGraphQLErrorNode { self.code = code } - func toDictionary() -> [String : Any] { + func toDictionary() -> [String: Any] { var result = ["field": field, "message": message] if let code = code { result["code"] = code diff --git a/Sources/BraintreeCore/BTHTTP.swift b/Sources/BraintreeCore/BTHTTP.swift index 1cc046507e..e67b33e256 100644 --- a/Sources/BraintreeCore/BTHTTP.swift +++ b/Sources/BraintreeCore/BTHTTP.swift @@ -1,6 +1,7 @@ import Foundation import Security +// swiftlint:disable type_body_length file_length /// Performs HTTP methods on the Braintree Client API class BTHTTP: NSObject, URLSessionTaskDelegate { @@ -12,7 +13,7 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { let pinnedCertificates: [Data] = BTAPIPinnedCertificates.trustedCertificates() /// DispatchQueue on which asynchronous code will be executed. Defaults to `DispatchQueue.main`. - var dispatchQueue: DispatchQueue = DispatchQueue.main + var dispatchQueue = DispatchQueue.main /// A URL set to override the URLs derived from the ClientAuthorization or BTConfiguration response let customBaseURL: URL? @@ -23,10 +24,10 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { /// Session exposed for testing lazy var session: URLSession = { - let configuration: URLSessionConfiguration = URLSessionConfiguration.ephemeral + let configuration = URLSessionConfiguration.ephemeral configuration.httpAdditionalHeaders = defaultHeaders - let delegateQueue: OperationQueue = OperationQueue() + let delegateQueue = OperationQueue() delegateQueue.name = "com.braintreepayments.BTHTTP" return URLSession(configuration: configuration, delegate: self, delegateQueue: delegateQueue) @@ -76,11 +77,30 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { } // TODO: - Remove when all POST bodies use Codable, instead of BTJSON/raw dictionaries - func post(_ path: String, configuration: BTConfiguration? = nil, parameters: [String: Any]? = nil, headers: [String: String]? = nil, completion: @escaping RequestCompletion) { - httpRequest(method: "POST", path: path, configuration: configuration, parameters: parameters, headers: headers, completion: completion) + func post( + _ path: String, + configuration: BTConfiguration? = nil, + parameters: [String: Any]? = nil, + headers: [String: String]? = nil, + completion: @escaping RequestCompletion + ) { + httpRequest( + method: "POST", + path: path, + configuration: configuration, + parameters: parameters, + headers: headers, + completion: completion + ) } - func post(_ path: String, configuration: BTConfiguration? = nil, parameters: Encodable, headers: [String: String]? = nil, completion: @escaping RequestCompletion) { + func post( + _ path: String, + configuration: BTConfiguration? = nil, + parameters: Encodable, + headers: [String: String]? = nil, + completion: @escaping RequestCompletion + ) { do { let dict = try parameters.toDictionary() post(path, configuration: configuration, parameters: dict, headers: headers, completion: completion) @@ -100,8 +120,14 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { completion: RequestCompletion? ) { do { - let request = try createRequest(method: method, path: path, configuration: configuration, parameters: parameters, headers: headers) - + let request = try createRequest( + method: method, + path: path, + configuration: configuration, + parameters: parameters, + headers: headers + ) + self.session.dataTask(with: request) { [weak self] data, response, error in guard let self else { completion?(nil, nil, BTHTTPError.deallocated("BTHTTP")) @@ -139,7 +165,7 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { throw BTHTTPError.missingBaseURL(errorUserInfo) } - let mutableParameters: NSMutableDictionary = NSMutableDictionary(dictionary: parameters ?? [:]) + let mutableParameters = NSMutableDictionary(dictionary: parameters ?? [:]) // TODO: - Investigate for parity on JS and Android // JIRA - DTBTSDK-2682 @@ -161,7 +187,7 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { parameters: NSMutableDictionary? = [:], headers additionalHeaders: [String: String]? = nil ) throws -> URLRequest { - guard var components: URLComponents = URLComponents(string: url.absoluteString) else { + guard var components = URLComponents(string: url.absoluteString) else { throw BTHTTPError.urlStringInvalid } @@ -235,13 +261,12 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { return } - guard let response = response, - let httpResponse = createHTTPResponse(response: response) else { + guard let response, let httpResponse = createHTTPResponse(response: response) else { callCompletionAsync(with: completion, body: nil, response: nil, error: BTHTTPError.httpResponseInvalid) return } - guard let data = data else { + guard let data else { callCompletionAsync(with: completion, body: nil, response: nil, error: BTHTTPError.dataNotFound) return } @@ -301,7 +326,7 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { errorUserInfo[NSLocalizedFailureReasonErrorKey] = [HTTPURLResponse.localizedString(forStatusCode: response.statusCode)] - var json: BTJSON = BTJSON() + var json = BTJSON() if responseContentType == "application/json" { json = data.isEmpty ? BTJSON() : BTJSON(data: data) @@ -315,7 +340,7 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { } } - var error: BTHTTPError = BTHTTPError.clientError(errorUserInfo) + var error = BTHTTPError.clientError(errorUserInfo) if response.statusCode == 429 { errorUserInfo[NSLocalizedDescriptionKey] = "You are being rate-limited." @@ -337,11 +362,12 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { completion: @escaping (Error?) -> Void ) { let responseContentType: String? = response.mimeType - var errorUserInfo: [String : Any] = [BTCoreConstants.urlResponseKey: response] + var errorUserInfo: [String: Any] = [BTCoreConstants.urlResponseKey: response] if let contentType = responseContentType, contentType != "application/json" { // Return error for unsupported response type - errorUserInfo[NSLocalizedFailureReasonErrorKey] = "BTHTTP only supports application/json responses, received Content-Type: \(contentType)" + let message = "BTHTTP only supports application/json responses, received Content-Type: \(contentType)" + errorUserInfo[NSLocalizedFailureReasonErrorKey] = message completion(BTHTTPError.responseContentTypeNotAcceptable(errorUserInfo)) } else { completion(json.asError()) @@ -363,10 +389,16 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { // MARK: - URLSessionTaskDelegate conformance - func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + func urlSession( + _ session: URLSession, + didReceive challenge: URLAuthenticationChallenge, + completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void + ) { if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { let domain: String = challenge.protectionSpace.host + // swiftlint:disable force_unwrapping let serverTrust: SecTrust = challenge.protectionSpace.serverTrust! + // swiftlint:enable force_unwrapping let policies: [SecPolicy] = [SecPolicyCreateSSL(true, domain as CFString)] SecTrustSetPolicies(serverTrust, policies as CFArray) @@ -376,7 +408,7 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { let trusted: Bool = SecTrustEvaluateWithError(serverTrust, &error) if trusted && error == nil { - let credential: URLCredential = URLCredential(trust: serverTrust) + let credential = URLCredential(trust: serverTrust) completionHandler(.useCredential, credential) } else { completionHandler(.rejectProtectionSpace, nil) @@ -389,13 +421,12 @@ class BTHTTP: NSObject, URLSessionTaskDelegate { func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { metrics.transactionMetrics.forEach { transaction in if let startDate = transaction.fetchStartDate, - let endDate = transaction.responseEndDate, - var path = transaction.request.url?.path { - - if path.contains("graphql"), - let data = task.originalRequest?.httpBody, - let mutationName = getGraphQLMutationName(data) { - path = mutationName + let endDate = transaction.responseEndDate, + var path = transaction.request.url?.path { + if path.contains("graphql"), + let data = task.originalRequest?.httpBody, + let mutationName = getGraphQLMutationName(data) { + path = mutationName } networkTimingDelegate?.fetchAPITiming( diff --git a/Sources/BraintreeCore/BTJSON.swift b/Sources/BraintreeCore/BTJSON.swift index 5f7abbef48..47b67b29fd 100644 --- a/Sources/BraintreeCore/BTJSON.swift +++ b/Sources/BraintreeCore/BTJSON.swift @@ -42,6 +42,7 @@ import Foundation /// ``` @_documentation(visibility: private) @objcMembers public class BTJSON: NSObject { + var value: Any? = [:] as [AnyHashable?: Any] // MARK: Initializers @@ -157,8 +158,7 @@ import Foundation return self } - guard let value = value as? [String: Any], - let unwrappedResult = value[key] else { + guard let value = value as? [String: Any], let unwrappedResult = value[key] else { return BTJSON(value: BTJSONError.keyInvalid(key)) } return BTJSON(value: unwrappedResult) @@ -254,8 +254,7 @@ import Foundation /// - orDefault: The default value if conversion fails /// - Returns: An `Enum` representing the `BTJSON` instance public func asEnum(_ mapping: [String: Any], orDefault: Int) -> Int { - guard let key = value as? String, - let result: Int = mapping[key] as? Int else { + guard let key = value as? String, let result: Int = mapping[key] as? Int else { return orDefault } diff --git a/Sources/BraintreeCore/BTJSONError.swift b/Sources/BraintreeCore/BTJSONError.swift index 82b880ccc3..c0d9c795c8 100644 --- a/Sources/BraintreeCore/BTJSONError.swift +++ b/Sources/BraintreeCore/BTJSONError.swift @@ -19,9 +19,9 @@ public enum BTJSONError: Error, CustomNSError, LocalizedError, Equatable { switch self { case .jsonSerializationFailure: return 0 - case .indexInvalid(_): + case .indexInvalid: return 1 - case .keyInvalid(_): + case .keyInvalid: return 2 } } diff --git a/Sources/BraintreeCore/BTLogLevel.swift b/Sources/BraintreeCore/BTLogLevel.swift index af267d6916..828c91e65a 100644 --- a/Sources/BraintreeCore/BTLogLevel.swift +++ b/Sources/BraintreeCore/BTLogLevel.swift @@ -1,9 +1,9 @@ import Foundation -/// :nodoc: This enum is exposed for internal Braintree use only. Do not use. It is not covered by Semantic Versioning and may change or be removed at any time. -/// Log level used to add formatted string to NSLog // TODO: when all modules are converted to Swift, we should used a var on this enum for the description vs using a separate class as a wrapper for Obj-C compatibility // TODO: use Foundations Logger instead of NSLog once all modules are in Swift +/// :nodoc: This enum is exposed for internal Braintree use only. Do not use. It is not covered by Semantic Versioning and may change or be removed at any time. +/// Log level used to add formatted string to NSLog @_documentation(visibility: private) public enum BTLogLevel: Int { diff --git a/Sources/BraintreeCore/BTPaymentMethodNonceParser.swift b/Sources/BraintreeCore/BTPaymentMethodNonceParser.swift index 7268e8bd44..1af8153098 100644 --- a/Sources/BraintreeCore/BTPaymentMethodNonceParser.swift +++ b/Sources/BraintreeCore/BTPaymentMethodNonceParser.swift @@ -96,6 +96,7 @@ import Foundation } } + // swiftlint:disable cyclomatic_complexity private func cardType(from cardType: String) -> String { let cardType = cardType.lowercased() @@ -129,4 +130,5 @@ import Foundation return "Unknown" } + // swiftlint:enable cyclomatic_complexity } diff --git a/Sources/BraintreeCore/BTPostalAddress.swift b/Sources/BraintreeCore/BTPostalAddress.swift index aae0912e0d..30a9ba6179 100644 --- a/Sources/BraintreeCore/BTPostalAddress.swift +++ b/Sources/BraintreeCore/BTPostalAddress.swift @@ -2,28 +2,29 @@ import Foundation /// Generic postal address @objcMembers public class BTPostalAddress: NSObject { + // Property names follow the `Braintree_Address` convention as documented at: // https://developer.paypal.com/braintree/docs/reference/request/address/create /// Optional. Recipient name for shipping address. - public var recipientName: String? = nil + public var recipientName: String? /// Line 1 of the Address (eg. number, street, etc). - public var streetAddress: String? = nil + public var streetAddress: String? /// Optional line 2 of the Address (eg. suite, apt #, etc.). - public var extendedAddress: String? = nil + public var extendedAddress: String? /// City name - public var locality: String? = nil + public var locality: String? /// 2 letter country code. - public var countryCodeAlpha2: String? = nil + public var countryCodeAlpha2: String? /// Zip code or equivalent is usually required for countries that have them. /// For a list of countries that do not have postal codes please refer to http://en.wikipedia.org/wiki/Postal_code. - public var postalCode: String? = nil + public var postalCode: String? /// Either a two-letter state code (for the US), or an ISO-3166-2 country subdivision code of up to three letters. - public var region: String? = nil + public var region: String? } diff --git a/Sources/BraintreeCore/BTURLUtils.swift b/Sources/BraintreeCore/BTURLUtils.swift index c7605b4700..a7d29ff4ca 100644 --- a/Sources/BraintreeCore/BTURLUtils.swift +++ b/Sources/BraintreeCore/BTURLUtils.swift @@ -1,7 +1,7 @@ import Foundation /// :nodoc: This class is exposed for internal Braintree use only. Do not use. It is not covered by Semantic Versioning and may change or be removed at any time. -///A helper class for converting URL queries to and from dictionaries +/// A helper class for converting URL queries to and from dictionaries @_documentation(visibility: private) @objc public class BTURLUtils: NSObject { @@ -25,9 +25,14 @@ import Foundation } } else if let dictValue = value as? [String: String] { for (subKey, subValue) in dictValue { - queryString = queryString.appendingFormat("%@%%5B%@%%5D=%@&", encodedKey, encode(subKey.description), encode(subValue.description)) + queryString = queryString.appendingFormat( + "%@%%5B%@%%5D=%@&", + encodedKey, + encode(subKey.description), + encode(subValue.description) + ) } - } else if let _ = value as? NSNull { + } else if value as? NSNull != nil { queryString = queryString.appendingFormat("%@=&", encodedKey) } else { queryString = queryString.appendingFormat("%@=%@&", encodedKey, encode(String(describing: value).description)) diff --git a/Sources/BraintreeCore/BTWebAuthenticationSession.swift b/Sources/BraintreeCore/BTWebAuthenticationSession.swift index fb6c54baa5..554d295a83 100644 --- a/Sources/BraintreeCore/BTWebAuthenticationSession.swift +++ b/Sources/BraintreeCore/BTWebAuthenticationSession.swift @@ -20,12 +20,12 @@ public class BTWebAuthenticationSession: NSObject { url: url, callbackURLScheme: BTCoreConstants.callbackURLScheme ) { url, error in - if let error = error as? NSError, error.code == ASWebAuthenticationSessionError.canceledLogin.rawValue { - sessionDidCancel() - } else { - sessionDidComplete(url, error) - } + if let error = error as? NSError, error.code == ASWebAuthenticationSessionError.canceledLogin.rawValue { + sessionDidCancel() + } else { + sessionDidComplete(url, error) } + } authenticationSession.prefersEphemeralWebBrowserSession = prefersEphemeralWebBrowserSession ?? false diff --git a/Sources/BraintreeCore/ConfigurationLoader.swift b/Sources/BraintreeCore/ConfigurationLoader.swift index d64636fd38..7583d4d1fb 100644 --- a/Sources/BraintreeCore/ConfigurationLoader.swift +++ b/Sources/BraintreeCore/ConfigurationLoader.swift @@ -5,7 +5,7 @@ class ConfigurationLoader { // MARK: - Private Properties private let configPath = "v1/configuration" - private let configurationCache: ConfigurationCache = ConfigurationCache.shared + private let configurationCache = ConfigurationCache.shared private let http: BTHTTP // MARK: - Intitializer diff --git a/Sources/BraintreeCore/UIApplication+URLOpener.swift b/Sources/BraintreeCore/UIApplication+URLOpener.swift index 4b68101986..7b7c75e8b6 100644 --- a/Sources/BraintreeCore/UIApplication+URLOpener.swift +++ b/Sources/BraintreeCore/UIApplication+URLOpener.swift @@ -34,9 +34,9 @@ extension UIApplication: URLOpener { return canOpenURL(payPalURL) } + // TODO: once Xcode 16 is the minimum supported version remove this method and update the protocol to the default open signature from UIApplication /// :nodoc: This method is exposed for internal Braintree use only. Do not use. It is not covered by Semantic Versioning and may change or be removed at any time. /// Indicates whether the PayPal App is installed. - // TODO: once Xcode 16 is the minimum supported version remove this method and update the protocol to the default open signature from UIApplication @_documentation(visibility: private) public func open(_ url: URL, completionHandler completion: ((Bool) -> Void)?) { UIApplication.shared.open(url, options: [:], completionHandler: completion) From aa394b1ec201e100db1f3c8ed598555b9a85ba00 Mon Sep 17 00:00:00 2001 From: scannillo <35243507+scannillo@users.noreply.github.com> Date: Tue, 16 Jul 2024 08:52:34 -0500 Subject: [PATCH 8/8] Remove `Authorization` argument in `ConfigurationLoader.getConfig` method (#1361) * Remove unneeded authorization param on ConfigurationLoader.get() method; use authorization on associated BTHTTP instead Co-authored-by: Jax DesMarais-Leder --- Sources/BraintreeCore/BTAPIClient.swift | 4 +-- .../BraintreeCore/ConfigurationLoader.swift | 11 ++++---- .../ConfigurationLoader_Tests.swift | 25 +++++++------------ .../MockConfigurationLoader.swift | 4 +-- 4 files changed, 18 insertions(+), 26 deletions(-) diff --git a/Sources/BraintreeCore/BTAPIClient.swift b/Sources/BraintreeCore/BTAPIClient.swift index be507bec08..cb646b2449 100644 --- a/Sources/BraintreeCore/BTAPIClient.swift +++ b/Sources/BraintreeCore/BTAPIClient.swift @@ -100,7 +100,7 @@ import Foundation /// cached on subsequent calls for better performance. @_documentation(visibility: private) public func fetchOrReturnRemoteConfiguration(_ completion: @escaping (BTConfiguration?, Error?) -> Void) { - configurationLoader.getConfig(authorization) { [weak self] configuration, error in + configurationLoader.getConfig { [weak self] configuration, error in guard let self else { completion(nil, BTAPIClientError.deallocated) return @@ -117,7 +117,7 @@ import Foundation } func fetchConfiguration() async throws -> BTConfiguration { - try await configurationLoader.getConfig(authorization) + try await configurationLoader.getConfig() } /// Fetches a customer's vaulted payment method nonces. diff --git a/Sources/BraintreeCore/ConfigurationLoader.swift b/Sources/BraintreeCore/ConfigurationLoader.swift index 7583d4d1fb..c787dc37e1 100644 --- a/Sources/BraintreeCore/ConfigurationLoader.swift +++ b/Sources/BraintreeCore/ConfigurationLoader.swift @@ -28,15 +28,14 @@ class ConfigurationLoader { /// 3. If fetching the configuration fails, it returns an error. /// /// - Parameters: - /// - authorization: An `ClientAuthorization` object required to access the configuration. /// - completion: A completion handler that is called with the fetched or cached `BTConfiguration` object or an `Error`. /// /// - Completion: /// - `BTConfiguration?`: The configuration object if it is successfully fetched or retrieved from the cache. /// - `Error?`: An error object if fetching the configuration fails or if the instance is deallocated. @_documentation(visibility: private) - func getConfig(_ authorization: ClientAuthorization, completion: @escaping (BTConfiguration?, Error?) -> Void) { - if let cachedConfig = try? configurationCache.getFromCache(authorization: authorization.bearer) { + func getConfig(completion: @escaping (BTConfiguration?, Error?) -> Void) { + if let cachedConfig = try? configurationCache.getFromCache(authorization: http.authorization.bearer) { completion(cachedConfig, nil) return } @@ -56,7 +55,7 @@ class ConfigurationLoader { } else { let configuration = BTConfiguration(json: body) - try? configurationCache.putInCache(authorization: authorization.bearer, configuration: configuration) + try? configurationCache.putInCache(authorization: http.authorization.bearer, configuration: configuration) completion(configuration, nil) return @@ -64,9 +63,9 @@ class ConfigurationLoader { } } - func getConfig(_ authorization: ClientAuthorization) async throws -> BTConfiguration { + func getConfig() async throws -> BTConfiguration { try await withCheckedThrowingContinuation { continuation in - getConfig(authorization) { configuration, error in + getConfig { configuration, error in if let error { continuation.resume(throwing: error) } else if let configuration { diff --git a/UnitTests/BraintreeCoreTests/ConfigurationLoader_Tests.swift b/UnitTests/BraintreeCoreTests/ConfigurationLoader_Tests.swift index f8a3cc59f3..7163cfa2d2 100644 --- a/UnitTests/BraintreeCoreTests/ConfigurationLoader_Tests.swift +++ b/UnitTests/BraintreeCoreTests/ConfigurationLoader_Tests.swift @@ -23,10 +23,9 @@ class ConfigurationLoader_Tests: XCTestCase { func testGetConfig_whenCached_returnsConfigFromCache() { let sampleJSON = ["test": "value", "environment": "fake-env1"] try? ConfigurationCache.shared.putInCache(authorization: "development_tokenization_key", configuration: BTConfiguration(json: BTJSON(value: sampleJSON))) - let mockClientAuthorization = MockClientAuthorization(bearer: "development_tokenization_key") let expectation = expectation(description: "Callback invoked") - sut.getConfig(mockClientAuthorization) { configuration, error in + sut.getConfig { configuration, error in XCTAssertEqual(configuration?.environment, "fake-env1") XCTAssertEqual(configuration?.json?["test"].asString(), "value") XCTAssertNil(self.mockHTTP.lastRequestEndpoint) @@ -37,10 +36,9 @@ class ConfigurationLoader_Tests: XCTestCase { func testGetConfig_performsGETWithCorrectPayload() { mockHTTP.stubRequest(withMethod: "GET", toEndpoint: "/v1/configuration", respondWith: [] as [Any?], statusCode: 200) - let mockClientAuthorization = MockClientAuthorization() - + let expectation = expectation(description: "Callback invoked") - sut.getConfig(mockClientAuthorization) { _,_ in + sut.getConfig { _, _ in XCTAssertEqual(self.mockHTTP.lastRequestEndpoint, "v1/configuration") XCTAssertEqual(self.mockHTTP.lastRequestParameters?["configVersion"] as? String, "3") expectation.fulfill() @@ -52,10 +50,9 @@ class ConfigurationLoader_Tests: XCTestCase { func testGetConfig_canGetRemoteConfiguration() { mockHTTP.cannedConfiguration = BTJSON(value: ["test": true]) mockHTTP.cannedStatusCode = 200 - let mockClientAuthorization = MockClientAuthorization() let expectation = expectation(description: "Fetch configuration") - sut.getConfig(mockClientAuthorization) { configuration, error in + sut.getConfig { configuration, error in XCTAssertNotNil(configuration) XCTAssertNil(error) XCTAssertGreaterThanOrEqual(self.mockHTTP.GETRequestCount, 1) @@ -75,10 +72,9 @@ class ConfigurationLoader_Tests: XCTestCase { respondWith: ["error_message": "Something bad happened"], statusCode: 503 ) - let mockClientAuthorization = MockClientAuthorization() - + let expectation = expectation(description: "Callback invoked") - sut.getConfig(mockClientAuthorization) { configuration, error in + sut.getConfig { configuration, error in guard let error = error as NSError? else { return } XCTAssertNil(configuration) XCTAssertEqual(error.domain, BTAPIClientError.errorDomain) @@ -93,11 +89,10 @@ class ConfigurationLoader_Tests: XCTestCase { func testGetConfig_whenNetworkHasError_returnsNetworkErrorInCallback() { ConfigurationCache.shared.cacheInstance.removeAllObjects() let mockError: NSError = NSError(domain: NSURLErrorDomain, code: NSURLErrorCannotConnectToHost) - let mockClientAuthorization = MockClientAuthorization() mockHTTP.stubRequest(withMethod: "GET", toEndpoint: "/client_api/v1/configuration", respondWithError: mockError) let expectation = expectation(description: "Fetch configuration") - sut.getConfig(mockClientAuthorization) { configuration, error in + sut.getConfig { configuration, error in // BTAPIClient fetches the config when initialized so there can potentially be 2 requests here XCTAssertLessThanOrEqual(self.mockHTTP.GETRequestCount, 2) XCTAssertNil(configuration) @@ -111,10 +106,9 @@ class ConfigurationLoader_Tests: XCTestCase { func testGetConfig_returnsConfiguration() async throws { mockHTTP.cannedConfiguration = BTJSON(value: ["test": true]) mockHTTP.cannedStatusCode = 200 - let mockClientAuthorization = MockClientAuthorization() let asyncTask = Task { - return try await sut.getConfig(mockClientAuthorization) + return try await sut.getConfig() } let returnedConfig = try await asyncTask.value @@ -124,11 +118,10 @@ class ConfigurationLoader_Tests: XCTestCase { func testGetConfig_returnsNetworkErrorInCallback() async throws { let mockError: NSError = NSError(domain: NSURLErrorDomain, code: NSURLErrorCannotConnectToHost) - let mockClientAuthorization = MockClientAuthorization() mockHTTP.stubRequest(withMethod: "GET", toEndpoint: "/client_api/v1/configuration", respondWithError: mockError) let asyncTask = Task { - return try await sut.getConfig(mockClientAuthorization) + return try await sut.getConfig() } do { diff --git a/UnitTests/BraintreeCoreTests/MockConfigurationLoader.swift b/UnitTests/BraintreeCoreTests/MockConfigurationLoader.swift index f1d096c3a0..27a9687541 100644 --- a/UnitTests/BraintreeCoreTests/MockConfigurationLoader.swift +++ b/UnitTests/BraintreeCoreTests/MockConfigurationLoader.swift @@ -12,7 +12,7 @@ class MockConfigurationLoader: ConfigurationLoader { super.init(http: http) } - override func getConfig(_ authorization: ClientAuthorization, completion: @escaping (BTConfiguration?, Error?) -> Void) { + override func getConfig(completion: @escaping (BTConfiguration?, Error?) -> Void) { if let error = mockError { completion(nil, error) } else { @@ -20,7 +20,7 @@ class MockConfigurationLoader: ConfigurationLoader { } } - override func getConfig(_ authorization: ClientAuthorization) async throws -> BTConfiguration { + override func getConfig() async throws -> BTConfiguration { if let error = mockError { throw error } else if let config = mockConfig {