diff --git a/GetHomeSafe.xcodeproj/project.pbxproj b/GetHomeSafe.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c22c5a2 --- /dev/null +++ b/GetHomeSafe.xcodeproj/project.pbxproj @@ -0,0 +1,932 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 52; + objects = { + +/* Begin PBXBuildFile section */ + 1AE3551632B1F5B7F6509350 /* Pods_GetHomeSafe.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B506F4FCD3EBB53A42599755 /* Pods_GetHomeSafe.framework */; }; + 9ED8336007A167943A54CC7E /* Pods_GetHomeSafeTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 787BB452E39442B58A51EA34 /* Pods_GetHomeSafeTests.framework */; }; + F3051035262826DF00D63D64 /* SceneComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3051034262826DF00D63D64 /* SceneComponent.swift */; }; + F33BEAD926297AB500C5444B /* RootComponent+LoggedOut.swift in Sources */ = {isa = PBXBuildFile; fileRef = F33BEAD826297AB500C5444B /* RootComponent+LoggedOut.swift */; }; + F33BEB03262A9A9900C5444B /* LoggedInRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F33BEB00262A9A9900C5444B /* LoggedInRouter.swift */; }; + F33BEB04262A9A9900C5444B /* LoggedInBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F33BEB01262A9A9900C5444B /* LoggedInBuilder.swift */; }; + F33BEB05262A9A9900C5444B /* LoggedInInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F33BEB02262A9A9900C5444B /* LoggedInInteractor.swift */; }; + F386055F26397DF700DD5C47 /* State.swift in Sources */ = {isa = PBXBuildFile; fileRef = F386055E26397DF700DD5C47 /* State.swift */; }; + F38605612639934200DD5C47 /* RootComponent+LoggedIn.swift in Sources */ = {isa = PBXBuildFile; fileRef = F38605602639934200DD5C47 /* RootComponent+LoggedIn.swift */; }; + F3BC259726296B5000C7FC36 /* RootRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3BC259326296B5000C7FC36 /* RootRouter.swift */; }; + F3BC259826296B5000C7FC36 /* RootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3BC259426296B5000C7FC36 /* RootViewController.swift */; }; + F3BC259926296B5000C7FC36 /* RootBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3BC259526296B5000C7FC36 /* RootBuilder.swift */; }; + F3BC259A26296B5000C7FC36 /* RootInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3BC259626296B5000C7FC36 /* RootInteractor.swift */; }; + F3C8FF60262ABC2800111AB5 /* LoggedOutRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C8FF5C262ABC2800111AB5 /* LoggedOutRouter.swift */; }; + F3C8FF61262ABC2800111AB5 /* LoggedOutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C8FF5D262ABC2800111AB5 /* LoggedOutViewController.swift */; }; + F3C8FF62262ABC2800111AB5 /* LoggedOutBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C8FF5E262ABC2800111AB5 /* LoggedOutBuilder.swift */; }; + F3C8FF63262ABC2800111AB5 /* LoggedOutInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C8FF5F262ABC2800111AB5 /* LoggedOutInteractor.swift */; }; + F3C8FF6E262ABD9A00111AB5 /* AuthenticationUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C8FF6D262ABD9A00111AB5 /* AuthenticationUseCase.swift */; }; + F3C8FF77262AC0D000111AB5 /* UseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C8FF76262AC0D000111AB5 /* UseCase.swift */; }; + F3C8FF82262AC1AA00111AB5 /* AuthenticationModels+States+Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C8FF81262AC1AA00111AB5 /* AuthenticationModels+States+Errors.swift */; }; + F3C8FF98262AC83500111AB5 /* Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3C8FF97262AC83500111AB5 /* Model.swift */; }; + F3DCC1B5262A9FFB005247C4 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = F3DCC1B4262A9FFB005247C4 /* KeychainAccess */; }; + F3F598D1262815F700F48F72 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3F598D0262815F700F48F72 /* AppDelegate.swift */; }; + F3F598D3262815F700F48F72 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3F598D2262815F700F48F72 /* SceneDelegate.swift */; }; + F3F598DA262815F800F48F72 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F3F598D9262815F800F48F72 /* Assets.xcassets */; }; + F3F598DD262815F800F48F72 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F3F598DB262815F800F48F72 /* LaunchScreen.storyboard */; }; + F3F598E8262815F800F48F72 /* GetHomeSafeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3F598E7262815F800F48F72 /* GetHomeSafeTests.swift */; }; + F3F598F3262815F800F48F72 /* GetHomeSafeUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3F598F2262815F800F48F72 /* GetHomeSafeUITests.swift */; }; + FF84FA9216D150D02D2E4E0D /* Pods_GetHomeSafe_GetHomeSafeUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA0379B6BA4CCE5EB2A5EF7C /* Pods_GetHomeSafe_GetHomeSafeUITests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + F3F598E4262815F800F48F72 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F3F598C5262815F700F48F72 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F3F598CC262815F700F48F72; + remoteInfo = GetHomeSafe; + }; + F3F598EF262815F800F48F72 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F3F598C5262815F700F48F72 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F3F598CC262815F700F48F72; + remoteInfo = GetHomeSafe; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 1104A08C3662A833AC80AEBB /* Pods-GetHomeSafeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GetHomeSafeTests.release.xcconfig"; path = "Target Support Files/Pods-GetHomeSafeTests/Pods-GetHomeSafeTests.release.xcconfig"; sourceTree = ""; }; + 1ADAC4ACAFE6CA780C6E6934 /* Pods-GetHomeSafe.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GetHomeSafe.debug.xcconfig"; path = "Target Support Files/Pods-GetHomeSafe/Pods-GetHomeSafe.debug.xcconfig"; sourceTree = ""; }; + 34B65B1E2D7978ABC5162384 /* Pods-GetHomeSafe-GetHomeSafeUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GetHomeSafe-GetHomeSafeUITests.release.xcconfig"; path = "Target Support Files/Pods-GetHomeSafe-GetHomeSafeUITests/Pods-GetHomeSafe-GetHomeSafeUITests.release.xcconfig"; sourceTree = ""; }; + 47D7D65B5394D681FEED57AD /* Pods-GetHomeSafe-GetHomeSafeUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GetHomeSafe-GetHomeSafeUITests.debug.xcconfig"; path = "Target Support Files/Pods-GetHomeSafe-GetHomeSafeUITests/Pods-GetHomeSafe-GetHomeSafeUITests.debug.xcconfig"; sourceTree = ""; }; + 574ED229EC7B176A77908089 /* Pods-GetHomeSafeTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GetHomeSafeTests.debug.xcconfig"; path = "Target Support Files/Pods-GetHomeSafeTests/Pods-GetHomeSafeTests.debug.xcconfig"; sourceTree = ""; }; + 787BB452E39442B58A51EA34 /* Pods_GetHomeSafeTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GetHomeSafeTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D6C04E1238EFE0DA9858256 /* Pods-GetHomeSafe.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-GetHomeSafe.release.xcconfig"; path = "Target Support Files/Pods-GetHomeSafe/Pods-GetHomeSafe.release.xcconfig"; sourceTree = ""; }; + AA0379B6BA4CCE5EB2A5EF7C /* Pods_GetHomeSafe_GetHomeSafeUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GetHomeSafe_GetHomeSafeUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B506F4FCD3EBB53A42599755 /* Pods_GetHomeSafe.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_GetHomeSafe.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F3051034262826DF00D63D64 /* SceneComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneComponent.swift; sourceTree = ""; }; + F33BEAD826297AB500C5444B /* RootComponent+LoggedOut.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootComponent+LoggedOut.swift"; sourceTree = ""; }; + F33BEB00262A9A9900C5444B /* LoggedInRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedInRouter.swift; sourceTree = ""; }; + F33BEB01262A9A9900C5444B /* LoggedInBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedInBuilder.swift; sourceTree = ""; }; + F33BEB02262A9A9900C5444B /* LoggedInInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedInInteractor.swift; sourceTree = ""; }; + F386055E26397DF700DD5C47 /* State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = State.swift; sourceTree = ""; }; + F38605602639934200DD5C47 /* RootComponent+LoggedIn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RootComponent+LoggedIn.swift"; sourceTree = ""; }; + F3BC259326296B5000C7FC36 /* RootRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootRouter.swift; sourceTree = ""; }; + F3BC259426296B5000C7FC36 /* RootViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; }; + F3BC259526296B5000C7FC36 /* RootBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootBuilder.swift; sourceTree = ""; }; + F3BC259626296B5000C7FC36 /* RootInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootInteractor.swift; sourceTree = ""; }; + F3C8FF5C262ABC2800111AB5 /* LoggedOutRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedOutRouter.swift; sourceTree = ""; }; + F3C8FF5D262ABC2800111AB5 /* LoggedOutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedOutViewController.swift; sourceTree = ""; }; + F3C8FF5E262ABC2800111AB5 /* LoggedOutBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedOutBuilder.swift; sourceTree = ""; }; + F3C8FF5F262ABC2800111AB5 /* LoggedOutInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedOutInteractor.swift; sourceTree = ""; }; + F3C8FF6D262ABD9A00111AB5 /* AuthenticationUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationUseCase.swift; sourceTree = ""; }; + F3C8FF76262AC0D000111AB5 /* UseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UseCase.swift; sourceTree = ""; }; + F3C8FF81262AC1AA00111AB5 /* AuthenticationModels+States+Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AuthenticationModels+States+Errors.swift"; sourceTree = ""; }; + F3C8FF97262AC83500111AB5 /* Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Model.swift; sourceTree = ""; }; + F3F598CD262815F700F48F72 /* GetHomeSafe.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GetHomeSafe.app; sourceTree = BUILT_PRODUCTS_DIR; }; + F3F598D0262815F700F48F72 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + F3F598D2262815F700F48F72 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; + F3F598D9262815F800F48F72 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + F3F598DC262815F800F48F72 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + F3F598DE262815F800F48F72 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F3F598E3262815F800F48F72 /* GetHomeSafeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GetHomeSafeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + F3F598E7262815F800F48F72 /* GetHomeSafeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetHomeSafeTests.swift; sourceTree = ""; }; + F3F598E9262815F800F48F72 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F3F598EE262815F800F48F72 /* GetHomeSafeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GetHomeSafeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + F3F598F2262815F800F48F72 /* GetHomeSafeUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetHomeSafeUITests.swift; sourceTree = ""; }; + F3F598F4262815F800F48F72 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F3F598CA262815F700F48F72 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F3DCC1B5262A9FFB005247C4 /* KeychainAccess in Frameworks */, + 1AE3551632B1F5B7F6509350 /* Pods_GetHomeSafe.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3F598E0262815F800F48F72 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9ED8336007A167943A54CC7E /* Pods_GetHomeSafeTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3F598EB262815F800F48F72 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FF84FA9216D150D02D2E4E0D /* Pods_GetHomeSafe_GetHomeSafeUITests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2175208C3ADB63F0FD3DF122 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B506F4FCD3EBB53A42599755 /* Pods_GetHomeSafe.framework */, + AA0379B6BA4CCE5EB2A5EF7C /* Pods_GetHomeSafe_GetHomeSafeUITests.framework */, + 787BB452E39442B58A51EA34 /* Pods_GetHomeSafeTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + AB1787B9BF25548B9B6DEA48 /* Pods */ = { + isa = PBXGroup; + children = ( + 1ADAC4ACAFE6CA780C6E6934 /* Pods-GetHomeSafe.debug.xcconfig */, + 9D6C04E1238EFE0DA9858256 /* Pods-GetHomeSafe.release.xcconfig */, + 47D7D65B5394D681FEED57AD /* Pods-GetHomeSafe-GetHomeSafeUITests.debug.xcconfig */, + 34B65B1E2D7978ABC5162384 /* Pods-GetHomeSafe-GetHomeSafeUITests.release.xcconfig */, + 574ED229EC7B176A77908089 /* Pods-GetHomeSafeTests.debug.xcconfig */, + 1104A08C3662A833AC80AEBB /* Pods-GetHomeSafeTests.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + F305100B262825FA00D63D64 /* Root */ = { + isa = PBXGroup; + children = ( + F3BC259326296B5000C7FC36 /* RootRouter.swift */, + F3BC259426296B5000C7FC36 /* RootViewController.swift */, + F3BC259526296B5000C7FC36 /* RootBuilder.swift */, + F3BC259626296B5000C7FC36 /* RootInteractor.swift */, + F33BEAD826297AB500C5444B /* RootComponent+LoggedOut.swift */, + F38605602639934200DD5C47 /* RootComponent+LoggedIn.swift */, + ); + path = Root; + sourceTree = ""; + }; + F30510182628264000D63D64 /* App */ = { + isa = PBXGroup; + children = ( + F3F598D0262815F700F48F72 /* AppDelegate.swift */, + F3F598D2262815F700F48F72 /* SceneDelegate.swift */, + F3051034262826DF00D63D64 /* SceneComponent.swift */, + ); + path = App; + sourceTree = ""; + }; + F33BEAFF262A97D500C5444B /* LoggedIn */ = { + isa = PBXGroup; + children = ( + F33BEB00262A9A9900C5444B /* LoggedInRouter.swift */, + F33BEB01262A9A9900C5444B /* LoggedInBuilder.swift */, + F33BEB02262A9A9900C5444B /* LoggedInInteractor.swift */, + ); + path = LoggedIn; + sourceTree = ""; + }; + F3C8FF5B262ABC1800111AB5 /* LoggedOut */ = { + isa = PBXGroup; + children = ( + F3C8FF5C262ABC2800111AB5 /* LoggedOutRouter.swift */, + F3C8FF5D262ABC2800111AB5 /* LoggedOutViewController.swift */, + F3C8FF5E262ABC2800111AB5 /* LoggedOutBuilder.swift */, + F3C8FF5F262ABC2800111AB5 /* LoggedOutInteractor.swift */, + ); + path = LoggedOut; + sourceTree = ""; + }; + F3C8FF6A262ABC4A00111AB5 /* Problem Domain */ = { + isa = PBXGroup; + children = ( + F3C8FF7B262AC17300111AB5 /* Protocols */, + F3C8FF75262AC05800111AB5 /* Models+States+Errors */, + F3C8FF6B262ABD0E00111AB5 /* UseCases */, + ); + path = "Problem Domain"; + sourceTree = ""; + }; + F3C8FF6B262ABD0E00111AB5 /* UseCases */ = { + isa = PBXGroup; + children = ( + F3C8FF6D262ABD9A00111AB5 /* AuthenticationUseCase.swift */, + ); + path = UseCases; + sourceTree = ""; + }; + F3C8FF75262AC05800111AB5 /* Models+States+Errors */ = { + isa = PBXGroup; + children = ( + F3C8FF81262AC1AA00111AB5 /* AuthenticationModels+States+Errors.swift */, + ); + path = "Models+States+Errors"; + sourceTree = ""; + }; + F3C8FF7B262AC17300111AB5 /* Protocols */ = { + isa = PBXGroup; + children = ( + F3C8FF76262AC0D000111AB5 /* UseCase.swift */, + F3C8FF97262AC83500111AB5 /* Model.swift */, + F386055E26397DF700DD5C47 /* State.swift */, + ); + path = Protocols; + sourceTree = ""; + }; + F3DCC1B9262ABA88005247C4 /* RIBs */ = { + isa = PBXGroup; + children = ( + F3C8FF5B262ABC1800111AB5 /* LoggedOut */, + F33BEAFF262A97D500C5444B /* LoggedIn */, + F305100B262825FA00D63D64 /* Root */, + ); + path = RIBs; + sourceTree = ""; + }; + F3F598C4262815F700F48F72 = { + isa = PBXGroup; + children = ( + F3F598CF262815F700F48F72 /* GetHomeSafe */, + F3F598E6262815F800F48F72 /* GetHomeSafeTests */, + F3F598F1262815F800F48F72 /* GetHomeSafeUITests */, + F3F598CE262815F700F48F72 /* Products */, + AB1787B9BF25548B9B6DEA48 /* Pods */, + 2175208C3ADB63F0FD3DF122 /* Frameworks */, + ); + sourceTree = ""; + }; + F3F598CE262815F700F48F72 /* Products */ = { + isa = PBXGroup; + children = ( + F3F598CD262815F700F48F72 /* GetHomeSafe.app */, + F3F598E3262815F800F48F72 /* GetHomeSafeTests.xctest */, + F3F598EE262815F800F48F72 /* GetHomeSafeUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + F3F598CF262815F700F48F72 /* GetHomeSafe */ = { + isa = PBXGroup; + children = ( + F3C8FF6A262ABC4A00111AB5 /* Problem Domain */, + F3DCC1B9262ABA88005247C4 /* RIBs */, + F30510182628264000D63D64 /* App */, + F3F598D9262815F800F48F72 /* Assets.xcassets */, + F3F598DB262815F800F48F72 /* LaunchScreen.storyboard */, + F3F598DE262815F800F48F72 /* Info.plist */, + ); + path = GetHomeSafe; + sourceTree = ""; + }; + F3F598E6262815F800F48F72 /* GetHomeSafeTests */ = { + isa = PBXGroup; + children = ( + F3F598E7262815F800F48F72 /* GetHomeSafeTests.swift */, + F3F598E9262815F800F48F72 /* Info.plist */, + ); + path = GetHomeSafeTests; + sourceTree = ""; + }; + F3F598F1262815F800F48F72 /* GetHomeSafeUITests */ = { + isa = PBXGroup; + children = ( + F3F598F2262815F800F48F72 /* GetHomeSafeUITests.swift */, + F3F598F4262815F800F48F72 /* Info.plist */, + ); + path = GetHomeSafeUITests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + F3F598CC262815F700F48F72 /* GetHomeSafe */ = { + isa = PBXNativeTarget; + buildConfigurationList = F3F598F7262815F800F48F72 /* Build configuration list for PBXNativeTarget "GetHomeSafe" */; + buildPhases = ( + F3BC25BF262973E900C7FC36 /* Run SwiftLint */, + EE10137B69D0CD5BC956DFE8 /* [CP] Check Pods Manifest.lock */, + F3F598C9262815F700F48F72 /* Sources */, + F3F598CA262815F700F48F72 /* Frameworks */, + F3F598CB262815F700F48F72 /* Resources */, + 29B1069970D0CF1AEEF0A52E /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = GetHomeSafe; + packageProductDependencies = ( + F3DCC1B4262A9FFB005247C4 /* KeychainAccess */, + ); + productName = GetHomeSafe; + productReference = F3F598CD262815F700F48F72 /* GetHomeSafe.app */; + productType = "com.apple.product-type.application"; + }; + F3F598E2262815F800F48F72 /* GetHomeSafeTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F3F598FA262815F800F48F72 /* Build configuration list for PBXNativeTarget "GetHomeSafeTests" */; + buildPhases = ( + 7251DB42AD210C42E8E196B1 /* [CP] Check Pods Manifest.lock */, + F3F598DF262815F800F48F72 /* Sources */, + F3F598E0262815F800F48F72 /* Frameworks */, + F3F598E1262815F800F48F72 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + F3F598E5262815F800F48F72 /* PBXTargetDependency */, + ); + name = GetHomeSafeTests; + productName = GetHomeSafeTests; + productReference = F3F598E3262815F800F48F72 /* GetHomeSafeTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + F3F598ED262815F800F48F72 /* GetHomeSafeUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F3F598FD262815F800F48F72 /* Build configuration list for PBXNativeTarget "GetHomeSafeUITests" */; + buildPhases = ( + FBCF73329282E5F0D6697ACD /* [CP] Check Pods Manifest.lock */, + F3F598EA262815F800F48F72 /* Sources */, + F3F598EB262815F800F48F72 /* Frameworks */, + F3F598EC262815F800F48F72 /* Resources */, + 3EA587CD0F57553D5B4E0BF2 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + F3F598F0262815F800F48F72 /* PBXTargetDependency */, + ); + name = GetHomeSafeUITests; + productName = GetHomeSafeUITests; + productReference = F3F598EE262815F800F48F72 /* GetHomeSafeUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F3F598C5262815F700F48F72 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1240; + LastUpgradeCheck = 1240; + TargetAttributes = { + F3F598CC262815F700F48F72 = { + CreatedOnToolsVersion = 12.4; + }; + F3F598E2262815F800F48F72 = { + CreatedOnToolsVersion = 12.4; + TestTargetID = F3F598CC262815F700F48F72; + }; + F3F598ED262815F800F48F72 = { + CreatedOnToolsVersion = 12.4; + TestTargetID = F3F598CC262815F700F48F72; + }; + }; + }; + buildConfigurationList = F3F598C8262815F700F48F72 /* Build configuration list for PBXProject "GetHomeSafe" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = F3F598C4262815F700F48F72; + packageReferences = ( + F3DCC1B3262A9FFB005247C4 /* XCRemoteSwiftPackageReference "KeychainAccess" */, + ); + productRefGroup = F3F598CE262815F700F48F72 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F3F598CC262815F700F48F72 /* GetHomeSafe */, + F3F598E2262815F800F48F72 /* GetHomeSafeTests */, + F3F598ED262815F800F48F72 /* GetHomeSafeUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + F3F598CB262815F700F48F72 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F3F598DD262815F800F48F72 /* LaunchScreen.storyboard in Resources */, + F3F598DA262815F800F48F72 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3F598E1262815F800F48F72 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3F598EC262815F800F48F72 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 29B1069970D0CF1AEEF0A52E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-GetHomeSafe/Pods-GetHomeSafe-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-GetHomeSafe/Pods-GetHomeSafe-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-GetHomeSafe/Pods-GetHomeSafe-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3EA587CD0F57553D5B4E0BF2 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-GetHomeSafe-GetHomeSafeUITests/Pods-GetHomeSafe-GetHomeSafeUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-GetHomeSafe-GetHomeSafeUITests/Pods-GetHomeSafe-GetHomeSafeUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-GetHomeSafe-GetHomeSafeUITests/Pods-GetHomeSafe-GetHomeSafeUITests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 7251DB42AD210C42E8E196B1 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-GetHomeSafeTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + 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; + }; + EE10137B69D0CD5BC956DFE8 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-GetHomeSafe-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + 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; + }; + F3BC25BF262973E900C7FC36 /* Run SwiftLint */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Run SwiftLint"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if which swiftlint >/dev/null; then\n swiftlint autocorrect && swiftlint --config \"${SRCROOT}/.swiftlint.yml\"\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; + }; + FBCF73329282E5F0D6697ACD /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-GetHomeSafe-GetHomeSafeUITests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + 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; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F3F598C9262815F700F48F72 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F33BEB04262A9A9900C5444B /* LoggedInBuilder.swift in Sources */, + F3BC259826296B5000C7FC36 /* RootViewController.swift in Sources */, + F3C8FF63262ABC2800111AB5 /* LoggedOutInteractor.swift in Sources */, + F3C8FF61262ABC2800111AB5 /* LoggedOutViewController.swift in Sources */, + F386055F26397DF700DD5C47 /* State.swift in Sources */, + F3BC259726296B5000C7FC36 /* RootRouter.swift in Sources */, + F33BEAD926297AB500C5444B /* RootComponent+LoggedOut.swift in Sources */, + F3BC259A26296B5000C7FC36 /* RootInteractor.swift in Sources */, + F3C8FF77262AC0D000111AB5 /* UseCase.swift in Sources */, + F3F598D1262815F700F48F72 /* AppDelegate.swift in Sources */, + F38605612639934200DD5C47 /* RootComponent+LoggedIn.swift in Sources */, + F3F598D3262815F700F48F72 /* SceneDelegate.swift in Sources */, + F3C8FF60262ABC2800111AB5 /* LoggedOutRouter.swift in Sources */, + F3051035262826DF00D63D64 /* SceneComponent.swift in Sources */, + F3C8FF62262ABC2800111AB5 /* LoggedOutBuilder.swift in Sources */, + F33BEB03262A9A9900C5444B /* LoggedInRouter.swift in Sources */, + F3C8FF82262AC1AA00111AB5 /* AuthenticationModels+States+Errors.swift in Sources */, + F33BEB05262A9A9900C5444B /* LoggedInInteractor.swift in Sources */, + F3BC259926296B5000C7FC36 /* RootBuilder.swift in Sources */, + F3C8FF98262AC83500111AB5 /* Model.swift in Sources */, + F3C8FF6E262ABD9A00111AB5 /* AuthenticationUseCase.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3F598DF262815F800F48F72 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F3F598E8262815F800F48F72 /* GetHomeSafeTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F3F598EA262815F800F48F72 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F3F598F3262815F800F48F72 /* GetHomeSafeUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + F3F598E5262815F800F48F72 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F3F598CC262815F700F48F72 /* GetHomeSafe */; + targetProxy = F3F598E4262815F800F48F72 /* PBXContainerItemProxy */; + }; + F3F598F0262815F800F48F72 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F3F598CC262815F700F48F72 /* GetHomeSafe */; + targetProxy = F3F598EF262815F800F48F72 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + F3F598DB262815F800F48F72 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + F3F598DC262815F800F48F72 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + F3F598F5262815F800F48F72 /* 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_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.4; + 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; + }; + F3F598F6262815F800F48F72 /* 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_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.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + F3F598F8262815F800F48F72 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1ADAC4ACAFE6CA780C6E6934 /* Pods-GetHomeSafe.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 24523H34CV; + INFOPLIST_FILE = GetHomeSafe/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.gon125.GetHomeSafe; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + F3F598F9262815F800F48F72 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9D6C04E1238EFE0DA9858256 /* Pods-GetHomeSafe.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 24523H34CV; + INFOPLIST_FILE = GetHomeSafe/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.gon125.GetHomeSafe; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + F3F598FB262815F800F48F72 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 574ED229EC7B176A77908089 /* Pods-GetHomeSafeTests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 24523H34CV; + INFOPLIST_FILE = GetHomeSafeTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.gon125.GetHomeSafeTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GetHomeSafe.app/GetHomeSafe"; + }; + name = Debug; + }; + F3F598FC262815F800F48F72 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1104A08C3662A833AC80AEBB /* Pods-GetHomeSafeTests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 24523H34CV; + INFOPLIST_FILE = GetHomeSafeTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.gon125.GetHomeSafeTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GetHomeSafe.app/GetHomeSafe"; + }; + name = Release; + }; + F3F598FE262815F800F48F72 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 47D7D65B5394D681FEED57AD /* Pods-GetHomeSafe-GetHomeSafeUITests.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 24523H34CV; + INFOPLIST_FILE = GetHomeSafeUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.gon125.GetHomeSafeUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = GetHomeSafe; + }; + name = Debug; + }; + F3F598FF262815F800F48F72 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 34B65B1E2D7978ABC5162384 /* Pods-GetHomeSafe-GetHomeSafeUITests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 24523H34CV; + INFOPLIST_FILE = GetHomeSafeUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.github.gon125.GetHomeSafeUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = GetHomeSafe; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F3F598C8262815F700F48F72 /* Build configuration list for PBXProject "GetHomeSafe" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F3F598F5262815F800F48F72 /* Debug */, + F3F598F6262815F800F48F72 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F3F598F7262815F800F48F72 /* Build configuration list for PBXNativeTarget "GetHomeSafe" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F3F598F8262815F800F48F72 /* Debug */, + F3F598F9262815F800F48F72 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F3F598FA262815F800F48F72 /* Build configuration list for PBXNativeTarget "GetHomeSafeTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F3F598FB262815F800F48F72 /* Debug */, + F3F598FC262815F800F48F72 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F3F598FD262815F800F48F72 /* Build configuration list for PBXNativeTarget "GetHomeSafeUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F3F598FE262815F800F48F72 /* Debug */, + F3F598FF262815F800F48F72 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + F3DCC1B3262A9FFB005247C4 /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.2.2; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + F3DCC1B4262A9FFB005247C4 /* KeychainAccess */ = { + isa = XCSwiftPackageProductDependency; + package = F3DCC1B3262A9FFB005247C4 /* XCRemoteSwiftPackageReference "KeychainAccess" */; + productName = KeychainAccess; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = F3F598C5262815F700F48F72 /* Project object */; +} diff --git a/GetHomeSafe.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/GetHomeSafe.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/GetHomeSafe.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/GetHomeSafe.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/GetHomeSafe.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/GetHomeSafe.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/GetHomeSafe.xcworkspace/contents.xcworkspacedata b/GetHomeSafe.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..6955c41 --- /dev/null +++ b/GetHomeSafe.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/GetHomeSafe.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/GetHomeSafe.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/GetHomeSafe.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/GetHomeSafe.xcworkspace/xcshareddata/swiftpm/Package.resolved b/GetHomeSafe.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..344c54f --- /dev/null +++ b/GetHomeSafe.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "KeychainAccess", + "repositoryURL": "https://github.com/kishikawakatsumi/KeychainAccess.git", + "state": { + "branch": null, + "revision": "84e546727d66f1adc5439debad16270d0fdd04e7", + "version": "4.2.2" + } + } + ] + }, + "version": 1 +} diff --git a/GetHomeSafe/App/AppDelegate.swift b/GetHomeSafe/App/AppDelegate.swift new file mode 100644 index 0000000..84f4f17 --- /dev/null +++ b/GetHomeSafe/App/AppDelegate.swift @@ -0,0 +1,34 @@ +// +// AppDelegate.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/15. +// +import RIBs +import UIKit + +@main +class AppDelegate: UIResponder, UIApplicationDelegate { + + public var window: UIWindow? + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + return true + } + + // MARK: UISceneSession Lifecycle + + @available(iOS 13.0, *) + 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) + } + + @available(iOS 13.0, *) + 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/GetHomeSafe/App/SceneComponent.swift b/GetHomeSafe/App/SceneComponent.swift new file mode 100644 index 0000000..b7ad4ad --- /dev/null +++ b/GetHomeSafe/App/SceneComponent.swift @@ -0,0 +1,37 @@ +// +// AppComponent.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/15. +// + +import RIBs +import KeychainAccess + +class SceneComponent: Component, RootDependency { + var authenticationModule: AuthenticationModule + + // private static let authenticationModule + // var authenticationModule: AuthenticationModule = + + init() { + authenticationModule = .init() + super.init(dependency: EmptyComponent()) + } +} + +struct AuthenticationModule { + var authenticationToken: String { + get { + Self.keychain[currentUserKey] ?? "" + } + set { + Self.keychain[currentUserKey] = newValue + } + + } + // MARK: - Private + private let currentUserKey = "current" + private static let bundleIdentifier = "com.github.gon125.GetHomeSafe" + private static let keychain = Keychain(service: bundleIdentifier) +} diff --git a/GetHomeSafe/App/SceneDelegate.swift b/GetHomeSafe/App/SceneDelegate.swift new file mode 100644 index 0000000..09f27ab --- /dev/null +++ b/GetHomeSafe/App/SceneDelegate.swift @@ -0,0 +1,75 @@ +// +// SceneDelegate.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/15. +// + +import UIKit +import RIBs + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + @available(iOS 13.0, *) + 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 } + let window = UIWindow(windowScene: windowScene) + self.window = window + + let root = RootBuilder(dependency: SceneComponent()).build() + self.launchRouter = root + launchRouter?.launchFromWindow(window) + + if let activiy = connectionOptions.userActivities.first ?? session.stateRestorationActivity { + scene.restoreUserActivityState(activiy) + } + } + + @available(iOS 13.0, *) + 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). + } + + @available(iOS 13.0, *) + 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. + } + + @available(iOS 13.0, *) + 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). + } + + @available(iOS 13.0, *) + 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. + } + + @available(iOS 13.0, *) + 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. + } + + @available(iOS 13.0, *) + func stateRestorationActivity(for scene: UIScene) -> NSUserActivity? { + let currentActiviy = scene.userActivity + return currentActiviy + } + + // MARK: - Private + private var launchRouter: LaunchRouting? + +} diff --git a/GetHomeSafe/Assets.xcassets/AccentColor.colorset/Contents.json b/GetHomeSafe/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/GetHomeSafe/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GetHomeSafe/Assets.xcassets/AppIcon.appiconset/Contents.json b/GetHomeSafe/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/GetHomeSafe/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GetHomeSafe/Assets.xcassets/Contents.json b/GetHomeSafe/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/GetHomeSafe/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/GetHomeSafe/Base.lproj/LaunchScreen.storyboard b/GetHomeSafe/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..865e932 --- /dev/null +++ b/GetHomeSafe/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GetHomeSafe/Info.plist b/GetHomeSafe/Info.plist new file mode 100644 index 0000000..c8c9e5b --- /dev/null +++ b/GetHomeSafe/Info.plist @@ -0,0 +1,64 @@ + + + + + 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 + + + + + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/GetHomeSafe/Problem Domain/Models+States+Errors/AuthenticationModels+States+Errors.swift b/GetHomeSafe/Problem Domain/Models+States+Errors/AuthenticationModels+States+Errors.swift new file mode 100644 index 0000000..96bb3fe --- /dev/null +++ b/GetHomeSafe/Problem Domain/Models+States+Errors/AuthenticationModels+States+Errors.swift @@ -0,0 +1,57 @@ +// +// AuthenticationModels.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +import Foundation + +struct SignupModel: Model { + +} + +enum SignupState: State { + case notRequested + case isInProgress + case success + case failed(SignupError) +} + +enum SignupError: Error { + case invalidPassword(PasswordError) + case externalError(String) + + enum PasswordError: Error { + case empty + case noMatch + case notStrongEnough + } +} + +struct LoginModel: Model { + +} + +enum LoginState: State { + case notRequested + case isInProgress + case success + case failed(LoginError) +} + +enum LoginError: Error { + case invalidUsername + case invalidPassword + case externalError(String) +} + +#if DEBUG +extension SignupModel { + static let stub = Self() +} + +extension LoginModel { + static let stub = Self() +} +#endif diff --git a/GetHomeSafe/Problem Domain/Protocols/Model.swift b/GetHomeSafe/Problem Domain/Protocols/Model.swift new file mode 100644 index 0000000..c0dbb0b --- /dev/null +++ b/GetHomeSafe/Problem Domain/Protocols/Model.swift @@ -0,0 +1,8 @@ +// +// Model.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +protocol Model {} diff --git a/GetHomeSafe/Problem Domain/Protocols/State.swift b/GetHomeSafe/Problem Domain/Protocols/State.swift new file mode 100644 index 0000000..265072d --- /dev/null +++ b/GetHomeSafe/Problem Domain/Protocols/State.swift @@ -0,0 +1,8 @@ +// +// State.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/28. +// + +protocol State {} diff --git a/GetHomeSafe/Problem Domain/Protocols/UseCase.swift b/GetHomeSafe/Problem Domain/Protocols/UseCase.swift new file mode 100644 index 0000000..5dce4ed --- /dev/null +++ b/GetHomeSafe/Problem Domain/Protocols/UseCase.swift @@ -0,0 +1,8 @@ +// +// UseCase.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +protocol UseCase {} diff --git a/GetHomeSafe/Problem Domain/States/AuthenticationStates.swift b/GetHomeSafe/Problem Domain/States/AuthenticationStates.swift new file mode 100644 index 0000000..0c21bf9 --- /dev/null +++ b/GetHomeSafe/Problem Domain/States/AuthenticationStates.swift @@ -0,0 +1,8 @@ +// +// AuthenticationStates.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/28. +// + +import Foundation diff --git a/GetHomeSafe/Problem Domain/UseCases/AuthenticationUseCase.swift b/GetHomeSafe/Problem Domain/UseCases/AuthenticationUseCase.swift new file mode 100644 index 0000000..3a6a4a2 --- /dev/null +++ b/GetHomeSafe/Problem Domain/UseCases/AuthenticationUseCase.swift @@ -0,0 +1,35 @@ +// +// AuthenticationUsecase.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +import Foundation +import RxSwift + +protocol AuthenticationUseCase: UseCase { + func signup(_ model: SignupModel) -> Observable + func login(_ model: LoginModel) -> Observable + func logout() + func isLoggedIn() -> Observable +} + +#if DEBUG +final class StubAuthenticationUseCase: AuthenticationUseCase { + + func signup(_ model: SignupModel) -> Observable { + Observable.of(SignupState.success) + } + + func login(_ model: LoginModel) -> Observable { + Observable.of(LoginState.success) + } + + func logout() { } + + func isLoggedIn() -> Observable { + Observable.of(true) + } +} +#endif diff --git a/GetHomeSafe/RIBs/LoggedIn/LoggedInBuilder.swift b/GetHomeSafe/RIBs/LoggedIn/LoggedInBuilder.swift new file mode 100644 index 0000000..c362ca1 --- /dev/null +++ b/GetHomeSafe/RIBs/LoggedIn/LoggedInBuilder.swift @@ -0,0 +1,45 @@ +// +// LoggedInBuilder.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +import RIBs + +protocol LoggedInDependency: Dependency { + // TODO: Make sure to convert the variable into lower-camelcase. + var LoggedInViewController: LoggedInViewControllable { get } + // TODO: Declare the set of dependencies required by this RIB, but won't be + // created by this RIB. +} + +final class LoggedInComponent: Component { + + // TODO: Make sure to convert the variable into lower-camelcase. + fileprivate var LoggedInViewController: LoggedInViewControllable { + return dependency.LoggedInViewController + } + + // TODO: Declare 'fileprivate' dependencies that are only used by this RIB. +} + +// MARK: - Builder + +protocol LoggedInBuildable: Buildable { + func build(withListener listener: LoggedInListener) -> LoggedInRouting +} + +final class LoggedInBuilder: Builder, LoggedInBuildable { + + override init(dependency: LoggedInDependency) { + super.init(dependency: dependency) + } + + func build(withListener listener: LoggedInListener) -> LoggedInRouting { + let component = LoggedInComponent(dependency: dependency) + let interactor = LoggedInInteractor() + interactor.listener = listener + return LoggedInRouter(interactor: interactor, viewController: component.LoggedInViewController) + } +} diff --git a/GetHomeSafe/RIBs/LoggedIn/LoggedInInteractor.swift b/GetHomeSafe/RIBs/LoggedIn/LoggedInInteractor.swift new file mode 100644 index 0000000..6cc3112 --- /dev/null +++ b/GetHomeSafe/RIBs/LoggedIn/LoggedInInteractor.swift @@ -0,0 +1,40 @@ +// +// LoggedInInteractor.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +import RIBs +import RxSwift + +protocol LoggedInRouting: Routing { + func cleanupViews() + // TODO: Declare methods the interactor can invoke to manage sub-tree via the router. +} + +protocol LoggedInListener: AnyObject { + // TODO: Declare methods the interactor can invoke to communicate with other RIBs. +} + +final class LoggedInInteractor: Interactor, LoggedInInteractable { + + weak var router: LoggedInRouting? + weak var listener: LoggedInListener? + + // TODO: Add additional dependencies to constructor. Do not perform any logic + // in constructor. + override init() {} + + override func didBecomeActive() { + super.didBecomeActive() + // TODO: Implement business logic here. + } + + override func willResignActive() { + super.willResignActive() + + router?.cleanupViews() + // TODO: Pause any business logic. + } +} diff --git a/GetHomeSafe/RIBs/LoggedIn/LoggedInRouter.swift b/GetHomeSafe/RIBs/LoggedIn/LoggedInRouter.swift new file mode 100644 index 0000000..00af539 --- /dev/null +++ b/GetHomeSafe/RIBs/LoggedIn/LoggedInRouter.swift @@ -0,0 +1,38 @@ +// +// LoggedInRouter.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +import RIBs + +protocol LoggedInInteractable: Interactable { + var router: LoggedInRouting? { get set } + var listener: LoggedInListener? { get set } +} + +protocol LoggedInViewControllable: ViewControllable { + // TODO: Declare methods the router invokes to manipulate the view hierarchy. Since + // this RIB does not own its own view, this protocol is conformed to by one of this + // RIB's ancestor RIBs' view. +} + +final class LoggedInRouter: Router, LoggedInRouting { + + // TODO: Constructor inject child builder protocols to allow building children. + init(interactor: LoggedInInteractable, viewController: LoggedInViewControllable) { + self.viewController = viewController + super.init(interactor: interactor) + interactor.router = self + } + + func cleanupViews() { + // TODO: Since this router does not own its view, it needs to cleanup the views + // it may have added to the view hierarchy, when its interactor is deactivated. + } + + // MARK: - Private + + private let viewController: LoggedInViewControllable +} diff --git a/GetHomeSafe/RIBs/LoggedOut/LoggedOutBuilder.swift b/GetHomeSafe/RIBs/LoggedOut/LoggedOutBuilder.swift new file mode 100644 index 0000000..b4be8cf --- /dev/null +++ b/GetHomeSafe/RIBs/LoggedOut/LoggedOutBuilder.swift @@ -0,0 +1,38 @@ +// +// LoggedOutBuilder.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +import RIBs + +protocol LoggedOutDependency: Dependency { + var authenticationUseCase: AuthenticationUseCase { get } +} + +final class LoggedOutComponent: Component { + + // TODO: Declare 'fileprivate' dependencies that are only used by this RIB. +} + +// MARK: - Builder + +protocol LoggedOutBuildable: Buildable { + func build(withListener listener: LoggedOutListener) -> LoggedOutRouting +} + +final class LoggedOutBuilder: Builder, LoggedOutBuildable { + + override init(dependency: LoggedOutDependency) { + super.init(dependency: dependency) + } + + func build(withListener listener: LoggedOutListener) -> LoggedOutRouting { + _ = LoggedOutComponent(dependency: dependency) + let viewController = LoggedOutViewController() + let interactor = LoggedOutInteractor(presenter: viewController, authenticationUseCase: dependency.authenticationUseCase) + interactor.listener = listener + return LoggedOutRouter(interactor: interactor, viewController: viewController) + } +} diff --git a/GetHomeSafe/RIBs/LoggedOut/LoggedOutInteractor.swift b/GetHomeSafe/RIBs/LoggedOut/LoggedOutInteractor.swift new file mode 100644 index 0000000..612c4b2 --- /dev/null +++ b/GetHomeSafe/RIBs/LoggedOut/LoggedOutInteractor.swift @@ -0,0 +1,58 @@ +// +// LoggedOutInteractor.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +import RIBs +import RxSwift + +protocol LoggedOutRouting: ViewableRouting { + // TODO: Declare methods the interactor can invoke to manage sub-tree via the router. +} + +protocol LoggedOutPresentable: Presentable { + var listener: LoggedOutPresentableListener? { get set } + // TODO: Declare methods the interactor can invoke the presenter to present data. +} + +protocol LoggedOutListener: AnyObject { + func didLogin() +} + +final class LoggedOutInteractor: PresentableInteractor, LoggedOutInteractable, LoggedOutPresentableListener { + + func login(withLoginModel: LoginModel) { + + } + + weak var router: LoggedOutRouting? + weak var listener: LoggedOutListener? + + // TODO: Add additional dependencies to constructor. Do not perform any logic + // in constructor. + init(presenter: LoggedOutPresentable, authenticationUseCase: AuthenticationUseCase) { + self.authenticationUseCase = authenticationUseCase + super.init(presenter: presenter) + presenter.listener = self + } + + override func didBecomeActive() { + super.didBecomeActive() + authenticationUseCase.isLoggedIn() + .subscribe(onNext: { if $0 == true { self.listener?.didLogin() }}) + .disposed(by: disposeBag) + + // TODO: Implement business logic here. + } + + override func willResignActive() { + super.willResignActive() + // TODO: Pause any business logic. + } + + // MARK: - Private + private let authenticationUseCase: AuthenticationUseCase + private let disposeBag = DisposeBag() +} diff --git a/GetHomeSafe/RIBs/LoggedOut/LoggedOutRouter.swift b/GetHomeSafe/RIBs/LoggedOut/LoggedOutRouter.swift new file mode 100644 index 0000000..b15fddd --- /dev/null +++ b/GetHomeSafe/RIBs/LoggedOut/LoggedOutRouter.swift @@ -0,0 +1,26 @@ +// +// LoggedOutRouter.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +import RIBs + +protocol LoggedOutInteractable: Interactable { + var router: LoggedOutRouting? { get set } + var listener: LoggedOutListener? { get set } +} + +protocol LoggedOutViewControllable: ViewControllable { + // TODO: Declare methods the router invokes to manipulate the view hierarchy. +} + +final class LoggedOutRouter: ViewableRouter, LoggedOutRouting { + + // TODO: Constructor inject child builder protocols to allow building children. + override init(interactor: LoggedOutInteractable, viewController: LoggedOutViewControllable) { + super.init(interactor: interactor, viewController: viewController) + interactor.router = self + } +} diff --git a/GetHomeSafe/RIBs/LoggedOut/LoggedOutViewController.swift b/GetHomeSafe/RIBs/LoggedOut/LoggedOutViewController.swift new file mode 100644 index 0000000..891985d --- /dev/null +++ b/GetHomeSafe/RIBs/LoggedOut/LoggedOutViewController.swift @@ -0,0 +1,19 @@ +// +// LoggedOutViewController.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/17. +// + +import RIBs +import RxSwift +import UIKit + +protocol LoggedOutPresentableListener: AnyObject { + func login(withLoginModel: LoginModel) +} + +final class LoggedOutViewController: UIViewController, LoggedOutPresentable, LoggedOutViewControllable { + + weak var listener: LoggedOutPresentableListener? +} diff --git a/GetHomeSafe/RIBs/Root/RootBuilder.swift b/GetHomeSafe/RIBs/Root/RootBuilder.swift new file mode 100644 index 0000000..b0eea1e --- /dev/null +++ b/GetHomeSafe/RIBs/Root/RootBuilder.swift @@ -0,0 +1,49 @@ +// +// RootBuilder.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/16. +// + +import RIBs + +protocol RootDependency: Dependency { + +} + +final class RootComponent: Component { + let rootViewController: RootViewController + + init(dependency: RootDependency, + rootViewController: RootViewController) { + self.rootViewController = rootViewController + super.init(dependency: dependency) + } + + var authenticationUseCase: AuthenticationUseCase { + StubAuthenticationUseCase() + } +} + +// MARK: - Builder + +protocol RootBuildable: Buildable { + func build() -> LaunchRouting +} + +final class RootBuilder: Builder, RootBuildable { + + override init(dependency: RootDependency) { + super.init(dependency: dependency) + } + + func build() -> LaunchRouting { + let viewController = RootViewController() + let component = RootComponent(dependency: dependency, rootViewController: viewController) + let interactor = RootInteractor(presenter: viewController) + let loggedOutBuilder = LoggedOutBuilder(dependency: component) + let loggedInBuilder = LoggedInBuilder(dependency: component) + let router = RootRouter(interactor: interactor, viewController: viewController, loggedOutBuilder: loggedOutBuilder, loggedInBuilder: loggedInBuilder) + return router + } +} diff --git a/GetHomeSafe/RIBs/Root/RootComponent+LoggedIn.swift b/GetHomeSafe/RIBs/Root/RootComponent+LoggedIn.swift new file mode 100644 index 0000000..d1ae645 --- /dev/null +++ b/GetHomeSafe/RIBs/Root/RootComponent+LoggedIn.swift @@ -0,0 +1,19 @@ +// +// RootComponent+LoggedIn.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/28. +// + +import RIBs + +protocol RootDependencyLoggedIn: Dependency { + // TODO: Declare dependencies needed from the parent scope of Root to provide dependencies + // for the LoggedIn scope. +} + +extension RootComponent: LoggedInDependency { + var LoggedInViewController: LoggedInViewControllable { + self.rootViewController + } +} diff --git a/GetHomeSafe/RIBs/Root/RootComponent+LoggedOut.swift b/GetHomeSafe/RIBs/Root/RootComponent+LoggedOut.swift new file mode 100644 index 0000000..ffcb6c4 --- /dev/null +++ b/GetHomeSafe/RIBs/Root/RootComponent+LoggedOut.swift @@ -0,0 +1,16 @@ +// +// RootComponent+LoggedOut.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/16. +// + +import RIBs + +/// The dependencies needed from the parent scope of Root to provide for the LoggedOut scope. +protocol RootDependencyLoggedOut: Dependency { + // TODO: Declare dependencies needed from the parent scope of Root to provide dependencies + // for the LoggedOut scope. +} + +extension RootComponent: LoggedOutDependency { } diff --git a/GetHomeSafe/RIBs/Root/RootInteractor.swift b/GetHomeSafe/RIBs/Root/RootInteractor.swift new file mode 100644 index 0000000..51451f0 --- /dev/null +++ b/GetHomeSafe/RIBs/Root/RootInteractor.swift @@ -0,0 +1,49 @@ +// +// RootInteractor.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/16. +// + +import RIBs +import RxSwift + +protocol RootRouting: ViewableRouting { + func routeToLoggedIn() +} + +protocol RootPresentable: Presentable { + var listener: RootPresentableListener? { get set } + // TODO: Declare methods the interactor can invoke the presenter to present data. +} + +protocol RootListener: AnyObject { + // TODO: Declare methods the interactor can invoke to communicate with other RIBs. +} + +final class RootInteractor: PresentableInteractor, RootInteractable, RootPresentableListener { + func didLogin() { + router?.routeToLoggedIn() + } + + weak var router: RootRouting? + weak var listener: RootListener? + + // TODO: Add additional dependencies to constructor. Do not perform any logic + // in constructor. + override init(presenter: RootPresentable) { + super.init(presenter: presenter) + presenter.listener = self + } + + override func didBecomeActive() { + super.didBecomeActive() + // TODO: Implement business logic here. + } + + override func willResignActive() { + super.willResignActive() + // TODO: Pause any business logic. + } + +} diff --git a/GetHomeSafe/RIBs/Root/RootRouter.swift b/GetHomeSafe/RIBs/Root/RootRouter.swift new file mode 100644 index 0000000..7c2d37e --- /dev/null +++ b/GetHomeSafe/RIBs/Root/RootRouter.swift @@ -0,0 +1,52 @@ +// +// RootRouter.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/16. +// + +import RIBs + +protocol RootInteractable: Interactable, LoggedOutListener { + var router: RootRouting? { get set } + var listener: RootListener? { get set } +} + +protocol RootViewControllable: ViewControllable { + func present(viewController: ViewControllable) + func dismiss(viewController: ViewControllable) +} + +final class RootRouter: LaunchRouter, RootRouting { + func routeToLoggedIn() { + // + } + + init(interactor: RootInteractable, + viewController: RootViewControllable, + loggedOutBuilder: LoggedOutBuildable, + loggedInBuilder: LoggedInBuildable) { + self.loggedOutBuilder = loggedOutBuilder + self.loggedInBuilder = loggedInBuilder + super.init(interactor: interactor, viewController: viewController) + interactor.router = self + } + + override func didLoad() { + super.didLoad() + routeToLoggedOut() + } + + // MARK: - Private + private let loggedOutBuilder: LoggedOutBuildable + private let loggedInBuilder: LoggedInBuildable + + private var loggedOut: ViewableRouting? + + private func routeToLoggedOut() { + let loggedOut = loggedOutBuilder.build(withListener: interactor) + self.loggedOut = loggedOut + attachChild(loggedOut) + viewController.present(viewController: loggedOut.viewControllable) + } +} diff --git a/GetHomeSafe/RIBs/Root/RootViewController.swift b/GetHomeSafe/RIBs/Root/RootViewController.swift new file mode 100644 index 0000000..9dfcd02 --- /dev/null +++ b/GetHomeSafe/RIBs/Root/RootViewController.swift @@ -0,0 +1,43 @@ +// +// RootViewController.swift +// GetHomeSafe +// +// Created by Geonhyeong LIm on 2021/04/16. +// + +import RIBs +import RxSwift +import UIKit + +protocol RootPresentableListener: AnyObject { + // TODO: Declare properties and methods that the view controller can invoke to perform + // business logic, such as signIn(). This protocol is implemented by the corresponding + // interactor class. +} + +final class RootViewController: UIViewController, RootPresentable, RootViewControllable { + + weak var listener: RootPresentableListener? + + override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .white + } + + // MARK: - RootViewContorollable + func present(viewController: ViewControllable) { + let uiViewController = viewController.uiviewController + uiViewController.isModalInPresentation = true + uiViewController.modalPresentationStyle = .fullScreen + present(uiViewController, animated: false) + } + + func dismiss(viewController: ViewControllable) { + guard presentedViewController === viewController.uiviewController else { return } + dismiss(animated: false) + } +} + +extension RootViewController: LoggedInViewControllable { + +} diff --git a/GetHomeSafeTests/GetHomeSafeTests.swift b/GetHomeSafeTests/GetHomeSafeTests.swift new file mode 100644 index 0000000..6f4e2c4 --- /dev/null +++ b/GetHomeSafeTests/GetHomeSafeTests.swift @@ -0,0 +1,33 @@ +// +// GetHomeSafeTests.swift +// GetHomeSafeTests +// +// Created by Geonhyeong LIm on 2021/04/15. +// + +import XCTest +@testable import GetHomeSafe + +class GetHomeSafeTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() throws { + // 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/GetHomeSafeTests/Info.plist b/GetHomeSafeTests/Info.plist new file mode 100644 index 0000000..64d65ca --- /dev/null +++ b/GetHomeSafeTests/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/GetHomeSafeUITests/GetHomeSafeUITests.swift b/GetHomeSafeUITests/GetHomeSafeUITests.swift new file mode 100644 index 0000000..a2f3d2c --- /dev/null +++ b/GetHomeSafeUITests/GetHomeSafeUITests.swift @@ -0,0 +1,42 @@ +// +// GetHomeSafeUITests.swift +// GetHomeSafeUITests +// +// Created by Geonhyeong LIm on 2021/04/15. +// + +import XCTest + +class GetHomeSafeUITests: XCTestCase { + + override func setUpWithError() throws { + // 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 tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // 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() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/GetHomeSafeUITests/Info.plist b/GetHomeSafeUITests/Info.plist new file mode 100644 index 0000000..64d65ca --- /dev/null +++ b/GetHomeSafeUITests/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/Podfile b/Podfile new file mode 100644 index 0000000..b31a849 --- /dev/null +++ b/Podfile @@ -0,0 +1,23 @@ +# Uncomment the next line to define a global platform for your project +platform :ios, '9.0' + +target 'GetHomeSafe' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + inhibit_all_warnings! + + # Pods for GetHomeSafe + pod 'RIBs' + pod 'SnapKit' + pod 'RxCocoa' + + target 'GetHomeSafeTests' do + inherit! :search_paths + # Pods for testing + end + + target 'GetHomeSafeUITests' do + # Pods for testing + end + +end diff --git a/Podfile.lock b/Podfile.lock new file mode 100644 index 0000000..2d510ea --- /dev/null +++ b/Podfile.lock @@ -0,0 +1,29 @@ +PODS: + - RIBs (0.9.1): + - RxSwift (~> 4.0) + - RxCocoa (4.5.0): + - RxSwift (>= 4.4.2, ~> 4.4) + - RxSwift (4.5.0) + - SnapKit (4.2.0) + +DEPENDENCIES: + - RIBs + - RxCocoa + - SnapKit + +SPEC REPOS: + trunk: + - RIBs + - RxCocoa + - RxSwift + - SnapKit + +SPEC CHECKSUMS: + RIBs: 879184fbca567425c488d6b3d14a9c5abfbf9d47 + RxCocoa: cbf70265dc65a981d4ac982e513c10cf23df24a0 + RxSwift: f172070dfd1a93d70a9ab97a5a01166206e1c575 + SnapKit: fe8a619752f3f27075cc9a90244d75c6c3f27e2a + +PODFILE CHECKSUM: 7f2242e35f1892f4f84b5f838d6ea8bed4b587e7 + +COCOAPODS: 1.10.1 diff --git a/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInComponent+OffGame.swift b/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInComponent+OffGame.swift index b8fbc43..8279ed9 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInComponent+OffGame.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInComponent+OffGame.swift @@ -16,7 +16,6 @@ import RIBs -/// The dependencies needed from the parent scope of LoggedIn to provide for the OffGame scope. // TODO: Update LoggedInDependency protocol to inherit this protocol. protocol LoggedInDependencyOffGame: Dependency { diff --git a/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInComponent+TicTacToe.swift b/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInComponent+TicTacToe.swift index daa3c2a..8958c0e 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInComponent+TicTacToe.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInComponent+TicTacToe.swift @@ -16,7 +16,6 @@ import RIBs -/// The dependencies needed from the parent scope of LoggedIn to provide for the TicTacToe scope. // TODO: Update LoggedInDependency protocol to inherit this protocol. protocol LoggedInDependencyTicTacToe: Dependency { diff --git a/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInInteractor.swift b/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInInteractor.swift index 9e6cbf8..bc4cd4d 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInInteractor.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/LoggedIn/LoggedInInteractor.swift @@ -35,7 +35,6 @@ final class LoggedInInteractor: Interactor, LoggedInInteractable, LoggedInAction } return Observable.just((self, ())) } - weak var router: LoggedInRouting? weak var listener: LoggedInListener? diff --git a/RIBs Study/RIBsStudy/TicTacToe/Promo/LaunchGameWorkflow.swift b/RIBs Study/RIBsStudy/TicTacToe/Promo/LaunchGameWorkflow.swift index 0ff4c00..3130f3a 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/Promo/LaunchGameWorkflow.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/Promo/LaunchGameWorkflow.swift @@ -30,7 +30,7 @@ public class LaunchGameWorkflow: Workflow { let components = URLComponents(string: url.absoluteString) let items = components?.queryItems ?? [] for item in items { - if item.name == "gameId" { + where item.name == "gameId" { return item.value } } diff --git a/RIBs Study/RIBsStudy/TicTacToe/RandomWin/RandomWinInteractor.swift b/RIBs Study/RIBsStudy/TicTacToe/RandomWin/RandomWinInteractor.swift index 318d0d8..bd1670d 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/RandomWin/RandomWinInteractor.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/RandomWin/RandomWinInteractor.swift @@ -23,7 +23,7 @@ public protocol RandomWinRouting: ViewableRouting { protocol RandomWinPresentable: Presentable { var listener: RandomWinPresentableListener? { get set } - func announce(winner: PlayerType, withCompletionHandler handler: @escaping () -> ()) + func announce(winner: PlayerType, withCompletionHandler handler: @escaping () -> Void) } public protocol RandomWinListener: class { diff --git a/RIBs Study/RIBsStudy/TicTacToe/RandomWin/RandomWinViewController.swift b/RIBs Study/RIBsStudy/TicTacToe/RandomWin/RandomWinViewController.swift index edf886f..a94f5d2 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/RandomWin/RandomWinViewController.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/RandomWin/RandomWinViewController.swift @@ -48,7 +48,7 @@ final class RandomWinViewController: UIViewController, RandomWinPresentable, Ran // MARK: - RandomWinPresentable - func announce(winner: PlayerType, withCompletionHandler handler: @escaping () -> ()) { + func announce(winner: PlayerType, withCompletionHandler handler: @escaping () -> Void) { let winnerString: String = { switch winner { case .player1: diff --git a/RIBs Study/RIBsStudy/TicTacToe/Root/RootComponent+LoggedIn.swift b/RIBs Study/RIBsStudy/TicTacToe/Root/RootComponent+LoggedIn.swift index 2351441..1e5ef61 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/Root/RootComponent+LoggedIn.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/Root/RootComponent+LoggedIn.swift @@ -16,7 +16,6 @@ import RIBs -/// The dependencies needed from the parent scope of Root to provide for the LoggedIn scope. // TODO: Update RootDependency protocol to inherit this protocol. protocol RootDependencyLoggedIn: Dependency { diff --git a/RIBs Study/RIBsStudy/TicTacToe/Root/RootComponent+LoggedOut.swift b/RIBs Study/RIBsStudy/TicTacToe/Root/RootComponent+LoggedOut.swift index a2f32f5..bb2da9c 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/Root/RootComponent+LoggedOut.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/Root/RootComponent+LoggedOut.swift @@ -16,7 +16,6 @@ import RIBs -/// The dependencies needed from the parent scope of Root to provide for the LoggedOut scope. // TODO: Update RootDependency protocol to inherit this protocol. protocol RootDependencyLoggedOut: Dependency { diff --git a/RIBs Study/RIBsStudy/TicTacToe/Root/RootInteractor.swift b/RIBs Study/RIBsStudy/TicTacToe/Root/RootInteractor.swift index 52f7e92..1bc6b00 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/Root/RootInteractor.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/Root/RootInteractor.swift @@ -76,9 +76,6 @@ final class RootInteractor: PresentableInteractor, RootInteract } } - - - // MARK: - Private private let loggedInActionableItemSubject = ReplaySubject.create(bufferSize: 1) } diff --git a/RIBs Study/RIBsStudy/TicTacToe/TicTacToe/TicTacToeInteractor.swift b/RIBs Study/RIBsStudy/TicTacToe/TicTacToe/TicTacToeInteractor.swift index 2aebb12..3be3eb6 100644 --- a/RIBs Study/RIBsStudy/TicTacToe/TicTacToe/TicTacToeInteractor.swift +++ b/RIBs Study/RIBsStudy/TicTacToe/TicTacToe/TicTacToeInteractor.swift @@ -24,7 +24,7 @@ public protocol TicTacToeRouting: ViewableRouting { protocol TicTacToePresentable: Presentable { var listener: TicTacToePresentableListener? { get set } func setCell(atRow row: Int, col: Int, withPlayerType playerType: PlayerType) - func announce(winner: PlayerType?, withCompletionHandler handler: @escaping () -> ()) + func announce(winner: PlayerType?, withCompletionHandler handler: @escaping () -> Void) } public protocol TicTacToeListener: class { @@ -111,55 +111,55 @@ final class TicTacToeInteractor: PresentableInteractor, Ti } private func checkWinner() -> PlayerType? { - // Rows. - for row in 0.., Ti private func checkDraw() -> Bool { for row in 0.. ()) { + func announce(winner: PlayerType?, withCompletionHandler handler: @escaping () -> Void) { let winnerString: String = { if let winner = winner { switch winner { @@ -98,7 +98,7 @@ final class TicTacToeViewController: UIViewController, TicTacToePresentable, Tic } } -fileprivate struct Constants { +private struct Constants { static let sectionCount = 1 static let cellSize: CGFloat = UIScreen.main.bounds.width / CGFloat(GameConstants.colCount) static let cellIdentifier = "TicTacToeCell"