Skip to content

Commit

Permalink
Merge branch 'main' into add-custom-authorization
Browse files Browse the repository at this point in the history
# Conflicts:
#	Demo/Application/Base/Settings/BraintreeDemoSettings.swift
  • Loading branch information
jaxdesmarais committed Oct 4, 2024
2 parents 53f40ca + 5492617 commit 41b8315
Show file tree
Hide file tree
Showing 49 changed files with 461 additions and 392 deletions.
14 changes: 2 additions & 12 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,8 @@

# Paths to include in lint
included:
- Sources/BraintreeAmericanExpress
- Sources/BraintreeApplePay
- Sources/BraintreeCard
- Sources/BraintreeCore
- Sources/BraintreeDataCollector
- Sources/BraintreeLocalPayment
- Sources/BraintreePayPal
- Sources/BraintreePayPalMessaging
- Sources/BraintreePayPalNativeCheckout
- Sources/BraintreeSEPADirectDebit
- Sources/BraintreeShopperInsights
- Sources/BraintreeThreeDSecure
- Sources
- Demo

excluded:
- Sources/BraintreeCore/BTAPIPinnedCertificates.swift
Expand Down
2 changes: 1 addition & 1 deletion Braintree.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "Braintree"
s.version = "6.23.3"
s.version = "6.23.4"
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
Expand Down
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
# Braintree iOS SDK Release Notes

## unreleased
## 6.23.4 (2024-09-24)
* BraintreePayPal
* Send `isVaultRequest` for App Switch events to PayPal's analytics service (FPTI)
* BraintreeShopperInsights (BETA)
* For analytics, send `experiment` as a parameter to `getRecommendedPaymentMethods` method
* For analytics, send `experiment` and `paymentMethodsDisplayed` analytic metrics to FPTI via the button presented methods

## 6.23.3 (2024-08-12)
* BraintreeCore
Expand Down
29 changes: 22 additions & 7 deletions Demo/Application/Base/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ import BraintreeCore
private let processInfoArgs = ProcessInfo.processInfo.arguments
private let userDefaults = UserDefaults.standard

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
registerDefaultsFromSettings()
persistDemoSettings()
BTAppContextSwitcher.sharedInstance.returnURLScheme = returnURLScheme
Expand All @@ -17,6 +20,7 @@ import BraintreeCore
return true
}

// swiftlint:disable:next cyclomatic_complexity
func registerDefaultsFromSettings() {
if processInfoArgs.contains("-EnvironmentSandbox") {
userDefaults.set(BraintreeDemoEnvironment.sandbox.rawValue, forKey: BraintreeDemoSettings.EnvironmentDefaultsKey)
Expand All @@ -29,11 +33,20 @@ import BraintreeCore
} else if processInfoArgs.contains("-TokenizationKey") {
userDefaults.set(BraintreeDemoAuthType.tokenizationKey.rawValue, forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey)
} else if processInfoArgs.contains("-NewPayPalCheckoutTokenizationKey") {
userDefaults.set(BraintreeDemoAuthType.newPayPalCheckoutTokenizationKey.rawValue, forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey)
userDefaults.set(
BraintreeDemoAuthType.newPayPalCheckoutTokenizationKey.rawValue,
forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey
)
} else if processInfoArgs.contains("-MockedPayPalTokenizationKey") {
userDefaults.set(BraintreeDemoAuthType.mockedPayPalTokenizationKey.rawValue, forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey)
userDefaults.set(
BraintreeDemoAuthType.mockedPayPalTokenizationKey.rawValue,
forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey
)
} else if processInfoArgs.contains("-UITestHardcodedClientToken") {
userDefaults.set(BraintreeDemoAuthType.uiTestHardcodedClientToken.rawValue, forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey)
userDefaults.set(
BraintreeDemoAuthType.uiTestHardcodedClientToken.rawValue,
forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey
)
}

userDefaults.removeObject(forKey: "BraintreeDemoSettingsAuthorizationOverride")
Expand All @@ -55,13 +68,15 @@ import BraintreeCore
}

func persistDemoSettings() {
guard let settingsBundle = Bundle.main.path(forResource: "Settings", ofType: "bundle"),
let settings = NSDictionary(contentsOfFile: settingsBundle.appending("/Root.plist")) else {
guard
let settingsBundle = Bundle.main.path(forResource: "Settings", ofType: "bundle"),
let settings = NSDictionary(contentsOfFile: settingsBundle.appending("/Root.plist"))
else {
print("Could not find Settings.bundle")
return
}

if let preferences = settings.object(forKey: "PreferenceSpecifiers") as? Array<[String: Any]> {
if let preferences = settings.object(forKey: "PreferenceSpecifiers") as? [[String: Any]] {
var defaultsToRegister: [String: Any] = [:]
preferences.forEach { prefSpecification in
if let key = prefSpecification["Key"] as? String, prefSpecification.keys.contains("DefaultValue") {
Expand Down

This file was deleted.

This file was deleted.

1 change: 1 addition & 0 deletions Demo/Application/Base/BaseViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class BaseViewController: UIViewController {
override func viewDidLoad() {
let tapToDismissKeyboard = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tapToDismissKeyboard)
super.viewDidLoad()
}

@objc func dismissKeyboard() {
Expand Down
9 changes: 8 additions & 1 deletion Demo/Application/Base/ContainmentViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,12 @@ class ContainmentViewController: UIViewController {
view.backgroundColor = .systemBackground

navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .refresh, target: self, action: #selector(tappedRefresh))
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Settings", style: .plain, target: self, action: #selector(tappedSettings))
navigationItem.rightBarButtonItem = UIBarButtonItem(
title: "Settings",
style: .plain,
target: self,
action: #selector(tappedSettings)
)

navigationController?.setToolbarHidden(false, animated: true)
navigationController?.navigationBar.scrollEdgeAppearance = navigationController?.navigationBar.standardAppearance
Expand All @@ -76,6 +81,7 @@ class ContainmentViewController: UIViewController {
statusItem = UIBarButtonItem(customView: button)
statusItem?.isEnabled = false

// swiftlint:disable:next force_unwrapping
toolbarItems = [padding, statusItem!, padding]
}

Expand Down Expand Up @@ -186,6 +192,7 @@ class ContainmentViewController: UIViewController {
currentViewController = instantiateViewController(with: tokenizationKey)

case .uiTestHardcodedClientToken:
// swiftlint:disable:next line_length
let uiTestClientToken = "eyJ2ZXJzaW9uIjozLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiIxYzM5N2E5OGZmZGRkNDQwM2VjNzEzYWRjZTI3NTNiMzJlODc2MzBiY2YyN2M3NmM2OWVmZjlkMTE5MjljOTVkfGNyZWF0ZWRfYXQ9MjAxNy0wNC0wNVQwNjowNzowOC44MTUwOTkzMjUrMDAwMFx1MDAyNm1lcmNoYW50X2lkPWRjcHNweTJicndkanIzcW5cdTAwMjZwdWJsaWNfa2V5PTl3d3J6cWszdnIzdDRuYzgiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvZGNwc3B5MmJyd2RqcjNxbi9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24ifQ=="
currentViewController = instantiateViewController(with: uiTestClientToken)
}
Expand Down
3 changes: 2 additions & 1 deletion Demo/Application/Base/PaymentButtonBaseViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ class PaymentButtonBaseViewController: BaseViewController {

var heightConstraint: CGFloat?

private var paymentButton: UIView = UIView()
private var paymentButton = UIView()

override init(authorization: String) {
// swiftlint:disable:next force_unwrapping
apiClient = BTAPIClient(authorization: authorization)!
super.init(authorization: authorization)
}
Expand Down
33 changes: 12 additions & 21 deletions Demo/Application/Base/Settings/BraintreeDemoSettings.swift
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import Foundation

@objc
enum BraintreeDemoEnvironment: Int {
case sandbox
case production
case custom
}

@objc
enum BraintreeDemoAuthType: Int {
case clientToken
case tokenizationKey
Expand All @@ -16,27 +14,25 @@ enum BraintreeDemoAuthType: Int {
case uiTestHardcodedClientToken
}

@objc
enum BraintreeDemoThreeDSecureRequiredSetting: Int {
case requiredIfAttempted
case required
case optional
}

@objc
class BraintreeDemoSettings: NSObject {

@objc static let EnvironmentDefaultsKey = "BraintreeDemoSettingsEnvironmentDefaultsKey"
@objc static let AuthorizationTypeDefaultsKey = "BraintreeDemoSettingsAuthorizationTypeKey"
@objc static let CustomAuthorizationDefaultsKey = "BraintreeDemoSettingsCustomAuthorizationKey"
@objc static let ThreeDSecureRequiredDefaultsKey = "BraintreeDemoSettingsThreeDSecureRequiredDefaultsKey"
static let EnvironmentDefaultsKey = "BraintreeDemoSettingsEnvironmentDefaultsKey"
static let AuthorizationTypeDefaultsKey = "BraintreeDemoSettingsAuthorizationTypeKey"
static let CustomAuthorizationDefaultsKey = "BraintreeDemoSettingsCustomAuthorizationKey"
static let ThreeDSecureRequiredDefaultsKey = "BraintreeDemoSettingsThreeDSecureRequiredDefaultsKey"

@objc
static var currentEnvironment: BraintreeDemoEnvironment {
return BraintreeDemoEnvironment(rawValue: UserDefaults.standard.integer(forKey: EnvironmentDefaultsKey)) ?? BraintreeDemoEnvironment.sandbox
BraintreeDemoEnvironment(
rawValue: UserDefaults.standard.integer(forKey: EnvironmentDefaultsKey)
) ?? BraintreeDemoEnvironment.sandbox
}

@objc
static var currentEnvironmentName: String {
switch currentEnvironment {
case .sandbox, .custom:
Expand All @@ -45,8 +41,7 @@ class BraintreeDemoSettings: NSObject {
return "Production"
}
}

@objc

static var currentEnvironmentURLString: String {
switch currentEnvironment {
case .sandbox, .custom:
Expand All @@ -56,32 +51,28 @@ class BraintreeDemoSettings: NSObject {
}
}

@objc
static var authorizationOverride: String? {
return UserDefaults.standard.string(forKey: "BraintreeDemoSettingsAuthorizationOverride")
}

@objc
static var authorizationType: BraintreeDemoAuthType {
return BraintreeDemoAuthType(rawValue: UserDefaults.standard.integer(forKey: AuthorizationTypeDefaultsKey))!
BraintreeDemoAuthType(rawValue: UserDefaults.standard.integer(forKey: AuthorizationTypeDefaultsKey)) ?? .tokenizationKey
}

@objc
static var threeDSecureRequiredStatus: BraintreeDemoThreeDSecureRequiredSetting {
return BraintreeDemoThreeDSecureRequiredSetting(rawValue: UserDefaults.standard.integer(forKey: ThreeDSecureRequiredDefaultsKey)) ?? .requiredIfAttempted
BraintreeDemoThreeDSecureRequiredSetting(
rawValue: UserDefaults.standard.integer(forKey: ThreeDSecureRequiredDefaultsKey)
) ?? .requiredIfAttempted
}

@objc
static var customerPresent: Bool {
return UserDefaults.standard.bool(forKey: "BraintreeDemoCustomerPresent")
}

@objc
static var customerIdentifier: String? {
return UserDefaults.standard.string(forKey: "BraintreeDemoCustomerIdentifier")
}

@objc
static var clientTokenVersion: String? {
return UserDefaults.standard.string(forKey: "BraintreeDemoSettingsClientTokenVersionDefaultsKey")
}
Expand Down
11 changes: 6 additions & 5 deletions Demo/Application/Features/AmexViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,13 @@ class AmexViewController: PaymentButtonBaseViewController {
return
}

if let errorCode = rewardsBalance.errorCode, let errorMessage = rewardsBalance.errorMessage {
if let errorCode = rewardsBalance.errorCode, let errorMessage = rewardsBalance.errorMessage {
self.progressBlock("\(errorCode): \(errorMessage)")
} else if let rewardsAmount = rewardsBalance.rewardsAmount,
let rewardsUnit = rewardsBalance.rewardsUnit,
let currencyAmount = rewardsBalance.currencyAmount,
let currencyIsoCode = rewardsBalance.currencyIsoCode {
} else if
let rewardsAmount = rewardsBalance.rewardsAmount,
let rewardsUnit = rewardsBalance.rewardsUnit,
let currencyAmount = rewardsBalance.currencyAmount,
let currencyIsoCode = rewardsBalance.currencyIsoCode {
self.progressBlock("\(rewardsAmount) \(rewardsUnit), \(currencyAmount) \(currencyIsoCode)")
}
}
Expand Down
1 change: 1 addition & 0 deletions Demo/Application/Features/ApplePayViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class ApplePayViewController: PaymentButtonBaseViewController {
}

let paymentRequest = self.constructPaymentRequest(with: request)
// swiftlint:disable:next force_unwrapping
let paymentAuthorizationViewController = PKPaymentAuthorizationViewController(paymentRequest: paymentRequest)!
paymentAuthorizationViewController.delegate = self

Expand Down
Loading

0 comments on commit 41b8315

Please sign in to comment.