diff --git a/Demo/Application/Base/AppDelegate.swift b/Demo/Application/Base/AppDelegate.swift new file mode 100644 index 0000000000..274e295cf3 --- /dev/null +++ b/Demo/Application/Base/AppDelegate.swift @@ -0,0 +1,85 @@ +import Foundation + +@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { + + private let returnURLScheme = "com.braintreepayments.Demo.payments" + private let processInfoArgs = ProcessInfo.processInfo.arguments + private let userDefaults = UserDefaults.standard + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + registerDefaultsFromSettings() + persistDemoSettings() + BTAppContextSwitcher.sharedInstance.returnURLScheme = returnURLScheme + + userDefaults.setValue(true, forKey: "magnes.debug.mode") + + return true + } + + func registerDefaultsFromSettings() { + if processInfoArgs.contains("-EnvironmentSandbox") { + userDefaults.set(BraintreeDemoEnvironment.sandbox.rawValue, forKey: BraintreeDemoSettings.EnvironmentDefaultsKey) + } else if processInfoArgs.contains("-EnvironmentProduction") { + userDefaults.set(BraintreeDemoEnvironment.production.rawValue, forKey: BraintreeDemoSettings.EnvironmentDefaultsKey) + } + + if processInfoArgs.contains("-ClientToken") { + userDefaults.set(BraintreeDemoAuthType.clientToken.rawValue, forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey) + } else if processInfoArgs.contains("-TokenizationKey") { + userDefaults.set(BraintreeDemoAuthType.tokenizationKey.rawValue, forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey) + } else if processInfoArgs.contains("-MockedPayPalTokenizationKey") { + userDefaults.set(BraintreeDemoAuthType.mockedPayPalTokenizationKey.rawValue, forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey) + } else if processInfoArgs.contains("-UITestHardcodedClientToken") { + userDefaults.set(BraintreeDemoAuthType.uiTestHardcodedClientToken.rawValue, forKey: BraintreeDemoSettings.AuthorizationTypeDefaultsKey) + } + + userDefaults.removeObject(forKey: "BraintreeDemoSettingsAuthorizationOverride") + processInfoArgs.forEach { arg in + if arg.contains("-Integration:") { + let testIntegration = arg.replacingOccurrences(of: "-Integration:", with: "") + userDefaults.setValue(testIntegration, forKey: "BraintreeDemoSettingsIntegration") + } else if arg.contains("-Authorization:") { + let testIntegration = arg.replacingOccurrences(of: "-Authorization:", with: "") + userDefaults.setValue(testIntegration, forKey: "BraintreeDemoSettingsAuthorizationOverride") + } + } + + if processInfoArgs.contains("-ClientTokenVersion2") { + userDefaults.set("2", forKey: "BraintreeDemoSettingsClientTokenVersionDefaultsKey") + } else if processInfoArgs.contains("-ClientTokenVersion3") { + userDefaults.set("3", forKey: "BraintreeDemoSettingsClientTokenVersionDefaultsKey") + } + } + + func persistDemoSettings() { + 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]> { + var defaultsToRegister: [String: Any] = [:] + preferences.forEach { prefSpecification in + print(prefSpecification) + if let key = prefSpecification["Key"] as? String, prefSpecification.keys.contains("DefaultValue") { + defaultsToRegister[key] = prefSpecification["DefaultValue"] + } + } + + userDefaults.register(defaults: defaultsToRegister) + } + } + + // 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. + UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + } +} diff --git a/Demo/Application/Base/BraintreeDemoAppDelegate.h b/Demo/Application/Base/BraintreeDemoAppDelegate.h deleted file mode 100644 index 5a2be2277f..0000000000 --- a/Demo/Application/Base/BraintreeDemoAppDelegate.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -@interface BraintreeDemoAppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/Demo/Application/Base/BraintreeDemoAppDelegate.m b/Demo/Application/Base/BraintreeDemoAppDelegate.m deleted file mode 100644 index d78130c22c..0000000000 --- a/Demo/Application/Base/BraintreeDemoAppDelegate.m +++ /dev/null @@ -1,116 +0,0 @@ -#import "BraintreeDemoAppDelegate.h" -#import "BraintreeDemoContainmentViewController.h" - -#import "Demo-Swift.h" - -// MARK: - Swift File Imports for Package Managers -#if __has_include() // Cocoapods-generated Swift Header -#import - -#elif SWIFT_PACKAGE // SPM -/* Use @import for SPM support - * See https://forums.swift.org/t/using-a-swift-package-in-a-mixed-swift-and-objective-c-project/27348 - */ -@import BraintreeCore; - -#elif __has_include("Braintree-Swift.h") // CocoaPods for ReactNative -/* Use quoted style when importing Swift headers for ReactNative support - * See https://github.com/braintree/braintree_ios/issues/671 - */ -#import "Braintree-Swift.h" - -#else // Carthage or Local Builds -#import -#endif - -NSString *BraintreeDemoAppDelegatePaymentsURLScheme = @"com.braintreepayments.Demo.payments"; - -@implementation BraintreeDemoAppDelegate - -- (BOOL)application:(__unused UIApplication *)application didFinishLaunchingWithOptions:(__unused NSDictionary *)launchOptions { - [self setupAppearance]; - [self registerDefaultsFromSettings]; - - [[BTAppContextSwitcher sharedInstance] setReturnURLScheme:BraintreeDemoAppDelegatePaymentsURLScheme]; - - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setBool:YES forKey:@"magnes.debug.mode"]; - - return YES; -} - -- (void)setupAppearance { - UIColor *pleasantGray = [UIColor colorWithWhite:42/255.0f alpha:1.0f]; - - [[UIToolbar appearance] setBarTintColor:pleasantGray]; - [[UIToolbar appearance] setBarStyle:UIBarStyleDefault]; - [[UIToolbar appearance] setTranslucent:YES]; -} - -- (void)registerDefaultsFromSettings { - // Check for testing arguments - if ([[[NSProcessInfo processInfo] arguments] containsObject:@"-EnvironmentSandbox"]) { - [[NSUserDefaults standardUserDefaults] setInteger:BraintreeDemoEnvironmentSandbox forKey:BraintreeDemoSettings.EnvironmentDefaultsKey]; - }else if ([[[NSProcessInfo processInfo] arguments] containsObject:@"-EnvironmentProduction"]) { - [[NSUserDefaults standardUserDefaults] setInteger:BraintreeDemoEnvironmentProduction forKey:BraintreeDemoSettings.EnvironmentDefaultsKey]; - } - - if ([[[NSProcessInfo processInfo] arguments] containsObject:@"-ClientToken"]) { - [[NSUserDefaults standardUserDefaults] setInteger:BraintreeDemoAuthTypeClientToken forKey:BraintreeDemoSettings.AuthorizationTypeDefaultsKey]; - }else if ([[[NSProcessInfo processInfo] arguments] containsObject:@"-TokenizationKey"]) { - [[NSUserDefaults standardUserDefaults] setInteger:BraintreeDemoAuthTypeTokenizationKey forKey:BraintreeDemoSettings.AuthorizationTypeDefaultsKey]; - } else if ([[[NSProcessInfo processInfo] arguments] containsObject:@"-MockedPayPalTokenizationKey"]) { - [[NSUserDefaults standardUserDefaults] setInteger:BraintreeDemoAuthTypeMockedPayPalTokenizationKey forKey:BraintreeDemoSettings.AuthorizationTypeDefaultsKey]; - } else if ([[[NSProcessInfo processInfo] arguments] containsObject:@"-UITestHardcodedClientToken"]) { - [[NSUserDefaults standardUserDefaults] setInteger:BraintreeDemoAuthTypeUiTestHardcodedClientToken forKey:BraintreeDemoSettings.AuthorizationTypeDefaultsKey]; - } - - [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"BraintreeDemoSettingsAuthorizationOverride"]; - for (NSString* arg in [[NSProcessInfo processInfo] arguments]) { - if ([arg rangeOfString:@"-Integration:"].location != NSNotFound) { - NSString* testIntegration = [arg stringByReplacingOccurrencesOfString:@"-Integration:" withString:@""]; - [[NSUserDefaults standardUserDefaults] setObject:testIntegration forKey:@"BraintreeDemoSettingsIntegration"]; - } else if ([arg rangeOfString:@"-Authorization:"].location != NSNotFound) { - NSString* testIntegration = [arg stringByReplacingOccurrencesOfString:@"-Authorization:" withString:@""]; - [[NSUserDefaults standardUserDefaults] setObject:testIntegration forKey:@"BraintreeDemoSettingsAuthorizationOverride"]; - } - } - - if ([[[NSProcessInfo processInfo] arguments] containsObject:@"-ClientTokenVersion2"]) { - [[NSUserDefaults standardUserDefaults] setObject:@"2" forKey:@"BraintreeDemoSettingsClientTokenVersionDefaultsKey"]; - }else if ([[[NSProcessInfo processInfo] arguments] containsObject:@"-ClientTokenVersion3"]) { - [[NSUserDefaults standardUserDefaults] setObject:@"3" forKey:@"BraintreeDemoSettingsClientTokenVersionDefaultsKey"]; - } - // End checking for testing arguments - - - NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"]; - if(!settingsBundle) { - NSLog(@"Could not find Settings.bundle"); - return; - } - - NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]]; - NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"]; - - NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]]; - for (NSDictionary *prefSpecification in preferences) { - NSString *key = [prefSpecification objectForKey:@"Key"]; - if(key && [[prefSpecification allKeys] containsObject:@"DefaultValue"]) { - [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key]; - } - } - - [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister]; -} - -#pragma mark - UISceneSession lifecycle - - -- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options { - // Called when a new scene session is being created. - // Use this method to select a configuration to create the new scene with. - return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role]; -} - -@end diff --git a/Demo/Application/Base/BraintreeDemoSceneDelegate.h b/Demo/Application/Base/BraintreeDemoSceneDelegate.h deleted file mode 100644 index 4f9b35a937..0000000000 --- a/Demo/Application/Base/BraintreeDemoSceneDelegate.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -@interface BraintreeDemoSceneDelegate : UIResponder - -@property (strong, nonatomic) UIWindow * window; - -@end diff --git a/Demo/Application/Base/BraintreeDemoSceneDelegate.m b/Demo/Application/Base/BraintreeDemoSceneDelegate.m deleted file mode 100644 index b15fa79dd6..0000000000 --- a/Demo/Application/Base/BraintreeDemoSceneDelegate.m +++ /dev/null @@ -1,52 +0,0 @@ -#import "BraintreeDemoSceneDelegate.h" -#import "BraintreeDemoContainmentViewController.h" - -#import "Demo-Swift.h" - -// MARK: - Swift File Imports for Package Managers -#if __has_include() // Cocoapods-generated Swift Header -#import - -#elif SWIFT_PACKAGE // SPM -/* Use @import for SPM support - * See https://forums.swift.org/t/using-a-swift-package-in-a-mixed-swift-and-objective-c-project/27348 - */ -@import BraintreeCore; - -#elif __has_include("Braintree-Swift.h") // CocoaPods for ReactNative -/* Use quoted style when importing Swift headers for ReactNative support - * See https://github.com/braintree/braintree_ios/issues/671 - */ -#import "Braintree-Swift.h" - -#else // Carthage or Local Builds -#import -#endif - -@implementation BraintreeDemoSceneDelegate - -- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)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). - - UIWindowScene *windowScene = (UIWindowScene *)scene; - if (windowScene) { - self.window = [[UIWindow alloc] initWithWindowScene:windowScene]; - BraintreeDemoContainmentViewController *rootViewController = [[BraintreeDemoContainmentViewController alloc] init]; - UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController]; - self.window.rootViewController = navigationController; - [self.window makeKeyAndVisible]; - } -} - -- (void)scene:(UIScene *)scene openURLContexts:(NSSet *)URLContexts { - for (UIOpenURLContext *urlContext in URLContexts) { - NSURL *url = [urlContext URL]; - if ([url.scheme localizedCaseInsensitiveCompare:@"com.braintreepayments.Demo.payments"] == NSOrderedSame) { - [[BTAppContextSwitcher sharedInstance] handleOpenURLContext:urlContext]; - } - } -} - -@end diff --git a/Demo/Application/Base/SceneDelegate.swift b/Demo/Application/Base/SceneDelegate.swift new file mode 100644 index 0000000000..43b00d90f6 --- /dev/null +++ b/Demo/Application/Base/SceneDelegate.swift @@ -0,0 +1,27 @@ +import Foundation + +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). + + if let windowScene = scene as? UIWindowScene { + window = UIWindow(windowScene: windowScene) + window?.rootViewController = UINavigationController(rootViewController: BraintreeDemoContainmentViewController()) + window?.makeKeyAndVisible() + } + } + + func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { + URLContexts.forEach { urlContext in + let url = urlContext.url + if url.scheme?.localizedCaseInsensitiveCompare("com.braintreepayments.Demo.payments") == .orderedSame { + _ = BTAppContextSwitcher.sharedInstance.handleOpenURL(context: urlContext) + } + } + } +} diff --git a/Demo/Application/Base/Settings/Settings.bundle/Root.plist b/Demo/Application/Base/Settings/Settings.bundle/Root.plist index 5aefbc50f6..fec9f119ba 100644 --- a/Demo/Application/Base/Settings/Settings.bundle/Root.plist +++ b/Demo/Application/Base/Settings/Settings.bundle/Root.plist @@ -103,7 +103,6 @@ 0 1 - 2 diff --git a/Demo/Application/Supporting Files/Braintree-Demo-Info.plist b/Demo/Application/Supporting Files/Braintree-Demo-Info.plist index 8999304898..05603e73f7 100644 --- a/Demo/Application/Supporting Files/Braintree-Demo-Info.plist +++ b/Demo/Application/Supporting Files/Braintree-Demo-Info.plist @@ -84,7 +84,7 @@ UISceneConfigurationName Default Configuration UISceneDelegateClassName - BraintreeDemoSceneDelegate + $(PRODUCT_MODULE_NAME).SceneDelegate diff --git a/Demo/Application/Supporting Files/Demo-Bridging-Header.h b/Demo/Application/Supporting Files/Demo-Bridging-Header.h index 342febd358..5c4d4b215e 100644 --- a/Demo/Application/Supporting Files/Demo-Bridging-Header.h +++ b/Demo/Application/Supporting Files/Demo-Bridging-Header.h @@ -1,3 +1,4 @@ #import "BraintreeDemoBaseViewController.h" #import #import "BraintreeDemoPaymentButtonBaseViewController.h" +#import "BraintreeDemoContainmentViewController.h" diff --git a/Demo/Application/Supporting Files/main.m b/Demo/Application/Supporting Files/main.m deleted file mode 100644 index f4e520f76b..0000000000 --- a/Demo/Application/Supporting Files/main.m +++ /dev/null @@ -1,10 +0,0 @@ -#import - -#import "BraintreeDemoAppDelegate.h" - -int main(int argc, char * argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([BraintreeDemoAppDelegate class])); - } -} diff --git a/Demo/Demo.xcodeproj/project.pbxproj b/Demo/Demo.xcodeproj/project.pbxproj index 1447879378..c3d198992a 100644 --- a/Demo/Demo.xcodeproj/project.pbxproj +++ b/Demo/Demo.xcodeproj/project.pbxproj @@ -18,7 +18,6 @@ 42C574BA25FA66FB008B3681 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 42C574B825FA66FB008B3681 /* LaunchScreen.storyboard */; }; 42C574D525FA6CAC008B3681 /* AppSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C574D425FA6CAC008B3681 /* AppSwitcher.swift */; }; 42C5BDD625A4CE4800E8FF40 /* AmericanExpress_UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C5BDD525A4CE4800E8FF40 /* AmericanExpress_UITests.swift */; }; - 42D47A152554679D0012BAF1 /* BraintreeDemoSceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 42D47A142554679D0012BAF1 /* BraintreeDemoSceneDelegate.m */; }; 57108A152832E789004EB870 /* BraintreeDemoPayPalNativeCheckoutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57108A142832E789004EB870 /* BraintreeDemoPayPalNativeCheckoutViewController.swift */; }; 57108A172832EA04004EB870 /* BraintreePayPalNativeCheckout.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57108A162832EA04004EB870 /* BraintreePayPalNativeCheckout.framework */; }; 57108A182832EA04004EB870 /* BraintreePayPalNativeCheckout.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 57108A162832EA04004EB870 /* BraintreePayPalNativeCheckout.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -40,6 +39,8 @@ 803D6508256DAF9A00ACE692 /* BraintreeVenmo.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 803D64F3256DAF9A00ACE692 /* BraintreeVenmo.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 803FB9DE26D93146002BF92D /* BTCardFormView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803FB9DD26D93146002BF92D /* BTCardFormView.swift */; }; 80581A5F2553170000006F53 /* Venmo_UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80581A5D2553152A00006F53 /* Venmo_UITests.swift */; }; + 809E86A62AD00AF4004998B0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809E86A52AD00AF4004998B0 /* AppDelegate.swift */; }; + 809E86A82AD01FE7004998B0 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809E86A72AD01FE7004998B0 /* SceneDelegate.swift */; }; 80D36DEE2A7967F20035380E /* BraintreeDemoVenmoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D36DED2A7967F20035380E /* BraintreeDemoVenmoViewController.swift */; }; 9C36BD2926B3071B00F0A559 /* PPRiskMagnes.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C36BD2826B3071A00F0A559 /* PPRiskMagnes.xcframework */; }; 9C36BD4C26B311D900F0A559 /* CardinalMobile.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C36BD4826B3102B00F0A559 /* CardinalMobile.xcframework */; }; @@ -49,12 +50,10 @@ A0988F9324DB44B20095EEEE /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A0988E7F24DB44B10095EEEE /* Settings.bundle */; }; A0988F9424DB44B20095EEEE /* BraintreeDemoPaymentButtonBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A0988E8124DB44B10095EEEE /* BraintreeDemoPaymentButtonBaseViewController.m */; }; A0988F9524DB44B20095EEEE /* BraintreeDemoBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A0988E8224DB44B10095EEEE /* BraintreeDemoBaseViewController.m */; }; - A0988F9624DB44B20095EEEE /* BraintreeDemoAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A0988E8524DB44B10095EEEE /* BraintreeDemoAppDelegate.m */; }; A0988F9724DB44B20095EEEE /* BraintreeDemoContainmentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A0988E8624DB44B10095EEEE /* BraintreeDemoContainmentViewController.m */; }; A0988F9824DB44B20095EEEE /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A0988E8824DB44B10095EEEE /* Launch Screen.storyboard */; }; A0988FE324DB44B20095EEEE /* Main.strings in Resources */ = {isa = PBXBuildFile; fileRef = A0988F5224DB44B10095EEEE /* Main.strings */; }; A0988FE424DB44B20095EEEE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A0988F5424DB44B10095EEEE /* InfoPlist.strings */; }; - A0988FE624DB44B20095EEEE /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A0988F5824DB44B10095EEEE /* main.m */; }; A0988FF924DB44B20095EEEE /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A0988F8D24DB44B10095EEEE /* Images.xcassets */; }; A0988FFA24DB44B20095EEEE /* BraintreeDemoMerchantAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0988F9024DB44B20095EEEE /* BraintreeDemoMerchantAPIClient.swift */; }; A9C4E07924EC28F7002F6FF2 /* PayPal_Checkout_UITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C4E07824EC28F7002F6FF2 /* PayPal_Checkout_UITests.swift */; }; @@ -133,8 +132,6 @@ 42C574BB25FA66FB008B3681 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 42C574D425FA6CAC008B3681 /* AppSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSwitcher.swift; sourceTree = ""; }; 42C5BDD525A4CE4800E8FF40 /* AmericanExpress_UITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmericanExpress_UITests.swift; sourceTree = ""; }; - 42D47A132554679D0012BAF1 /* BraintreeDemoSceneDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BraintreeDemoSceneDelegate.h; sourceTree = ""; }; - 42D47A142554679D0012BAF1 /* BraintreeDemoSceneDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BraintreeDemoSceneDelegate.m; sourceTree = ""; }; 42F3F6DB2603B83100401B0D /* CardinalMobile.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = CardinalMobile.xcframework; path = ../Frameworks/CardinalMobile.xcframework; sourceTree = ""; }; 570B93D32853A6D30041BAFE /* BraintreeCoreSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = BraintreeCoreSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 57108A142832E789004EB870 /* BraintreeDemoPayPalNativeCheckoutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BraintreeDemoPayPalNativeCheckoutViewController.swift; sourceTree = ""; }; @@ -152,6 +149,8 @@ 803D64F3256DAF9A00ACE692 /* BraintreeVenmo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = BraintreeVenmo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 803FB9DD26D93146002BF92D /* BTCardFormView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BTCardFormView.swift; sourceTree = ""; }; 80581A5D2553152A00006F53 /* Venmo_UITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Venmo_UITests.swift; sourceTree = ""; }; + 809E86A52AD00AF4004998B0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 809E86A72AD01FE7004998B0 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 80D36DED2A7967F20035380E /* BraintreeDemoVenmoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BraintreeDemoVenmoViewController.swift; sourceTree = ""; }; 9C030582267BDF9E00DB7A68 /* Demo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Demo.entitlements; sourceTree = ""; }; 9C36BD2826B3071A00F0A559 /* PPRiskMagnes.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = PPRiskMagnes.xcframework; path = ../Frameworks/XCFrameworks/PPRiskMagnes.xcframework; sourceTree = ""; }; @@ -164,9 +163,7 @@ A0988E8224DB44B10095EEEE /* BraintreeDemoBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BraintreeDemoBaseViewController.m; sourceTree = ""; }; A0988E8324DB44B10095EEEE /* BraintreeDemoPaymentButtonBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BraintreeDemoPaymentButtonBaseViewController.h; sourceTree = ""; }; A0988E8424DB44B10095EEEE /* BraintreeDemoBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BraintreeDemoBaseViewController.h; sourceTree = ""; }; - A0988E8524DB44B10095EEEE /* BraintreeDemoAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BraintreeDemoAppDelegate.m; sourceTree = ""; }; A0988E8624DB44B10095EEEE /* BraintreeDemoContainmentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BraintreeDemoContainmentViewController.m; sourceTree = ""; }; - A0988E8724DB44B10095EEEE /* BraintreeDemoAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BraintreeDemoAppDelegate.h; sourceTree = ""; }; A0988E8824DB44B10095EEEE /* Launch Screen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; A0988E8924DB44B10095EEEE /* BraintreeDemoContainmentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BraintreeDemoContainmentViewController.h; sourceTree = ""; }; A0988F5124DB44B10095EEEE /* Demo-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Demo-Bridging-Header.h"; sourceTree = ""; }; @@ -174,7 +171,6 @@ A0988F5524DB44B10095EEEE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; A0988F5624DB44B10095EEEE /* Braintree-Demo-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Braintree-Demo-Prefix.pch"; sourceTree = ""; }; A0988F5724DB44B10095EEEE /* Braintree-Demo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Braintree-Demo-Info.plist"; sourceTree = ""; }; - A0988F5824DB44B10095EEEE /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; A0988F8D24DB44B10095EEEE /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; A0988F8E24DB44B10095EEEE /* Braintree-Demo.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = "Braintree-Demo.entitlements"; sourceTree = ""; }; A0988F9024DB44B20095EEEE /* BraintreeDemoMerchantAPIClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BraintreeDemoMerchantAPIClient.swift; sourceTree = ""; }; @@ -323,12 +319,10 @@ isa = PBXGroup; children = ( A0988E8024DB44B10095EEEE /* Base View Controllers */, - A0988E8724DB44B10095EEEE /* BraintreeDemoAppDelegate.h */, - A0988E8524DB44B10095EEEE /* BraintreeDemoAppDelegate.m */, + 809E86A52AD00AF4004998B0 /* AppDelegate.swift */, + 809E86A72AD01FE7004998B0 /* SceneDelegate.swift */, A0988E8924DB44B10095EEEE /* BraintreeDemoContainmentViewController.h */, A0988E8624DB44B10095EEEE /* BraintreeDemoContainmentViewController.m */, - 42D47A132554679D0012BAF1 /* BraintreeDemoSceneDelegate.h */, - 42D47A142554679D0012BAF1 /* BraintreeDemoSceneDelegate.m */, A0988E8824DB44B10095EEEE /* Launch Screen.storyboard */, A0988E7D24DB44B10095EEEE /* Settings */, ); @@ -364,7 +358,6 @@ A0988F5424DB44B10095EEEE /* InfoPlist.strings */, A0988F5624DB44B10095EEEE /* Braintree-Demo-Prefix.pch */, A0988F5724DB44B10095EEEE /* Braintree-Demo-Info.plist */, - A0988F5824DB44B10095EEEE /* main.m */, ); path = "Supporting Files"; sourceTree = ""; @@ -772,17 +765,16 @@ A0988FFA24DB44B20095EEEE /* BraintreeDemoMerchantAPIClient.swift in Sources */, BE777AC427D9370400487D23 /* BraintreeDemoSEPADirectDebitViewController.swift in Sources */, BEBD52852AAB9649005D6687 /* BraintreeDemoAmexViewController.swift in Sources */, - A0988FE624DB44B20095EEEE /* main.m in Sources */, + 809E86A82AD01FE7004998B0 /* SceneDelegate.swift in Sources */, A0988F9724DB44B20095EEEE /* BraintreeDemoContainmentViewController.m in Sources */, BEE9304B2A992F6200C85779 /* BraintreeDemoCardTokenizationViewController.swift in Sources */, BED461832AD072D9001B0DDF /* CardHelpers.swift in Sources */, - 42D47A152554679D0012BAF1 /* BraintreeDemoSceneDelegate.m in Sources */, A0988F9424DB44B20095EEEE /* BraintreeDemoPaymentButtonBaseViewController.m in Sources */, 80D36DEE2A7967F20035380E /* BraintreeDemoVenmoViewController.swift in Sources */, BEE930492A98FE9200C85779 /* BraintreeDemoBTDataCollectorViewController.swift in Sources */, - A0988F9624DB44B20095EEEE /* BraintreeDemoAppDelegate.m in Sources */, BEAAAD052970A70D000BD296 /* BTSEPADirectDebitTestHelper.swift in Sources */, 57108A152832E789004EB870 /* BraintreeDemoPayPalNativeCheckoutViewController.swift in Sources */, + 809E86A62AD00AF4004998B0 /* AppDelegate.swift in Sources */, BEBD52832AAB62FB005D6687 /* BraintreeDemoApplePayViewController.swift in Sources */, A0988F9224DB44B20095EEEE /* BraintreeDemoSettings.swift in Sources */, );