diff --git a/NativeAppTemplate.xcodeproj/project.pbxproj b/NativeAppTemplate.xcodeproj/project.pbxproj index e4c44c6..f9a3cb4 100644 --- a/NativeAppTemplate.xcodeproj/project.pbxproj +++ b/NativeAppTemplate.xcodeproj/project.pbxproj @@ -31,10 +31,10 @@ 012009FC299F1E190078A1F9 /* OrderedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = 012009FB299F1E190078A1F9 /* OrderedCollections */; }; 012643372B3554AD00D4E9BD /* AcceptTermsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 012643362B3554AD00D4E9BD /* AcceptTermsView.swift */; }; 013292BE262C3EA400690B75 /* LoggedInShopkeeper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013292BD262C3EA400690B75 /* LoggedInShopkeeper.swift */; }; + 0139822A2FA815A2005DF953 /* AppIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = 013982292FA815A2005DF953 /* AppIcon.icon */; }; 013DE735284E99DF00528CC5 /* ShopCreateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013DE734284E99DF00528CC5 /* ShopCreateView.swift */; }; 01467357299902230005423D /* ShopSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01467356299902230005423D /* ShopSettingsView.swift */; }; 01482FA42B351E4100A56D43 /* AcceptPrivacyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01482FA32B351E4100A56D43 /* AcceptPrivacyView.swift */; }; - 014E79252F83205400F37DF7 /* AppIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = 014E79242F83205400F37DF7 /* AppIcon.icon */; }; 0150A36629B14BB300907F96 /* SendResetPassword.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0150A36529B14BB300907F96 /* SendResetPassword.swift */; }; 0158BA0125C174E0008EC9D5 /* ShopsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0158BA0025C174E0008EC9D5 /* ShopsRequest.swift */; }; 015C78052B72DA2C00B6523C /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 015C78042B72DA2C00B6523C /* PrivacyInfo.xcprivacy */; }; @@ -73,8 +73,6 @@ 0172051A25AAF6C0008FD63B /* SessionsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0172051925AAF6BF008FD63B /* SessionsService.swift */; }; 0172052525AAFA43008FD63B /* Shopkeeper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0172052425AAFA43008FD63B /* Shopkeeper.swift */; }; 0172052F25AC41A7008FD63B /* SessionRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0172052E25AC41A7008FD63B /* SessionRequest.swift */; }; - 017278072D7D4F5800CE424F /* OnboardingRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017278062D7D4F5800CE424F /* OnboardingRepository.swift */; }; - 017278092D7D4F7400CE424F /* Onboarding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 017278082D7D4F7400CE424F /* Onboarding.swift */; }; 017278622D7D83E700CE424F /* ItemTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0172785C2D7D83E700CE424F /* ItemTag.swift */; }; 017278632D7D83E700CE424F /* ItemTagState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0172785F2D7D83E700CE424F /* ItemTagState.swift */; }; 0172786F2D7D87D000CE424F /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0172786E2D7D87D000CE424F /* String+Extensions.swift */; }; @@ -102,13 +100,11 @@ 0199CD242E07510200109DC6 /* AccountPasswordRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD212E07510200109DC6 /* AccountPasswordRepositoryProtocol.swift */; }; 0199CD252E07510200109DC6 /* ItemTagRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD222E07510200109DC6 /* ItemTagRepositoryProtocol.swift */; }; 0199CD262E07510200109DC6 /* ShopRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD232E07510200109DC6 /* ShopRepositoryProtocol.swift */; }; - 0199CD2A2E07512100109DC6 /* OnboardingRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD282E07512100109DC6 /* OnboardingRepositoryProtocol.swift */; }; 0199CD2B2E07512100109DC6 /* SignUpRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD292E07512100109DC6 /* SignUpRepositoryProtocol.swift */; }; 0199CD2C2E07512100109DC6 /* LoginRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD272E07512100109DC6 /* LoginRepositoryProtocol.swift */; }; 0199CD3E2E075CBB00109DC6 /* SessionControllerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0199CD3D2E075CBB00109DC6 /* SessionControllerProtocol.swift */; }; 01A133992E08B052000AD24A /* AcceptPrivacyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A133982E08B052000AD24A /* AcceptPrivacyViewModel.swift */; }; 01A1339B2E08B0DF000AD24A /* MainViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A1339A2E08B0DF000AD24A /* MainViewModel.swift */; }; - 01A1339D2E08B2BB000AD24A /* OnboardingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A1339C2E08B2BB000AD24A /* OnboardingViewModel.swift */; }; 01A1339F2E08B2FD000AD24A /* AcceptTermsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A1339E2E08B2FD000AD24A /* AcceptTermsViewModel.swift */; }; 01A133A12E08B4A5000AD24A /* ForgotPasswordViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A133A02E08B4A5000AD24A /* ForgotPasswordViewModel.swift */; }; 01A133A32E08B4DA000AD24A /* ResendConfirmationInstructionsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A133A22E08B4DA000AD24A /* ResendConfirmationInstructionsViewModel.swift */; }; @@ -190,10 +186,10 @@ 012643362B3554AD00D4E9BD /* AcceptTermsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcceptTermsView.swift; sourceTree = ""; }; 013292BD262C3EA400690B75 /* LoggedInShopkeeper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggedInShopkeeper.swift; sourceTree = ""; }; 0135E8E22D7E4478004AD8FA /* SampleCode.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SampleCode.xcconfig; sourceTree = ""; }; + 013982292FA815A2005DF953 /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = ""; }; 013DE734284E99DF00528CC5 /* ShopCreateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopCreateView.swift; sourceTree = ""; }; 01467356299902230005423D /* ShopSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopSettingsView.swift; sourceTree = ""; }; 01482FA32B351E4100A56D43 /* AcceptPrivacyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcceptPrivacyView.swift; sourceTree = ""; }; - 014E79242F83205400F37DF7 /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = ""; }; 0150A36529B14BB300907F96 /* SendResetPassword.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendResetPassword.swift; sourceTree = ""; }; 0158BA0025C174E0008EC9D5 /* ShopsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopsRequest.swift; sourceTree = ""; }; 015C78042B72DA2C00B6523C /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; @@ -232,8 +228,6 @@ 0172051925AAF6BF008FD63B /* SessionsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionsService.swift; sourceTree = ""; }; 0172052425AAFA43008FD63B /* Shopkeeper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Shopkeeper.swift; sourceTree = ""; }; 0172052E25AC41A7008FD63B /* SessionRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionRequest.swift; sourceTree = ""; }; - 017278062D7D4F5800CE424F /* OnboardingRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingRepository.swift; sourceTree = ""; }; - 017278082D7D4F7400CE424F /* Onboarding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Onboarding.swift; sourceTree = ""; }; 0172785C2D7D83E700CE424F /* ItemTag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemTag.swift; sourceTree = ""; }; 0172785F2D7D83E700CE424F /* ItemTagState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemTagState.swift; sourceTree = ""; }; 0172786C2D7D87D000CE424F /* Date+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+Extensions.swift"; sourceTree = ""; }; @@ -261,12 +255,10 @@ 0199CD222E07510200109DC6 /* ItemTagRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemTagRepositoryProtocol.swift; sourceTree = ""; }; 0199CD232E07510200109DC6 /* ShopRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopRepositoryProtocol.swift; sourceTree = ""; }; 0199CD272E07512100109DC6 /* LoginRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginRepositoryProtocol.swift; sourceTree = ""; }; - 0199CD282E07512100109DC6 /* OnboardingRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingRepositoryProtocol.swift; sourceTree = ""; }; 0199CD292E07512100109DC6 /* SignUpRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpRepositoryProtocol.swift; sourceTree = ""; }; 0199CD3D2E075CBB00109DC6 /* SessionControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionControllerProtocol.swift; sourceTree = ""; }; 01A133982E08B052000AD24A /* AcceptPrivacyViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcceptPrivacyViewModel.swift; sourceTree = ""; }; 01A1339A2E08B0DF000AD24A /* MainViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewModel.swift; sourceTree = ""; }; - 01A1339C2E08B2BB000AD24A /* OnboardingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewModel.swift; sourceTree = ""; }; 01A1339E2E08B2FD000AD24A /* AcceptTermsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcceptTermsViewModel.swift; sourceTree = ""; }; 01A133A02E08B4A5000AD24A /* ForgotPasswordViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForgotPasswordViewModel.swift; sourceTree = ""; }; 01A133A22E08B4DA000AD24A /* ResendConfirmationInstructionsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResendConfirmationInstructionsViewModel.swift; sourceTree = ""; }; @@ -435,7 +427,7 @@ 014E79232F831FA600F37DF7 /* Resources */ = { isa = PBXGroup; children = ( - 014E79242F83205400F37DF7 /* AppIcon.icon */, + 013982292FA815A2005DF953 /* AppIcon.icon */, 011F6DF4259EF16600BED22E /* Assets.xcassets */, ); path = Resources; @@ -542,7 +534,6 @@ 0172785F2D7D83E700CE424F /* ItemTagState.swift */, 01B526532AF4E36400655131 /* MainTab.swift */, 2FE8A6D1D27C458389C4F61A /* PaginationMeta.swift */, - 017278082D7D4F7400CE424F /* Onboarding.swift */, 01B526552AF4E82A00655131 /* ScrollToTopID.swift */, 0110A15E2AC816F5003EDCBA /* SendConfirmation.swift */, 0150A36529B14BB300907F96 /* SendResetPassword.swift */, @@ -589,8 +580,6 @@ children = ( 017203F525AA675E008FD63B /* LoginRepository.swift */, 0199CD272E07512100109DC6 /* LoginRepositoryProtocol.swift */, - 017278062D7D4F5800CE424F /* OnboardingRepository.swift */, - 0199CD282E07512100109DC6 /* OnboardingRepositoryProtocol.swift */, 0172052E25AC41A7008FD63B /* SessionRequest.swift */, 0172051925AAF6BF008FD63B /* SessionsService.swift */, 011DDC20287669EA00C6C21F /* SignUpRepository.swift */, @@ -636,7 +625,6 @@ 01A1339A2E08B0DF000AD24A /* MainViewModel.swift */, 0172045925AA82B4008FD63B /* MessageBarView.swift */, 0172045825AA82B4008FD63B /* OnboardingView.swift */, - 01A1339C2E08B2BB000AD24A /* OnboardingViewModel.swift */, 0172045D25AA82B4008FD63B /* PermissionsLoadingView.swift */, 0110A1602AC81978003EDCBA /* ResendConfirmationInstructionsView.swift */, 01A133A22E08B4DA000AD24A /* ResendConfirmationInstructionsViewModel.swift */, @@ -890,7 +878,7 @@ isa = PBXResourcesBuildPhase; files = ( 015C78052B72DA2C00B6523C /* PrivacyInfo.xcprivacy in Resources */, - 014E79252F83205400F37DF7 /* AppIcon.icon in Resources */, + 0139822A2FA815A2005DF953 /* AppIcon.icon in Resources */, 011F6DF8259EF16600BED22E /* Preview Assets.xcassets in Resources */, 011F6DF5259EF16600BED22E /* Assets.xcassets in Resources */, ); @@ -912,7 +900,6 @@ 0172052F25AC41A7008FD63B /* SessionRequest.swift in Sources */, 017278772D7D8FF100CE424F /* ItemTagsService.swift in Sources */, 017204C025AA846D008FD63B /* TabViewModel.swift in Sources */, - 01A1339D2E08B2BB000AD24A /* OnboardingViewModel.swift in Sources */, 01B9E45228A5070D00CAC681 /* ShopkeeperSignInAdapter.swift in Sources */, 0172040025AA6775008FD63B /* LoginRepository.swift in Sources */, 0172034B25A9642E008FD63B /* EntityAdapter.swift in Sources */, @@ -932,7 +919,6 @@ 01D85AEF2E07D20500A95798 /* ItemTagCreateViewModel.swift in Sources */, 01E0A5B725BD0FCD00298D35 /* OfflineView.swift in Sources */, 0110A15F2AC816F5003EDCBA /* SendConfirmation.swift in Sources */, - 0199CD2A2E07512100109DC6 /* OnboardingRepositoryProtocol.swift in Sources */, 0199CD2B2E07512100109DC6 /* SignUpRepositoryProtocol.swift in Sources */, 0199CD2C2E07512100109DC6 /* LoginRepositoryProtocol.swift in Sources */, 0172033D25A9642E008FD63B /* NativeAppTemplateEnvironment.swift in Sources */, @@ -990,7 +976,6 @@ 4A8DA0DEF6F142C3A127058A /* PaginationMeta.swift in Sources */, 0172046625AA82BF008FD63B /* MessageBarView.swift in Sources */, 01E0A63025BD53FD00298D35 /* Shop.swift in Sources */, - 017278072D7D4F5800CE424F /* OnboardingRepository.swift in Sources */, 01D85A9A2E07C85900A95798 /* ShopBasicSettingsViewModel.swift in Sources */, 013292BE262C3EA400690B75 /* LoggedInShopkeeper.swift in Sources */, 01D85A9E2E07C9BD00A95798 /* ShopSettingsViewModel.swift in Sources */, @@ -1013,7 +998,6 @@ 0172787B2D7D903500CE424F /* ItemTagAdapter.swift in Sources */, 010F86AE2621A2A900B6C62A /* ShopDetailView.swift in Sources */, 011F6DF1259EF16400BED22E /* App.swift in Sources */, - 017278092D7D4F7400CE424F /* Onboarding.swift in Sources */, 01467357299902230005423D /* ShopSettingsView.swift in Sources */, 017278792D7D900100CE424F /* ItemTagsRequest.swift in Sources */, 0172048125AA8343008FD63B /* Color+Extensions.swift in Sources */, diff --git a/NativeAppTemplate/Constants.swift b/NativeAppTemplate/Constants.swift index 89e7195..a59ecf8 100644 --- a/NativeAppTemplate/Constants.swift +++ b/NativeAppTemplate/Constants.swift @@ -114,6 +114,8 @@ enum Strings { static let port: String = "" #endif + static let appName: String = "Native App Template" + /// This is for MyTurnTag Creator. Replace this. static let appStoreUrl: String = "https://apps.apple.com/app/myturntag-creator/id1516198303" @@ -286,14 +288,9 @@ enum Strings { static let password = "Password" static var welcomeToApp: String { - "Welcome to \(Bundle.main.displayName)" + "Welcome to \(appName)" } - static let onboardingDescription1 = "Onboarding description 1." - static let onboardingDescription2 = "Onboarding description 2." - static let onboardingDescription3 = "Onboarding description 3." - static let onboardingDescription4 = "Onboarding description 4." - // MARK: Other static let yes = "Yes" diff --git a/NativeAppTemplate/Data/DataManager.swift b/NativeAppTemplate/Data/DataManager.swift index aecd64a..63eb0e3 100644 --- a/NativeAppTemplate/Data/DataManager.swift +++ b/NativeAppTemplate/Data/DataManager.swift @@ -12,7 +12,6 @@ import SwiftUI var sessionController: SessionControllerProtocol // Repositories - private(set) var onboardingRepository: OnboardingRepositoryProtocol! private(set) var signUpRepository: SignUpRepositoryProtocol! private(set) var accountPasswordRepository: AccountPasswordRepositoryProtocol! private(set) var shopRepository: ShopRepositoryProtocol! @@ -41,7 +40,6 @@ import SwiftUI let shopsService = ShopsService(networkClient: sessionController.client) let itemTagsService = ItemTagsService(networkClient: sessionController.client) - onboardingRepository = OnboardingRepository() signUpRepository = SignUpRepository() accountPasswordRepository = AccountPasswordRepository(accountPasswordService: accountPasswordService) shopRepository = ShopRepository(shopsService: shopsService) diff --git a/NativeAppTemplate/Info.plist b/NativeAppTemplate/Info.plist index d26d8e8..4f00170 100644 --- a/NativeAppTemplate/Info.plist +++ b/NativeAppTemplate/Info.plist @@ -5,7 +5,7 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - NativeAppTemplate Free + Native App Template CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -40,7 +40,7 @@ arm64 -UISupportedInterfaceOrientations + UISupportedInterfaceOrientations UIInterfaceOrientationPortrait diff --git a/NativeAppTemplate/Login/OnboardingRepository.swift b/NativeAppTemplate/Login/OnboardingRepository.swift deleted file mode 100644 index 7f9b25a..0000000 --- a/NativeAppTemplate/Login/OnboardingRepository.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// OnboardingRepository.swift -// NativeAppTemplate -// - -import Foundation - -@MainActor @Observable class OnboardingRepository: OnboardingRepositoryProtocol { - var onboardings: [Onboarding] = [ - Onboarding(id: 1, imageOrientation: .landscape), - Onboarding(id: 2, imageOrientation: .landscape), - Onboarding(id: 3, imageOrientation: .portrait), - Onboarding(id: 4, imageOrientation: .portrait) - ] -} diff --git a/NativeAppTemplate/Login/OnboardingRepositoryProtocol.swift b/NativeAppTemplate/Login/OnboardingRepositoryProtocol.swift deleted file mode 100644 index 5a73bf8..0000000 --- a/NativeAppTemplate/Login/OnboardingRepositoryProtocol.swift +++ /dev/null @@ -1,11 +0,0 @@ -// -// OnboardingRepositoryProtocol.swift -// NativeAppTemplate -// - -import Foundation - -@MainActor -protocol OnboardingRepositoryProtocol: AnyObject, Observable, Sendable { - var onboardings: [Onboarding] { get set } -} diff --git a/NativeAppTemplate/Models/Onboarding.swift b/NativeAppTemplate/Models/Onboarding.swift deleted file mode 100644 index e3070b2..0000000 --- a/NativeAppTemplate/Models/Onboarding.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// Onboarding.swift -// NativeAppTemplate -// - -enum ImageOrientation: String, Hashable, Codable { - case portrait - case landscape -} - -struct Onboarding: Hashable, Codable, Identifiable { - var id: Int - var imageOrientation: ImageOrientation = .landscape -} diff --git a/NativeAppTemplate/Resources/AppIcon.icon/Assets/free.svg b/NativeAppTemplate/Resources/AppIcon.icon/Assets/free.svg deleted file mode 100644 index e63c214..0000000 --- a/NativeAppTemplate/Resources/AppIcon.icon/Assets/free.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/NativeAppTemplate/Resources/AppIcon.icon/Assets/free_background.svg b/NativeAppTemplate/Resources/AppIcon.icon/Assets/free_background.svg deleted file mode 100644 index 564b4f0..0000000 --- a/NativeAppTemplate/Resources/AppIcon.icon/Assets/free_background.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/NativeAppTemplate/Resources/AppIcon.icon/Assets/icon.svg b/NativeAppTemplate/Resources/AppIcon.icon/Assets/icon.svg deleted file mode 100644 index 5146690..0000000 --- a/NativeAppTemplate/Resources/AppIcon.icon/Assets/icon.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/NativeAppTemplate/Resources/AppIcon.icon/Assets/nativeapptemplate-icon-composer-foreground.svg b/NativeAppTemplate/Resources/AppIcon.icon/Assets/nativeapptemplate-icon-composer-foreground.svg new file mode 100644 index 0000000..91c5853 --- /dev/null +++ b/NativeAppTemplate/Resources/AppIcon.icon/Assets/nativeapptemplate-icon-composer-foreground.svg @@ -0,0 +1,24 @@ + + + + + diff --git a/NativeAppTemplate/Resources/AppIcon.icon/icon.json b/NativeAppTemplate/Resources/AppIcon.icon/icon.json index 600fa20..9967c3e 100644 --- a/NativeAppTemplate/Resources/AppIcon.icon/icon.json +++ b/NativeAppTemplate/Resources/AppIcon.icon/icon.json @@ -1,83 +1,23 @@ { "fill" : { - "automatic-gradient" : "srgb:0.00000,0.00000,0.00000,1.00000" + "automatic-gradient" : "srgb:0.10196,0.13725,0.19608,1.00000" }, "groups" : [ { - "blend-mode" : "normal", - "blur-material" : null, - "hidden" : false, + "blend-mode" : "lighten", "layers" : [ { - "blend-mode" : "normal", - "fill" : { - "solid" : "srgb:1.00000,0.00000,0.00000,1.00000" - }, - "glass" : false, - "image-name" : "free.svg", - "name" : "free" + "image-name" : "nativeapptemplate-icon-composer-foreground.svg", + "name" : "nativeapptemplate-icon-composer-foreground" } ], - "lighting" : "individual", - "shadow" : { - "kind" : "none", - "opacity" : 0.5 - }, - "specular" : false, - "translucency" : { - "enabled" : false, - "value" : 0 - } - }, - { - "layers" : [ - { - "fill" : { - "solid" : "srgb:1.00000,1.00000,1.00000,1.00000" - }, - "glass" : false, - "hidden" : false, - "image-name" : "free_background.svg", - "name" : "free_background", - "position" : { - "scale" : 1, - "translation-in-points" : [ - 0, - 64 - ] - } - } - ], - "lighting" : "individual", "shadow" : { "kind" : "neutral", "opacity" : 0.5 }, - "translucency" : { - "enabled" : false, - "value" : 0.5 - } - }, - { - "blend-mode" : "plus-lighter", - "blur-material" : null, - "hidden" : false, - "layers" : [ - { - "hidden" : false, - "image-name" : "icon.svg", - "name" : "icon" - } - ], - "lighting" : "individual", - "shadow" : { - "kind" : "layer-color", - "opacity" : 0.5 - }, - "specular" : true, "translucency" : { "enabled" : true, - "value" : 0.2 + "value" : 0.5 } } ], diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Logo/Contents.json b/NativeAppTemplate/Resources/Assets.xcassets/Logo/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/NativeAppTemplate/Resources/Assets.xcassets/Logo/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Logo/logo.imageset/Contents.json b/NativeAppTemplate/Resources/Assets.xcassets/Logo/logo.imageset/Contents.json deleted file mode 100644 index de1fa4f..0000000 --- a/NativeAppTemplate/Resources/Assets.xcassets/Logo/logo.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images" : [ - { - "filename" : "logo_white.svg", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Logo/logo.imageset/logo_white.svg b/NativeAppTemplate/Resources/Assets.xcassets/Logo/logo.imageset/logo_white.svg deleted file mode 100644 index bc1d7a9..0000000 --- a/NativeAppTemplate/Resources/Assets.xcassets/Logo/logo.imageset/logo_white.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/Contents.json b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/Contents.json b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/Contents.json deleted file mode 100644 index c6d8f78..0000000 --- a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "onboarding1.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "onboarding1@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "onboarding1@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/onboarding1.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/onboarding1.png deleted file mode 100644 index 069eee0..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/onboarding1.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/onboarding1@2x.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/onboarding1@2x.png deleted file mode 100644 index d50ec4a..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/onboarding1@2x.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/onboarding1@3x.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/onboarding1@3x.png deleted file mode 100644 index 8dd36f4..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding1.imageset/onboarding1@3x.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/Contents.json b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/Contents.json deleted file mode 100644 index 86fe1fc..0000000 --- a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "onboarding2.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "onboarding2@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "onboarding2@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/onboarding2.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/onboarding2.png deleted file mode 100644 index 0d3b4c5..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/onboarding2.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/onboarding2@2x.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/onboarding2@2x.png deleted file mode 100644 index d82ba12..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/onboarding2@2x.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/onboarding2@3x.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/onboarding2@3x.png deleted file mode 100644 index 7d67de5..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding2.imageset/onboarding2@3x.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/Contents.json b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/Contents.json deleted file mode 100644 index bae0dae..0000000 --- a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "onboarding3.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "onboarding3@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "onboarding3@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/onboarding3.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/onboarding3.png deleted file mode 100644 index df744a0..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/onboarding3.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/onboarding3@2x.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/onboarding3@2x.png deleted file mode 100644 index f97e133..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/onboarding3@2x.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/onboarding3@3x.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/onboarding3@3x.png deleted file mode 100644 index a7554f8..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding3.imageset/onboarding3@3x.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/Contents.json b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/Contents.json deleted file mode 100644 index 028e291..0000000 --- a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "onboarding4.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "onboarding4@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "onboarding4@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/onboarding4.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/onboarding4.png deleted file mode 100644 index cdb9c58..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/onboarding4.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/onboarding4@2x.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/onboarding4@2x.png deleted file mode 100644 index f54dfd6..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/onboarding4@2x.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/onboarding4@3x.png b/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/onboarding4@3x.png deleted file mode 100644 index bcb4417..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/Onboarding/onboarding4.imageset/onboarding4@3x.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/Contents.json b/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/Contents.json deleted file mode 100644 index e2d4444..0000000 --- a/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "filename" : "hero.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "hero@2x.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "hero@3x.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/hero.png b/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/hero.png deleted file mode 100644 index 7a2d682..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/hero.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/hero@2x.png b/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/hero@2x.png deleted file mode 100644 index 8628e01..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/hero@2x.png and /dev/null differ diff --git a/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/hero@3x.png b/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/hero@3x.png deleted file mode 100644 index 67d6409..0000000 Binary files a/NativeAppTemplate/Resources/Assets.xcassets/hero.imageset/hero@3x.png and /dev/null differ diff --git a/NativeAppTemplate/UI/App Root/MainView.swift b/NativeAppTemplate/UI/App Root/MainView.swift index 97e4aa3..c5e3241 100644 --- a/NativeAppTemplate/UI/App Root/MainView.swift +++ b/NativeAppTemplate/UI/App Root/MainView.swift @@ -38,7 +38,7 @@ struct MainView: View { private extension MainView { @ViewBuilder var contentView: some View { if !sessionController.isLoggedIn { - OnboardingView(onboardingRepository: dataManager.onboardingRepository) + OnboardingView() } else if sessionController.shouldUpdatePrivacy { acceptPrivacySheet } else if sessionController.shouldUpdateTerms { diff --git a/NativeAppTemplate/UI/App Root/OnboardingView.swift b/NativeAppTemplate/UI/App Root/OnboardingView.swift index 011f8ea..0b65b37 100644 --- a/NativeAppTemplate/UI/App Root/OnboardingView.swift +++ b/NativeAppTemplate/UI/App Root/OnboardingView.swift @@ -6,12 +6,6 @@ import SwiftUI struct OnboardingView: View { - @State private var viewModel: OnboardingViewModel - - init(onboardingRepository: OnboardingRepositoryProtocol) { - _viewModel = State(initialValue: OnboardingViewModel(onboardingRepository: onboardingRepository)) - } - var body: some View { NavigationStack { contentView @@ -23,94 +17,41 @@ struct OnboardingView: View { private extension OnboardingView { var contentView: some View { - @ViewBuilder var contentView: some View { - VStack { - SwiftUI.TabView { - welcomePage - ForEach(viewModel.onboardings) { onboarding in - let id = onboarding.id - page( - image: "onboarding\(id)", - text: viewModel.onboardingDescription(index: id), - imageOrientation: onboarding.imageOrientation - ) - } - } - .tabViewStyle(.page(indexDisplayMode: .always)) - .toolbar { - ToolbarItem(placement: .navigationBarLeading) { - Link(Strings.supportWebsite, destination: URL(string: Strings.supportWebsiteUrl)!) - } - ToolbarItem(placement: .navigationBarTrailing) { - NavigationLink(destination: SignUpOrSignInView()) { - Text(verbatim: "Start") - .font(.title) - } - } - } - } - } - - return contentView - } - - private var logo: some View { - Image("logo") - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 256, height: 24) - } - - private var welcomePage: some View { ZStack(alignment: .bottom) { - Image("hero") + Image(systemName: "sparkles") .resizable() .aspectRatio(contentMode: .fit) .padding(.top, NativeAppTemplateConstants.Spacing.md) .padding(.bottom, 192) - ZStack(alignment: .top) { - VStack { - Text(Strings.welcomeToApp) - .font(.largeTitle) - .fontWeight(.bold) - .multilineTextAlignment(.center) - .dynamicTypeSize(DynamicTypeSize.accessibility1) - .padding([.top, .horizontal]) - .accessibilityIdentifier("OnboardingView_welcome_staticText") - } - .background(Color.backgroundColor) - .frame(maxWidth: .infinity, maxHeight: 192, alignment: .top) + VStack { + Text(Strings.welcomeToApp) + .font(.largeTitle) + .fontWeight(.bold) + .multilineTextAlignment(.center) + .dynamicTypeSize(DynamicTypeSize.accessibility1) + .padding([.top, .horizontal]) + .accessibilityIdentifier("OnboardingView_welcome_staticText") } .background(Color.backgroundColor) + .frame(maxWidth: .infinity, maxHeight: 192, alignment: .top) } - } - - private func page(image: String, text: String, imageOrientation: ImageOrientation) -> some View { - ZStack(alignment: .bottom) { - Image(image) - .resizable() - .aspectRatio(contentMode: .fit) - .padding(.top, NativeAppTemplateConstants.Spacing.md) - .padding(.bottom, imageOrientation == .portrait ? 0 : 192) - - ZStack(alignment: .top) { - VStack { - Text(.init(text)) - .dynamicTypeSize(DynamicTypeSize.accessibility1) - .padding([.top, .horizontal]) - .accessibilityIdentifier("OnboardingView_descriptoion_staticText") + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Link(Strings.supportWebsite, destination: URL(string: Strings.supportWebsiteUrl)!) + } + ToolbarItem(placement: .navigationBarTrailing) { + NavigationLink(destination: SignUpOrSignInView()) { + Text(verbatim: "Start") + .font(.title) } - .background(Color.backgroundColor) - .frame(maxWidth: .infinity, maxHeight: 192, alignment: .top) } - .background(Color.backgroundColor) } } struct OnboardingView_Previews: PreviewProvider { static var previews: some View { - OnboardingView(onboardingRepository: OnboardingRepository()) + OnboardingView() } } } diff --git a/NativeAppTemplate/UI/App Root/OnboardingViewModel.swift b/NativeAppTemplate/UI/App Root/OnboardingViewModel.swift deleted file mode 100644 index b2efd18..0000000 --- a/NativeAppTemplate/UI/App Root/OnboardingViewModel.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// OnboardingViewModel.swift -// NativeAppTemplate -// - -import Observation -import SwiftUI - -@Observable -@MainActor -final class OnboardingViewModel { - private let onboardingRepository: OnboardingRepositoryProtocol - - var onboardings: [Onboarding] { - onboardingRepository.onboardings - } - - init(onboardingRepository: OnboardingRepositoryProtocol) { - self.onboardingRepository = onboardingRepository - } - - func onboardingDescription(index: Int) -> String { - switch index { - case 1: - Strings.onboardingDescription1 - case 2: - Strings.onboardingDescription2 - case 3: - Strings.onboardingDescription3 - case 4: - Strings.onboardingDescription4 - default: - Strings.onboardingDescription1 - } - } -} diff --git a/NativeAppTemplate/UI/App Root/SignUpOrSignInView.swift b/NativeAppTemplate/UI/App Root/SignUpOrSignInView.swift index a2c7263..7967e41 100644 --- a/NativeAppTemplate/UI/App Root/SignUpOrSignInView.swift +++ b/NativeAppTemplate/UI/App Root/SignUpOrSignInView.swift @@ -22,13 +22,12 @@ private extension SignUpOrSignInView { @ViewBuilder var contentView: some View { ScrollView { VStack { - Image("logo") - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 384, height: 24) + Text(Strings.appName) + .font(.title) + .fontWeight(.bold) .padding() - Image("hero") + Image(systemName: "sparkles") .resizable() .aspectRatio(contentMode: .fit) .frame(height: 256) diff --git a/NativeAppTemplate/UI/Settings/SettingsView.swift b/NativeAppTemplate/UI/Settings/SettingsView.swift index 59500d8..12a3099 100644 --- a/NativeAppTemplate/UI/Settings/SettingsView.swift +++ b/NativeAppTemplate/UI/Settings/SettingsView.swift @@ -122,7 +122,7 @@ struct SettingsView: View { } var supportEmailURL: URL { - let appName = Bundle.main.displayName + let appName = Strings.appName let appVersion = "\(Bundle.main.appVersionLong)" let device = Utility.deviceModel let systemVersion = UIDevice.current.systemVersion diff --git a/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepository.swift b/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepository.swift deleted file mode 100644 index 23dffa0..0000000 --- a/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepository.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// DemoOnboardingRepository.swift -// NativeAppTemplate -// - -import Foundation -@testable import NativeAppTemplate - -@MainActor -final class DemoOnboardingRepository: OnboardingRepositoryProtocol { - var onboardings: [Onboarding] = [] - - init() { - setupMockOnboardings() - } - - // MARK: - Test Helpers - - func resetState() { - setupMockOnboardings() - } - - func addOnboarding(_ onboarding: Onboarding) { - onboardings.append(onboarding) - } - - func clearOnboardings() { - onboardings.removeAll() - } - - private func setupMockOnboardings() { - onboardings = [ - Onboarding(id: 1, imageOrientation: .portrait), - Onboarding(id: 2, imageOrientation: .landscape), - Onboarding(id: 3, imageOrientation: .portrait), - Onboarding(id: 4, imageOrientation: .landscape), - Onboarding(id: 5, imageOrientation: .portrait) - ] - } -} diff --git a/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepositoryTest.swift b/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepositoryTest.swift deleted file mode 100644 index 0d0a349..0000000 --- a/NativeAppTemplateTests/Demo/Data/Repositories/DemoOnboardingRepositoryTest.swift +++ /dev/null @@ -1,98 +0,0 @@ -// -// DemoOnboardingRepositoryTest.swift -// NativeAppTemplate -// - -@testable import NativeAppTemplate -import Testing - -@Suite -struct DemoOnboardingRepositoryTest { - @MainActor - struct Tests { - let repository = DemoOnboardingRepository() - - @Test - func initialSetup() { - repository.resetState() - - #expect(repository.onboardings.count == 5) - } - - @Test - func onboardingProperties() throws { - repository.resetState() - - let onboarding1 = try #require(repository.onboardings.first { $0.id == 1 }) - #expect(onboarding1.imageOrientation == .portrait) - - let onboarding2 = try #require(repository.onboardings.first { $0.id == 2 }) - #expect(onboarding2.imageOrientation == .landscape) - - let onboarding3 = try #require(repository.onboardings.first { $0.id == 3 }) - #expect(onboarding3.imageOrientation == .portrait) - } - - @Test - func addOnboarding() throws { - repository.resetState() - - let newOnboarding = Onboarding(id: 99, imageOrientation: .portrait) - repository.addOnboarding(newOnboarding) - - #expect(repository.onboardings.count == 6) - - let addedOnboarding = try #require(repository.onboardings.first { $0.id == 99 }) - #expect(addedOnboarding.imageOrientation == .portrait) - } - - @Test - func clearOnboardings() { - repository.resetState() - - #expect(repository.onboardings.count == 5) - - repository.clearOnboardings() - - #expect(repository.onboardings.isEmpty) - } - - @Test - func onboardingOrdering() { - repository.resetState() - - let ids = repository.onboardings.map(\.id) - #expect(ids == [1, 2, 3, 4, 5]) - - let newOnboarding = Onboarding(id: 0, imageOrientation: .portrait) - repository.addOnboarding(newOnboarding) - - let updatedIds = repository.onboardings.map(\.id) - #expect(updatedIds == [1, 2, 3, 4, 5, 0]) - } - - @Test - func onboardingIdentifiability() throws { - repository.resetState() - - let ids = repository.onboardings.map(\.id) - let uniqueIds = Set(ids) - #expect(ids.count == uniqueIds.count) - } - - @Test - func onboardingHashability() throws { - repository.resetState() - - let onboarding1 = try #require(repository.onboardings.first { $0.id == 1 }) - let onboarding2 = try #require(repository.onboardings.first { $0.id == 1 }) - let onboarding3 = try #require(repository.onboardings.first { $0.id == 2 }) - - #expect(onboarding1 == onboarding2) - #expect(onboarding1 != onboarding3) - - let onboardingSet: Set = [onboarding1, onboarding2, onboarding3] - #expect(onboardingSet.count == 2) - } - } -} diff --git a/NativeAppTemplateTests/Testing/Repositories/TestOnboardingRepository.swift b/NativeAppTemplateTests/Testing/Repositories/TestOnboardingRepository.swift deleted file mode 100644 index 4cf7ff5..0000000 --- a/NativeAppTemplateTests/Testing/Repositories/TestOnboardingRepository.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// TestOnboardingRepository.swift -// NativeAppTemplate -// - -import Foundation -@testable import NativeAppTemplate - -@MainActor -final class TestOnboardingRepository: OnboardingRepositoryProtocol { - var onboardings: [Onboarding] = [] - - /// A test-only - func setOnboardings(onboardings: [Onboarding]) { - self.onboardings = onboardings - } -} diff --git a/NativeAppTemplateTests/UI/App Root/OnboardingViewModelTest.swift b/NativeAppTemplateTests/UI/App Root/OnboardingViewModelTest.swift deleted file mode 100644 index 2d30733..0000000 --- a/NativeAppTemplateTests/UI/App Root/OnboardingViewModelTest.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// OnboardingViewModelTest.swift -// NativeAppTemplate -// - -import Foundation -@testable import NativeAppTemplate -import Testing - -@MainActor -@Suite -struct OnboardingViewModelTest { - let onboardingRepository = TestOnboardingRepository() - - func mockOnboarding( - id: Int = 1, - imageOrientation: ImageOrientation = .portrait - ) -> Onboarding { - Onboarding( - id: id, - imageOrientation: imageOrientation - ) - } - - @Test - func initialState() { - let viewModel = OnboardingViewModel( - onboardingRepository: onboardingRepository - ) - - #expect(viewModel.onboardings.isEmpty) - } - - @Test - func exposesRepositoryOnboardings() { - let onboardings = [ - mockOnboarding(id: 1, imageOrientation: .portrait), - mockOnboarding(id: 2, imageOrientation: .landscape), - mockOnboarding(id: 3, imageOrientation: .portrait) - ] - - onboardingRepository.setOnboardings(onboardings: onboardings) - - let viewModel = OnboardingViewModel( - onboardingRepository: onboardingRepository - ) - - #expect(viewModel.onboardings.count == 3) - } - - @Test - func onboardingDescription() { - let viewModel = OnboardingViewModel( - onboardingRepository: onboardingRepository - ) - - #expect(viewModel.onboardingDescription(index: 1) == Strings.onboardingDescription1) - #expect(viewModel.onboardingDescription(index: 2) == Strings.onboardingDescription2) - #expect(viewModel.onboardingDescription(index: 3) == Strings.onboardingDescription3) - #expect(viewModel.onboardingDescription(index: 4) == Strings.onboardingDescription4) - } - - @Test - func onboardingDescriptionInvalidIndex() { - let viewModel = OnboardingViewModel( - onboardingRepository: onboardingRepository - ) - - #expect(viewModel.onboardingDescription(index: 0) == Strings.onboardingDescription1) - #expect(viewModel.onboardingDescription(index: 99) == Strings.onboardingDescription1) - } - - @Test - func onboardingWithMixedImageTypes() { - let onboardings = [ - mockOnboarding(id: 1, imageOrientation: .portrait), - mockOnboarding(id: 2, imageOrientation: .landscape), - mockOnboarding(id: 3, imageOrientation: .portrait), - mockOnboarding(id: 4, imageOrientation: .landscape) - ] - - onboardingRepository.setOnboardings(onboardings: onboardings) - - let viewModel = OnboardingViewModel( - onboardingRepository: onboardingRepository - ) - - #expect(viewModel.onboardings.count == 4) - #expect(viewModel.onboardings[0].imageOrientation == .portrait) - #expect(viewModel.onboardings[1].imageOrientation == .landscape) - #expect(viewModel.onboardings[2].imageOrientation == .portrait) - #expect(viewModel.onboardings[3].imageOrientation == .landscape) - } -}