diff --git a/ios/circolapp/Podfile b/ios/circolapp/Podfile index 050ab5d..b3b872a 100644 --- a/ios/circolapp/Podfile +++ b/ios/circolapp/Podfile @@ -8,4 +8,5 @@ target 'circolapp' do pod 'shared', :path => '../../shared' pod 'Firebase/Messaging' pod 'Firebase/AppDistribution' + pod 'AppStorage', '~> 1.0.3' end diff --git a/ios/circolapp/Podfile.lock b/ios/circolapp/Podfile.lock index edb4d55..62dbd78 100644 --- a/ios/circolapp/Podfile.lock +++ b/ios/circolapp/Podfile.lock @@ -1,4 +1,5 @@ PODS: + - AppStorage (1.0.3) - Firebase/AppDistribution (7.1.0): - Firebase/CoreOnly - FirebaseAppDistribution (~> 7.1.0-beta) @@ -69,12 +70,14 @@ PODS: - HTMLKit (~> 3.1.0) DEPENDENCIES: + - AppStorage (~> 1.0.3) - Firebase/AppDistribution - Firebase/Messaging - shared (from `../../shared`) SPEC REPOS: trunk: + - AppStorage - Firebase - FirebaseAppDistribution - FirebaseCore @@ -93,6 +96,7 @@ EXTERNAL SOURCES: :path: "../../shared" SPEC CHECKSUMS: + AppStorage: dc9e2c18b5ebb7fed666af00c103b1c1432d459b Firebase: 78e8dd2e39d653de6270432ad84fe8b59f7bf4e8 FirebaseAppDistribution: 055561ff2d0682e92492c00f4bd2acf562f9eb6f FirebaseCore: 20046127eef0fcb8fa25df7fc12f7b97d4e48611 @@ -107,6 +111,6 @@ SPEC CHECKSUMS: PromisesObjC: 8c196f5a328c2cba3e74624585467a557dcb482f shared: fb3154b4def038b2b13aa88e01dd9f91bb2de9b5 -PODFILE CHECKSUM: a487659931a7673e546d39f1a5fb311269291d94 +PODFILE CHECKSUM: 072fc8452438117fc96c91f862d3a31d3cf40f14 COCOAPODS: 1.10.0 diff --git a/ios/circolapp/circolapp.xcodeproj/project.pbxproj b/ios/circolapp/circolapp.xcodeproj/project.pbxproj index 0e9aa50..93e7b9f 100644 --- a/ios/circolapp/circolapp.xcodeproj/project.pbxproj +++ b/ios/circolapp/circolapp.xcodeproj/project.pbxproj @@ -9,7 +9,7 @@ /* Begin PBXBuildFile section */ 9512D3C1257AB4F60023C3A1 /* NewReminderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9512D3C0257AB4F60023C3A1 /* NewReminderView.swift */; }; 952DEDDF2576F8DC001DF85D /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 952DEDDE2576F8DC001DF85D /* SceneDelegate.swift */; }; - 9547205B2573B688005AA401 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 9547205A2573B688005AA401 /* Settings.bundle */; }; + 953DDE7E2580312500C457CE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 953DDE7D2580312500C457CE /* LaunchScreen.storyboard */; }; 954AF8F62588A5C300666D0C /* CircularList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954AF8F52588A5C300666D0C /* CircularList.swift */; }; 954AF8F82588A5CF00666D0C /* FavouritesList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954AF8F72588A5CF00666D0C /* FavouritesList.swift */; }; 954AF8FA2588A5DD00666D0C /* RemindersList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954AF8F92588A5DD00666D0C /* RemindersList.swift */; }; @@ -23,6 +23,7 @@ 955B7A10257D10A70091B1F9 /* ViewControllerResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 955B7A0F257D10A70091B1F9 /* ViewControllerResolver.swift */; }; 95906F48257508660060F5D0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 95906F47257506360060F5D0 /* Assets.xcassets */; }; 95906F4D257510370060F5D0 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 95906F4C257510370060F5D0 /* GoogleService-Info.plist */; }; + 95B4CE142588BC890090D5E8 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B4CE132588BC890090D5E8 /* SettingsView.swift */; }; 95BC3BF82572BCF900F24400 /* AttachmentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95BC3BF72572BCF900F24400 /* AttachmentView.swift */; }; 95C46A51255D3A34007A75E5 /* CircularViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C46A50255D3A34007A75E5 /* CircularViewModel.swift */; }; 95C9CBA32570EDEE005F879D /* Pods_circolapp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BEA78E7C5BBEF0119834B33 /* Pods_circolapp.framework */; settings = {ATTRIBUTES = (Required, ); }; }; @@ -53,7 +54,7 @@ 9512D3C0257AB4F60023C3A1 /* NewReminderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewReminderView.swift; sourceTree = ""; }; 952C5954255C57650018C010 /* shared.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = shared.framework; path = "../../shared/build/xcode-frameworks/shared.framework"; sourceTree = ""; }; 952DEDDE2576F8DC001DF85D /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 9547205A2573B688005AA401 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; }; + 953DDE7D2580312500C457CE /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 954AF8F52588A5C300666D0C /* CircularList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularList.swift; sourceTree = ""; }; 954AF8F72588A5CF00666D0C /* FavouritesList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavouritesList.swift; sourceTree = ""; }; 954AF8F92588A5DD00666D0C /* RemindersList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemindersList.swift; sourceTree = ""; }; @@ -68,6 +69,7 @@ 95906F47257506360060F5D0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 95906F4C257510370060F5D0 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 959B531E25764726009AD895 /* circolapp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = circolapp.entitlements; sourceTree = ""; }; + 95B4CE132588BC890090D5E8 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 95BC3BF72572BCF900F24400 /* AttachmentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentView.swift; sourceTree = ""; }; 95C46A50255D3A34007A75E5 /* CircularViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularViewModel.swift; sourceTree = ""; }; 95CA31AC255C1EDE00AC095B /* circolapp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = circolapp.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -132,6 +134,7 @@ 954AF8F52588A5C300666D0C /* CircularList.swift */, 954AF8F72588A5CF00666D0C /* FavouritesList.swift */, 954AF8F92588A5DD00666D0C /* RemindersList.swift */, + 95B4CE132588BC890090D5E8 /* SettingsView.swift */, ); path = View; sourceTree = ""; @@ -173,10 +176,10 @@ 95CA31AF255C1EDE00AC095B /* AppDelegate.swift */, 952DEDDE2576F8DC001DF85D /* SceneDelegate.swift */, 954E683C2574ED9E0034EBA8 /* UserDefaultsExtensions.swift */, + 953DDE7D2580312500C457CE /* LaunchScreen.storyboard */, 95CA31B8255C1EE000AC095B /* Info.plist */, 95906F4C257510370060F5D0 /* GoogleService-Info.plist */, 95906F47257506360060F5D0 /* Assets.xcassets */, - 9547205A2573B688005AA401 /* Settings.bundle */, 95CA31B5255C1EE000AC095B /* Preview Content */, ); path = circolapp; @@ -253,7 +256,7 @@ 95CA31B7255C1EE000AC095B /* Preview Assets.xcassets in Resources */, 95906F4D257510370060F5D0 /* GoogleService-Info.plist in Resources */, 95906F48257508660060F5D0 /* Assets.xcassets in Resources */, - 9547205B2573B688005AA401 /* Settings.bundle in Resources */, + 953DDE7E2580312500C457CE /* LaunchScreen.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -324,6 +327,7 @@ 955B7A0E257D098C0091B1F9 /* SearchBar.swift in Sources */, 9554BDB8257E498F00D8925B /* OnboardingView.swift in Sources */, 95C46A51255D3A34007A75E5 /* CircularViewModel.swift in Sources */, + 95B4CE142588BC890090D5E8 /* SettingsView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/circolapp/circolapp.xcodeproj/xcshareddata/xcschemes/circolapp.xcscheme b/ios/circolapp/circolapp.xcodeproj/xcshareddata/xcschemes/circolapp.xcscheme index 367b553..cacb474 100644 --- a/ios/circolapp/circolapp.xcodeproj/xcshareddata/xcschemes/circolapp.xcscheme +++ b/ios/circolapp/circolapp.xcodeproj/xcshareddata/xcschemes/circolapp.xcscheme @@ -1,6 +1,6 @@ UILaunchScreen + UILaunchStoryboardName + LaunchScreen UIRequiredDeviceCapabilities armv7 diff --git a/ios/circolapp/circolapp/LaunchScreen.storyboard b/ios/circolapp/circolapp/LaunchScreen.storyboard new file mode 100644 index 0000000..6cbd626 --- /dev/null +++ b/ios/circolapp/circolapp/LaunchScreen.storyboard @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/circolapp/circolapp/Settings.bundle/Root.plist b/ios/circolapp/circolapp/Settings.bundle/Root.plist deleted file mode 100644 index 9450304..0000000 --- a/ios/circolapp/circolapp/Settings.bundle/Root.plist +++ /dev/null @@ -1,53 +0,0 @@ - - - - - StringsTable - Root - PreferenceSpecifiers - - - Type - PSGroupSpecifier - Title - General - - - Type - PSMultiValueSpecifier - Title - School - Key - school - DefaultValue - 0 - Titles - - Liceo scientifico Maria Curie - Liceo G.F. Porporato - - Values - - 0 - 1 - - - - Type - PSGroupSpecifier - Title - Notifications - - - Type - PSToggleSwitchSpecifier - Title - Notifications - Key - enable_notifications - DefaultValue - - - - - diff --git a/ios/circolapp/circolapp/Settings.bundle/en.lproj/Root.strings b/ios/circolapp/circolapp/Settings.bundle/en.lproj/Root.strings deleted file mode 100644 index 70c33ce..0000000 Binary files a/ios/circolapp/circolapp/Settings.bundle/en.lproj/Root.strings and /dev/null differ diff --git a/ios/circolapp/circolapp/View/ContentView.swift b/ios/circolapp/circolapp/View/ContentView.swift index dd44d9c..9abad79 100644 --- a/ios/circolapp/circolapp/View/ContentView.swift +++ b/ios/circolapp/circolapp/View/ContentView.swift @@ -42,6 +42,12 @@ struct ContentView: View { Image(systemName: "alarm.fill") Text("Reminders") } + + SettingsView() + .tabItem { + Image(systemName: "gear") + Text("Settings") + } }.sheet(isPresented: self.$showOnboarding, onDismiss: { UserDefaults.standard.set(true, forKey: "skipOnboarding") }) { diff --git a/ios/circolapp/circolapp/View/OnboardingView.swift b/ios/circolapp/circolapp/View/OnboardingView.swift index f3d66e2..40f2d8a 100644 --- a/ios/circolapp/circolapp/View/OnboardingView.swift +++ b/ios/circolapp/circolapp/View/OnboardingView.swift @@ -17,11 +17,11 @@ */ import SwiftUI -import Combine +import AppStorage import Shared struct OnboardingView: View { - @State private var school = 0 + @AppStorageCompat("school") var school = 0 @Environment(\.presentationMode) var presentationMode private let serverCompanion = ServerAPI.Companion() @@ -38,9 +38,6 @@ struct OnboardingView: View { Text(serverCompanion.getServerName(server: server)) } } - .onReceive([self.school].publisher.first()) { value in - UserDefaults.standard.set(value, forKey: "school") - } } .navigationBarTitle("Welcome to CircolApp") .navigationBarItems(trailing: Button(action: { diff --git a/ios/circolapp/circolapp/View/SettingsView.swift b/ios/circolapp/circolapp/View/SettingsView.swift new file mode 100644 index 0000000..6f6b00f --- /dev/null +++ b/ios/circolapp/circolapp/View/SettingsView.swift @@ -0,0 +1,50 @@ +/* + * Circolapp + * Copyright (C) 2019-2020 Matteo Schiff + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import SwiftUI +import AppStorage +import Shared + +struct SettingsView: View { + @AppStorageCompat("school") var school = 0 + + private let serverCompanion = ServerAPI.Companion() + + var body: some View { + NavigationView { + Form { + Picker("School", selection: $school) { + ForEach(0..