From a594507d3928f68f05f84324fc0cf37348302d59 Mon Sep 17 00:00:00 2001 From: Kenny O Payes Galeano Date: Mon, 6 Apr 2020 16:53:14 -0400 Subject: [PATCH] Initial commit --- .DS_Store | Bin 0 -> 6148 bytes .gitattributes | 2 + README.md | 15 + .../project.pbxproj | 635 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 28324 bytes .../xcschemes/xcschememanagement.plist | 14 + .../xcschemes/xcschememanagement.plist | 14 + i2020_03_14_Coordinator/AppDelegate.swift | 58 ++ .../AppIcon.appiconset/Contents.json | 98 +++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 + .../Base.lproj/Main.storyboard | 104 +++ .../Coordinators/Coordinator.swift | 16 + .../Coordinators/MainCoordinator.swift | 42 ++ .../Coordinators/Storyboarded.swift | 29 + i2020_03_14_Coordinator/Info.plist | 62 ++ i2020_03_14_Coordinator/SceneDelegate.swift | 68 ++ .../FourthViewController.swift | 21 + .../SecondViewController.swift | 20 + .../ViewControllers/ThirdViewController.swift | 22 + .../ViewControllers/ViewController.swift | 32 + i2020_03_14_CoordinatorTests/Info.plist | 22 + .../i2020_03_14_CoordinatorTests.swift | 34 + i2020_03_14_CoordinatorUITests/Info.plist | 22 + .../i2020_03_14_CoordinatorUITests.swift | 43 ++ 27 files changed, 1419 insertions(+) create mode 100644 .DS_Store create mode 100644 .gitattributes create mode 100644 README.md create mode 100644 i2020_03_14_Coordinator.xcodeproj/project.pbxproj create mode 100644 i2020_03_14_Coordinator.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 i2020_03_14_Coordinator.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 i2020_03_14_Coordinator.xcodeproj/project.xcworkspace/xcuserdata/kenny.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 i2020_03_14_Coordinator.xcodeproj/xcuserdata/kenny.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 i2020_03_14_Coordinator.xcodeproj/xcuserdata/pgb15001.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 i2020_03_14_Coordinator/AppDelegate.swift create mode 100644 i2020_03_14_Coordinator/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 i2020_03_14_Coordinator/Assets.xcassets/Contents.json create mode 100644 i2020_03_14_Coordinator/Base.lproj/LaunchScreen.storyboard create mode 100644 i2020_03_14_Coordinator/Base.lproj/Main.storyboard create mode 100644 i2020_03_14_Coordinator/Coordinators/Coordinator.swift create mode 100644 i2020_03_14_Coordinator/Coordinators/MainCoordinator.swift create mode 100644 i2020_03_14_Coordinator/Coordinators/Storyboarded.swift create mode 100644 i2020_03_14_Coordinator/Info.plist create mode 100644 i2020_03_14_Coordinator/SceneDelegate.swift create mode 100644 i2020_03_14_Coordinator/ViewControllers/FourthViewController.swift create mode 100644 i2020_03_14_Coordinator/ViewControllers/SecondViewController.swift create mode 100644 i2020_03_14_Coordinator/ViewControllers/ThirdViewController.swift create mode 100644 i2020_03_14_Coordinator/ViewControllers/ViewController.swift create mode 100644 i2020_03_14_CoordinatorTests/Info.plist create mode 100644 i2020_03_14_CoordinatorTests/i2020_03_14_CoordinatorTests.swift create mode 100644 i2020_03_14_CoordinatorUITests/Info.plist create mode 100644 i2020_03_14_CoordinatorUITests/i2020_03_14_CoordinatorUITests.swift diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..309d5aa5ef3a0615f2036e02d20bfbdd7ca7fb73 GIT binary patch literal 6148 zcmeHKJx>Bb5Php8qBe9`7;{=#5l}mu6QQ865v^4?<43?FqKV}-{uqChzrr7&Z)P_N zhZH2lsF}IUy#1P)yO-?FEdW=4Olm+0K#?j~SfTkwWL|Va7Q)C9(P@k-&QQfJEn}M) z1IEBFXF&FD88_JBz7_r2zk6&SBIR?Bge&fFfd}cedTF=QOFQ(GV`HDX{jS0musK^a zRPcl@<0iPofVooK<}$p@KSS@T*6ybLfxaaGV2I zW~@<`H)f1`iWa8De$K^S#xa^WKm$j_3i?QLZ}XP(VAtf&F~FKFQe5?D))+7bjDb%E zWKPygSFEur3amdGzjZ znwfDzW*2TKPP217(&ccmN3+I&F)+@+qVJZZ{x_%J|HqxIXABqv|B3-uXtW!3ep0Bd w6CWqFHlm(WMPyy(QC(<4Io5`h;x(!Y=OSqk + + + + diff --git a/i2020_03_14_Coordinator.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/i2020_03_14_Coordinator.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/i2020_03_14_Coordinator.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/i2020_03_14_Coordinator.xcodeproj/project.xcworkspace/xcuserdata/kenny.xcuserdatad/UserInterfaceState.xcuserstate b/i2020_03_14_Coordinator.xcodeproj/project.xcworkspace/xcuserdata/kenny.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..2e668dd1c8c721e1efbfc804e9cf13de30ec4666 GIT binary patch literal 28324 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 D0)mp| literal 0 HcmV?d00001 diff --git a/i2020_03_14_Coordinator.xcodeproj/xcuserdata/kenny.xcuserdatad/xcschemes/xcschememanagement.plist b/i2020_03_14_Coordinator.xcodeproj/xcuserdata/kenny.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..08b4421 --- /dev/null +++ b/i2020_03_14_Coordinator.xcodeproj/xcuserdata/kenny.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + i2020_03_14_Coordinator.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/i2020_03_14_Coordinator.xcodeproj/xcuserdata/pgb15001.xcuserdatad/xcschemes/xcschememanagement.plist b/i2020_03_14_Coordinator.xcodeproj/xcuserdata/pgb15001.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..08b4421 --- /dev/null +++ b/i2020_03_14_Coordinator.xcodeproj/xcuserdata/pgb15001.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + i2020_03_14_Coordinator.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/i2020_03_14_Coordinator/AppDelegate.swift b/i2020_03_14_Coordinator/AppDelegate.swift new file mode 100644 index 0000000..3a05dbe --- /dev/null +++ b/i2020_03_14_Coordinator/AppDelegate.swift @@ -0,0 +1,58 @@ +// +// AppDelegate.swift +// i2020_03_14_Coordinator +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var coordinator: MainCoordinator? + var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // create the main navigation controller to be used for our app + /* + let navController = UINavigationController() + + // send that into our coordinator so that it can display view controllers + coordinator = MainCoordinator(navigationController: navController) + + // tell the coordinator to take over control + coordinator?.start() + + // create a basic UIWindow and activate it + window = UIWindow(frame: UIScreen.main.bounds) + window?.rootViewController = navController + window?.makeKeyAndVisible() + */ + + return true + } +/* + 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/i2020_03_14_Coordinator/Assets.xcassets/AppIcon.appiconset/Contents.json b/i2020_03_14_Coordinator/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/i2020_03_14_Coordinator/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/i2020_03_14_Coordinator/Assets.xcassets/Contents.json b/i2020_03_14_Coordinator/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/i2020_03_14_Coordinator/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/i2020_03_14_Coordinator/Base.lproj/LaunchScreen.storyboard b/i2020_03_14_Coordinator/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/i2020_03_14_Coordinator/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/i2020_03_14_Coordinator/Base.lproj/Main.storyboard b/i2020_03_14_Coordinator/Base.lproj/Main.storyboard new file mode 100644 index 0000000..7a8d68d --- /dev/null +++ b/i2020_03_14_Coordinator/Base.lproj/Main.storyboard @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/i2020_03_14_Coordinator/Coordinators/Coordinator.swift b/i2020_03_14_Coordinator/Coordinators/Coordinator.swift new file mode 100644 index 0000000..7570e6a --- /dev/null +++ b/i2020_03_14_Coordinator/Coordinators/Coordinator.swift @@ -0,0 +1,16 @@ +// +// Coordinator.swift +// i2020_03_14_Coordinator +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import UIKit + +protocol Coordinator { + var childCoordinators: [Coordinator] { get set } + var navigationController: UINavigationController { get set } + + func start() +} diff --git a/i2020_03_14_Coordinator/Coordinators/MainCoordinator.swift b/i2020_03_14_Coordinator/Coordinators/MainCoordinator.swift new file mode 100644 index 0000000..6a8eb2d --- /dev/null +++ b/i2020_03_14_Coordinator/Coordinators/MainCoordinator.swift @@ -0,0 +1,42 @@ +// +// MainCoordinator.swift +// i2020_03_14_Coordinator +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import UIKit + +class MainCoordinator: Coordinator { + var childCoordinators = [Coordinator]() + var navigationController: UINavigationController + + init(navigationController: UINavigationController) { + self.navigationController = navigationController + } + + func start() { + let vc = ViewController.instantiate() + vc.coordinator = self + navigationController.pushViewController(vc, animated: false) + } + + func buySubscription() { + let vc = SecondViewController.instantiate() + vc.coordinator = self + navigationController.pushViewController(vc, animated: true) + } + + func createAccount() { + let vc = ThirdViewController.instantiate() + vc.coordinator = self + navigationController.pushViewController(vc, animated: true) + } + + func cancelSubscription() { + let vc = FourthViewController.instantiate() + vc.coordinator = self + navigationController.pushViewController(vc, animated: true) + } +} diff --git a/i2020_03_14_Coordinator/Coordinators/Storyboarded.swift b/i2020_03_14_Coordinator/Coordinators/Storyboarded.swift new file mode 100644 index 0000000..479eac4 --- /dev/null +++ b/i2020_03_14_Coordinator/Coordinators/Storyboarded.swift @@ -0,0 +1,29 @@ +// +// Storyboarded.swift +// i2020_03_14_Coordinator +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import UIKit + +protocol Storyboarded { + static func instantiate() -> Self +} + +extension Storyboarded where Self: UIViewController { + static func instantiate() -> Self { + // this pulls out "MyApp.MyViewController" + let fullName = NSStringFromClass(self) + + // this splits by the dot and uses everything after, giving "MyViewController" + let className = fullName.components(separatedBy: ".")[1] + + // load our storyboard + let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) + + // instantiate a view controller with that identifier, and force cast as the type that was requested + return storyboard.instantiateViewController(withIdentifier: className) as! Self + } +} diff --git a/i2020_03_14_Coordinator/Info.plist b/i2020_03_14_Coordinator/Info.plist new file mode 100644 index 0000000..9592629 --- /dev/null +++ b/i2020_03_14_Coordinator/Info.plist @@ -0,0 +1,62 @@ + + + + + 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 + 1 + LSRequiresIPhoneOS + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/i2020_03_14_Coordinator/SceneDelegate.swift b/i2020_03_14_Coordinator/SceneDelegate.swift new file mode 100644 index 0000000..eedb027 --- /dev/null +++ b/i2020_03_14_Coordinator/SceneDelegate.swift @@ -0,0 +1,68 @@ +// +// SceneDelegate.swift +// i2020_03_14_Coordinator +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var coordinator: MainCoordinator? + 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 windowScene = (scene as? UIWindowScene) else { return } + + // create the main navigation controller to be used for our app + let navController = UINavigationController() + + // send that into our coordinator so that it can display view controllers + coordinator = MainCoordinator(navigationController: navController) + + // tell the coordinator to take over control + coordinator?.start() + + window = UIWindow(frame: windowScene.coordinateSpace.bounds) + window?.windowScene = windowScene + window?.rootViewController = navController + + window?.makeKeyAndVisible() + } + + 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 neccessarily 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/i2020_03_14_Coordinator/ViewControllers/FourthViewController.swift b/i2020_03_14_Coordinator/ViewControllers/FourthViewController.swift new file mode 100644 index 0000000..1101cde --- /dev/null +++ b/i2020_03_14_Coordinator/ViewControllers/FourthViewController.swift @@ -0,0 +1,21 @@ +// +// FourthViewController.swift +// i2020_03_14_Coordinator +// +// Created by Kenny Payes on 4/6/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import UIKit + +class FourthViewController: UIViewController, Storyboarded { + + var coordinator: MainCoordinator? + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + +} diff --git a/i2020_03_14_Coordinator/ViewControllers/SecondViewController.swift b/i2020_03_14_Coordinator/ViewControllers/SecondViewController.swift new file mode 100644 index 0000000..c966b38 --- /dev/null +++ b/i2020_03_14_Coordinator/ViewControllers/SecondViewController.swift @@ -0,0 +1,20 @@ +// +// SecondViewController.swift +// i2020_03_14_Coordinator +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import UIKit + +class SecondViewController: UIViewController, Storyboarded { + + weak var coordinator: MainCoordinator? + + override func viewDidLoad() { + super.viewDidLoad() + + } + +} diff --git a/i2020_03_14_Coordinator/ViewControllers/ThirdViewController.swift b/i2020_03_14_Coordinator/ViewControllers/ThirdViewController.swift new file mode 100644 index 0000000..079209a --- /dev/null +++ b/i2020_03_14_Coordinator/ViewControllers/ThirdViewController.swift @@ -0,0 +1,22 @@ +// +// ThirdViewController.swift +// i2020_03_14_Coordinator +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import UIKit + +class ThirdViewController: UIViewController, Storyboarded { + + var coordinator: MainCoordinator? + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + +} diff --git a/i2020_03_14_Coordinator/ViewControllers/ViewController.swift b/i2020_03_14_Coordinator/ViewControllers/ViewController.swift new file mode 100644 index 0000000..2a3083a --- /dev/null +++ b/i2020_03_14_Coordinator/ViewControllers/ViewController.swift @@ -0,0 +1,32 @@ +// +// ViewController.swift +// i2020_03_14_Coordinator +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController, Storyboarded { + + weak var coordinator: MainCoordinator? + + override func viewDidLoad() { + super.viewDidLoad() + } + + @IBAction func second(_ sender: Any) { + coordinator?.buySubscription() + } + + @IBAction func third(_ sender: Any) { + coordinator?.createAccount() + } + + @IBAction func fourth(_ sender: Any) { + coordinator?.cancelSubscription() + } + +} + diff --git a/i2020_03_14_CoordinatorTests/Info.plist b/i2020_03_14_CoordinatorTests/Info.plist new file mode 100644 index 0000000..64d65ca --- /dev/null +++ b/i2020_03_14_CoordinatorTests/Info.plist @@ -0,0 +1,22 @@ + + + + + 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 + 1 + + diff --git a/i2020_03_14_CoordinatorTests/i2020_03_14_CoordinatorTests.swift b/i2020_03_14_CoordinatorTests/i2020_03_14_CoordinatorTests.swift new file mode 100644 index 0000000..e3801be --- /dev/null +++ b/i2020_03_14_CoordinatorTests/i2020_03_14_CoordinatorTests.swift @@ -0,0 +1,34 @@ +// +// i2020_03_14_CoordinatorTests.swift +// i2020_03_14_CoordinatorTests +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import XCTest +@testable import i2020_03_14_Coordinator + +class i2020_03_14_CoordinatorTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/i2020_03_14_CoordinatorUITests/Info.plist b/i2020_03_14_CoordinatorUITests/Info.plist new file mode 100644 index 0000000..64d65ca --- /dev/null +++ b/i2020_03_14_CoordinatorUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + 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 + 1 + + diff --git a/i2020_03_14_CoordinatorUITests/i2020_03_14_CoordinatorUITests.swift b/i2020_03_14_CoordinatorUITests/i2020_03_14_CoordinatorUITests.swift new file mode 100644 index 0000000..257a648 --- /dev/null +++ b/i2020_03_14_CoordinatorUITests/i2020_03_14_CoordinatorUITests.swift @@ -0,0 +1,43 @@ +// +// i2020_03_14_CoordinatorUITests.swift +// i2020_03_14_CoordinatorUITests +// +// Created by Bradford, Phillip on 3/14/20. +// Copyright © 2020 Bradford, Phillip. All rights reserved. +// + +import XCTest + +class i2020_03_14_CoordinatorUITests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testLaunchPerformance() { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTOSSignpostMetric.applicationLaunch]) { + XCUIApplication().launch() + } + } + } +}