From a5fd817a3ebc1c9d8a47fa340410e8fa3a271f63 Mon Sep 17 00:00:00 2001 From: Jae Ung Jang Date: Wed, 10 May 2023 14:26:32 +0900 Subject: [PATCH 01/18] chore : cloud init --- CookCookMom.xcodeproj/project.pbxproj | 33 +++++++++- CookCookMom/ContentView.swift | 1 + CookCookMom/CookCookMom.entitlements | 16 +++++ .../CookCookMom.xcdatamodel/contents | 7 +++ CookCookMom/CookCookMomApp.swift | 4 ++ CookCookMom/Info.plist | 10 +++ CookCookMom/Model/PersistenceController.swift | 62 +++++++++++++++++++ 7 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 CookCookMom/CookCookMom.entitlements create mode 100644 CookCookMom/CookCookMom.xcdatamodeld/CookCookMom.xcdatamodel/contents create mode 100644 CookCookMom/Info.plist create mode 100644 CookCookMom/Model/PersistenceController.swift diff --git a/CookCookMom.xcodeproj/project.pbxproj b/CookCookMom.xcodeproj/project.pbxproj index 79eba2e..f3a253c 100644 --- a/CookCookMom.xcodeproj/project.pbxproj +++ b/CookCookMom.xcodeproj/project.pbxproj @@ -26,6 +26,8 @@ 36673D512A0136F0001EEB19 /* ShoppingCart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36673D502A0136F0001EEB19 /* ShoppingCart.swift */; }; 36673D532A023BDD001EEB19 /* Ingredient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36673D522A023BDD001EEB19 /* Ingredient.swift */; }; 36673D552A0282E5001EEB19 /* IngredientC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36673D542A0282E5001EEB19 /* IngredientC.swift */; }; + 402F505B2A0AB4B70093C94B /* PersistenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402F505A2A0AB4B70093C94B /* PersistenceController.swift */; }; + 402F505E2A0AB4DE0093C94B /* CookCookMom.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 402F505C2A0AB4DE0093C94B /* CookCookMom.xcdatamodeld */; }; 6FCE85852A08D43E0086FB52 /* IngredientModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FCE85842A08D43E0086FB52 /* IngredientModel.swift */; }; 6FCE85882A08D4BE0086FB52 /* TestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FCE85872A08D4BE0086FB52 /* TestView.swift */; }; 6FCE858A2A08D4C70086FB52 /* IngredientsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FCE85892A08D4C70086FB52 /* IngredientsViewModel.swift */; }; @@ -52,6 +54,10 @@ 36673D502A0136F0001EEB19 /* ShoppingCart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShoppingCart.swift; sourceTree = ""; }; 36673D522A023BDD001EEB19 /* Ingredient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ingredient.swift; sourceTree = ""; }; 36673D542A0282E5001EEB19 /* IngredientC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IngredientC.swift; sourceTree = ""; }; + 402F50582A0AB3F70093C94B /* CookCookMom.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = CookCookMom.entitlements; sourceTree = ""; }; + 402F50592A0AB4220093C94B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 402F505A2A0AB4B70093C94B /* PersistenceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceController.swift; sourceTree = ""; }; + 402F505D2A0AB4DE0093C94B /* CookCookMom.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = CookCookMom.xcdatamodel; sourceTree = ""; }; 6FCE85842A08D43E0086FB52 /* IngredientModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IngredientModel.swift; sourceTree = ""; }; 6FCE85872A08D4BE0086FB52 /* TestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestView.swift; sourceTree = ""; }; 6FCE85892A08D4C70086FB52 /* IngredientsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IngredientsViewModel.swift; sourceTree = ""; }; @@ -88,6 +94,8 @@ 187ADEFA29FA5D8400C4CDCD /* CookCookMom */ = { isa = PBXGroup; children = ( + 402F50592A0AB4220093C94B /* Info.plist */, + 402F50582A0AB3F70093C94B /* CookCookMom.entitlements */, 18DA57262A08EE7100EE16EA /* Constants */, 18DA57092A08E29C00EE16EA /* Model */, 18DA57082A08E29000EE16EA /* View */, @@ -101,6 +109,7 @@ 36673D522A023BDD001EEB19 /* Ingredient.swift */, 36673D542A0282E5001EEB19 /* IngredientC.swift */, 187ADEFF29FA5D8500C4CDCD /* Assets.xcassets */, + 402F505C2A0AB4DE0093C94B /* CookCookMom.xcdatamodeld */, 187ADF0129FA5D8500C4CDCD /* Preview Content */, ); path = CookCookMom; @@ -138,6 +147,7 @@ isa = PBXGroup; children = ( 6FCE85842A08D43E0086FB52 /* IngredientModel.swift */, + 402F505A2A0AB4B70093C94B /* PersistenceController.swift */, ); path = Model; sourceTree = ""; @@ -283,6 +293,8 @@ 18DA572A2A08EEDC00EE16EA /* SendView.swift in Sources */, 363BE19D2A0A3070005E2876 /* CartView.swift in Sources */, 36673D552A0282E5001EEB19 /* IngredientC.swift in Sources */, + 402F505E2A0AB4DE0093C94B /* CookCookMom.xcdatamodeld in Sources */, + 402F505B2A0AB4B70093C94B /* PersistenceController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -408,12 +420,14 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = CookCookMom/CookCookMom.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"CookCookMom/Preview Content\""; - DEVELOPMENT_TEAM = L4S47TM436; + DEVELOPMENT_TEAM = M8JXU75248; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CookCookMom/Info.plist; INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "\"CookCookMom\" use bluetooth"; INFOPLIST_KEY_NSBluetoothPeripheralUsageDescription = "\"CookCookMom\" use bluetooth"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; @@ -440,12 +454,14 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = CookCookMom/CookCookMom.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"CookCookMom/Preview Content\""; - DEVELOPMENT_TEAM = L4S47TM436; + DEVELOPMENT_TEAM = M8JXU75248; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = CookCookMom/Info.plist; INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "\"CookCookMom\" use bluetooth"; INFOPLIST_KEY_NSBluetoothPeripheralUsageDescription = "\"CookCookMom\" use bluetooth"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; @@ -489,6 +505,19 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 402F505C2A0AB4DE0093C94B /* CookCookMom.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 402F505D2A0AB4DE0093C94B /* CookCookMom.xcdatamodel */, + ); + currentVersion = 402F505D2A0AB4DE0093C94B /* CookCookMom.xcdatamodel */; + path = CookCookMom.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ }; rootObject = 187ADEF029FA5D8400C4CDCD /* Project object */; } diff --git a/CookCookMom/ContentView.swift b/CookCookMom/ContentView.swift index a72dc31..070870c 100644 --- a/CookCookMom/ContentView.swift +++ b/CookCookMom/ContentView.swift @@ -8,6 +8,7 @@ import SwiftUI struct ContentView: View { + @StateObject var ingredientsViewModel: IngredientsViewModel = IngredientsViewModel(ingredientModels: [.carrot,.mushroom,.fish,.scallion,.onion,.paprika,.potato,.eggplant,.meat]) @StateObject var peripheral: PeripheralViewModel = PeripheralViewModel() var body: some View { diff --git a/CookCookMom/CookCookMom.entitlements b/CookCookMom/CookCookMom.entitlements new file mode 100644 index 0000000..2ae67c1 --- /dev/null +++ b/CookCookMom/CookCookMom.entitlements @@ -0,0 +1,16 @@ + + + + + aps-environment + development + com.apple.developer.icloud-container-identifiers + + iCloud.com.myApp.container + + com.apple.developer.icloud-services + + CloudKit + + + diff --git a/CookCookMom/CookCookMom.xcdatamodeld/CookCookMom.xcdatamodel/contents b/CookCookMom/CookCookMom.xcdatamodeld/CookCookMom.xcdatamodel/contents new file mode 100644 index 0000000..fbd6659 --- /dev/null +++ b/CookCookMom/CookCookMom.xcdatamodeld/CookCookMom.xcdatamodel/contents @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/CookCookMom/CookCookMomApp.swift b/CookCookMom/CookCookMomApp.swift index 454f178..26cb6f3 100644 --- a/CookCookMom/CookCookMomApp.swift +++ b/CookCookMom/CookCookMomApp.swift @@ -9,9 +9,13 @@ import SwiftUI @main struct CookCookMomApp: App { + + let persistenceController = PersistenceController.shared + var body: some Scene { WindowGroup { ContentView() + .environment(\.managedObjectContext, persistenceController.container.viewContext) } } } diff --git a/CookCookMom/Info.plist b/CookCookMom/Info.plist new file mode 100644 index 0000000..ca9a074 --- /dev/null +++ b/CookCookMom/Info.plist @@ -0,0 +1,10 @@ + + + + + UIBackgroundModes + + remote-notification + + + diff --git a/CookCookMom/Model/PersistenceController.swift b/CookCookMom/Model/PersistenceController.swift new file mode 100644 index 0000000..860f495 --- /dev/null +++ b/CookCookMom/Model/PersistenceController.swift @@ -0,0 +1,62 @@ +// +// PersistenceController.swift +// CookCookMom +// +// Created by JaeUngJang on 2023/05/10. +// + +import CoreData + +struct PersistenceController { + static let shared = PersistenceController() + + static var preview: PersistenceController = { + let result = PersistenceController(inMemory: true) + let viewContext = result.container.viewContext + for _ in 0..<10 { + let newItem = Item(context: viewContext) + newItem.timestamp = Date() + } + do { + try viewContext.save() + } catch { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + let nsError = error as NSError + fatalError("Unresolved error \(nsError), \(nsError.userInfo)") + } + return result + }() + + let container: NSPersistentCloudKitContainer + + init(inMemory: Bool = false) { + container = NSPersistentCloudKitContainer(name: "CookCookMom") + if inMemory { + container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null") + } + container.loadPersistentStores(completionHandler: { (storeDescription, error) in + if let error = error as NSError? { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + + /* + Typical reasons for an error here include: + * The parent directory does not exist, cannot be created, or disallows writing. + * The persistent store is not accessible, due to permissions or data protection when the device is locked. + * The device is out of space. + * The store could not be migrated to the current model version. + Check the error message to determine what the actual problem was. + */ + fatalError("Unresolved error \(error), \(error.userInfo)") + } + }) + container.viewContext.automaticallyMergesChangesFromParent = true + container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy + do { + try container.viewContext.setQueryGenerationFrom(.current) + } catch { + fatalError("Failed to pin viewContext to the current generation:\(error)") + } + } +} From a3384f4291b742ab8c051b1c92090737d47bbba6 Mon Sep 17 00:00:00 2001 From: Jae Ung Jang Date: Thu, 11 May 2023 16:23:17 +0900 Subject: [PATCH 02/18] feat : synchronize database --- CookCookMom.xcodeproj/project.pbxproj | 2 +- CookCookMom/Constants/SendView.swift | 102 ++++++++++++++++-- CookCookMom/ContentView.swift | 4 + .../CookCookMom.xcdatamodel/contents | 6 +- CookCookMom/CookCookMomApp.swift | 4 +- CookCookMom/Model/PersistenceController.swift | 2 +- .../IngredientsViewModel.swift | 1 + 7 files changed, 105 insertions(+), 16 deletions(-) diff --git a/CookCookMom.xcodeproj/project.pbxproj b/CookCookMom.xcodeproj/project.pbxproj index f3a253c..3c91f11 100644 --- a/CookCookMom.xcodeproj/project.pbxproj +++ b/CookCookMom.xcodeproj/project.pbxproj @@ -441,7 +441,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.cookcookmom.mom; + PRODUCT_BUNDLE_IDENTIFIER = com.cookcookmo; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index 4e5a628..ee0797c 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -8,6 +8,20 @@ import SwiftUI struct SendView: View { + + @Environment(\.managedObjectContext) private var viewContext + + @FetchRequest( + sortDescriptors: [NSSortDescriptor(keyPath: \RawIngredients.timestamp, ascending: true)], + animation: .default) + private var rawIngredients: FetchedResults + + @FetchRequest( + sortDescriptors: [NSSortDescriptor(keyPath: \ChoppedIngredient.timestamp, ascending: true)], + animation: .default) + private var choppedIngredients: FetchedResults + + @StateObject var ingredientsViewModel: IngredientsViewModel @StateObject var peripheral: PeripheralViewModel @@ -16,13 +30,38 @@ struct SendView: View { Color(red: 242 / 255, green: 242 / 255, blue: 247 / 255) .ignoresSafeArea() VStack { - NotificationButton() - CartView(ingredientsViewModel: ingredientsViewModel) - .padding(10) - Text("아이에게 어떤 재료를 보낼까요?") - .font(.title2) - .bold() - .padding(20) +// NotificationButton() +// CartView(ingredientsViewModel: ingredientsViewModel) +// .padding(10) +// Text("아이에게 어떤 재료를 보낼까요?") +// .font(.title2) +// .bold() +// .padding(20) + + List{ + Text("리스트") + ForEach(rawIngredients) { item in + Text(item.ingredients!) + } + } +// List { +// ForEach(rawIngredients) { item in +// NavigationLink { +// Text("Raw Ingredient at \(item.timestamp!, formatter: itemFormatter)") +// } label: { +// VStack { +// Text("\(item.ingredients!)") +// Text(item.timestamp!, formatter: itemFormatter) +// } +// } +// } +// .onDelete(perform: deleteRawIngredients) +// } +// .toolbar { +// ToolbarItemGroup(placement: .navigationBarTrailing) { +// EditButton() +// } +// } ForEach(0..<3) { stack in HStack{ ForEach(stack*3.. - + + + + + diff --git a/CookCookMom/CookCookMomApp.swift b/CookCookMom/CookCookMomApp.swift index 26cb6f3..79f8670 100644 --- a/CookCookMom/CookCookMomApp.swift +++ b/CookCookMom/CookCookMomApp.swift @@ -10,12 +10,12 @@ import SwiftUI @main struct CookCookMomApp: App { - let persistenceController = PersistenceController.shared +// let persistenceController = PersistenceController.shared var body: some Scene { WindowGroup { ContentView() - .environment(\.managedObjectContext, persistenceController.container.viewContext) +// .environment(\.managedObjectContext, persistenceController.container.viewContext) } } } diff --git a/CookCookMom/Model/PersistenceController.swift b/CookCookMom/Model/PersistenceController.swift index 860f495..e259a37 100644 --- a/CookCookMom/Model/PersistenceController.swift +++ b/CookCookMom/Model/PersistenceController.swift @@ -14,7 +14,7 @@ struct PersistenceController { let result = PersistenceController(inMemory: true) let viewContext = result.container.viewContext for _ in 0..<10 { - let newItem = Item(context: viewContext) + let newItem = RawIngredients(context: viewContext) newItem.timestamp = Date() } do { diff --git a/CookCookMom/ViewModel/SendIngredients/IngredientsViewModel.swift b/CookCookMom/ViewModel/SendIngredients/IngredientsViewModel.swift index a98d660..82798b0 100644 --- a/CookCookMom/ViewModel/SendIngredients/IngredientsViewModel.swift +++ b/CookCookMom/ViewModel/SendIngredients/IngredientsViewModel.swift @@ -55,6 +55,7 @@ class IngredientsViewModel : ObservableObject { } clickCount = 0 } + } From 314e8b37d0c19e6f3b0587f84d1c7bb2f9b5cf65 Mon Sep 17 00:00:00 2001 From: musclefrog Date: Fri, 12 May 2023 15:52:24 +0900 Subject: [PATCH 03/18] chore : edit notification view --- CookCookMom.xcodeproj/project.pbxproj | 29 +++ CookCookMom/Constants/SendView.swift | 173 ++++++++++-------- CookCookMom/CookCookMomApp.swift | 4 + .../Model.xcdatamodel/contents | 8 + CookCookMom/Model/PersistenceController.swift | 56 ++++++ CookCookMom/View/NotificationListView.swift | 97 ++++++++++ CookCookMom/View/NotificationRowView.swift | 93 ++++++++++ 7 files changed, 379 insertions(+), 81 deletions(-) create mode 100644 CookCookMom/Model.xcdatamodeld/Model.xcdatamodel/contents create mode 100644 CookCookMom/Model/PersistenceController.swift create mode 100644 CookCookMom/View/NotificationListView.swift create mode 100644 CookCookMom/View/NotificationRowView.swift diff --git a/CookCookMom.xcodeproj/project.pbxproj b/CookCookMom.xcodeproj/project.pbxproj index 79eba2e..0d12617 100644 --- a/CookCookMom.xcodeproj/project.pbxproj +++ b/CookCookMom.xcodeproj/project.pbxproj @@ -18,6 +18,10 @@ 18DA572A2A08EEDC00EE16EA /* SendView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA57292A08EEDC00EE16EA /* SendView.swift */; }; 18DA572D2A08EF0C00EE16EA /* SendIngredientsButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA572C2A08EF0C00EE16EA /* SendIngredientsButton.swift */; }; 18DA572F2A09222C00EE16EA /* CentralView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA572E2A09222C00EE16EA /* CentralView.swift */; }; + 363087BF2A0B68E20062DDC9 /* PersistenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087BE2A0B68E20062DDC9 /* PersistenceController.swift */; }; + 363087C12A0B69100062DDC9 /* NotificationListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087C02A0B69100062DDC9 /* NotificationListView.swift */; }; + 363087C32A0B69240062DDC9 /* NotificationRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087C22A0B69240062DDC9 /* NotificationRowView.swift */; }; + 363087C62A0B69620062DDC9 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 363087C42A0B69620062DDC9 /* Model.xcdatamodeld */; }; 363BE19D2A0A3070005E2876 /* CartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363BE19C2A0A3070005E2876 /* CartView.swift */; }; 36673D292A00D1DA001EEB19 /* NotificationButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36673D282A00D1DA001EEB19 /* NotificationButton.swift */; }; 36673D2B2A00D1E2001EEB19 /* IngredientButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36673D2A2A00D1E2001EEB19 /* IngredientButton.swift */; }; @@ -44,6 +48,10 @@ 18DA57292A08EEDC00EE16EA /* SendView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SendView.swift; path = CookCookMom/Constants/SendView.swift; sourceTree = SOURCE_ROOT; }; 18DA572C2A08EF0C00EE16EA /* SendIngredientsButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendIngredientsButton.swift; sourceTree = ""; }; 18DA572E2A09222C00EE16EA /* CentralView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CentralView.swift; sourceTree = ""; }; + 363087BE2A0B68E20062DDC9 /* PersistenceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceController.swift; sourceTree = ""; }; + 363087C02A0B69100062DDC9 /* NotificationListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationListView.swift; sourceTree = ""; }; + 363087C22A0B69240062DDC9 /* NotificationRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationRowView.swift; sourceTree = ""; }; + 363087C52A0B69620062DDC9 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; 363BE19C2A0A3070005E2876 /* CartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CartView.swift; sourceTree = ""; }; 36673D282A00D1DA001EEB19 /* NotificationButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationButton.swift; sourceTree = ""; }; 36673D2A2A00D1E2001EEB19 /* IngredientButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IngredientButton.swift; sourceTree = ""; }; @@ -100,6 +108,7 @@ 36673D502A0136F0001EEB19 /* ShoppingCart.swift */, 36673D522A023BDD001EEB19 /* Ingredient.swift */, 36673D542A0282E5001EEB19 /* IngredientC.swift */, + 363087C42A0B69620062DDC9 /* Model.xcdatamodeld */, 187ADEFF29FA5D8500C4CDCD /* Assets.xcassets */, 187ADF0129FA5D8500C4CDCD /* Preview Content */, ); @@ -130,6 +139,8 @@ 18DA572B2A08EEE000EE16EA /* Components */, 18DA57292A08EEDC00EE16EA /* SendView.swift */, 18DA572E2A09222C00EE16EA /* CentralView.swift */, + 363087C02A0B69100062DDC9 /* NotificationListView.swift */, + 363087C22A0B69240062DDC9 /* NotificationRowView.swift */, ); path = View; sourceTree = ""; @@ -138,6 +149,7 @@ isa = PBXGroup; children = ( 6FCE85842A08D43E0086FB52 /* IngredientModel.swift */, + 363087BE2A0B68E20062DDC9 /* PersistenceController.swift */, ); path = Model; sourceTree = ""; @@ -265,6 +277,7 @@ buildActionMask = 2147483647; files = ( 18DA57282A08EE8F00EE16EA /* TransferService.swift in Sources */, + 363087C62A0B69620062DDC9 /* Model.xcdatamodeld in Sources */, 36673D2F2A00D1EC001EEB19 /* SelectView.swift in Sources */, 36673D292A00D1DA001EEB19 /* NotificationButton.swift in Sources */, 187ADEFE29FA5D8400C4CDCD /* ContentView.swift in Sources */, @@ -278,11 +291,14 @@ 6FCE858A2A08D4C70086FB52 /* IngredientsViewModel.swift in Sources */, 18DA572F2A09222C00EE16EA /* CentralView.swift in Sources */, 18DA57252A08EE1600EE16EA /* PeripheralViewModel.swift in Sources */, + 363087C32A0B69240062DDC9 /* NotificationRowView.swift in Sources */, + 363087C12A0B69100062DDC9 /* NotificationListView.swift in Sources */, 187ADEFC29FA5D8400C4CDCD /* CookCookMomApp.swift in Sources */, 36673D512A0136F0001EEB19 /* ShoppingCart.swift in Sources */, 18DA572A2A08EEDC00EE16EA /* SendView.swift in Sources */, 363BE19D2A0A3070005E2876 /* CartView.swift in Sources */, 36673D552A0282E5001EEB19 /* IngredientC.swift in Sources */, + 363087BF2A0B68E20062DDC9 /* PersistenceController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -489,6 +505,19 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 363087C42A0B69620062DDC9 /* Model.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 363087C52A0B69620062DDC9 /* Model.xcdatamodel */, + ); + currentVersion = 363087C52A0B69620062DDC9 /* Model.xcdatamodel */; + path = Model.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ }; rootObject = 187ADEF029FA5D8400C4CDCD /* Project object */; } diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index 4e5a628..43ab57c 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -12,91 +12,102 @@ struct SendView: View { @StateObject var peripheral: PeripheralViewModel var body: some View { - ZStack{ - Color(red: 242 / 255, green: 242 / 255, blue: 247 / 255) - .ignoresSafeArea() - VStack { - NotificationButton() - CartView(ingredientsViewModel: ingredientsViewModel) - .padding(10) - Text("아이에게 어떤 재료를 보낼까요?") - .font(.title2) - .bold() - .padding(20) - ForEach(0..<3) { stack in - HStack{ - ForEach(stack*3.. + + + + + + + \ No newline at end of file diff --git a/CookCookMom/Model/PersistenceController.swift b/CookCookMom/Model/PersistenceController.swift new file mode 100644 index 0000000..e7d3a80 --- /dev/null +++ b/CookCookMom/Model/PersistenceController.swift @@ -0,0 +1,56 @@ +// +// Persistence.swift +// TestNoti +// +// Created by JaeUngJang on 2023/05/08. +// + +import CoreData + +struct PersistenceController { + static let shared = PersistenceController() + + static var preview: PersistenceController = { + let result = PersistenceController(inMemory: true) + let viewContext = result.container.viewContext + for _ in 0..<10 { + let newItem = Item(context: viewContext) + newItem.timestamp = Date() + } + do { + try viewContext.save() + } catch { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + let nsError = error as NSError + fatalError("Unresolved error \(nsError), \(nsError.userInfo)") + } + return result + }() + + let container: NSPersistentContainer + + init(inMemory: Bool = false) { + container = NSPersistentContainer(name: "Model") + if inMemory { + container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null") + } + container.loadPersistentStores(completionHandler: { (storeDescription, error) in + if let error = error as NSError? { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + + /* + Typical reasons for an error here include: + * The parent directory does not exist, cannot be created, or disallows writing. + * The persistent store is not accessible, due to permissions or data protection when the device is locked. + * The device is out of space. + * The store could not be migrated to the current model version. + Check the error message to determine what the actual problem was. + */ + fatalError("Unresolved error \(error), \(error.userInfo)") + } + }) + container.viewContext.automaticallyMergesChangesFromParent = true + } +} diff --git a/CookCookMom/View/NotificationListView.swift b/CookCookMom/View/NotificationListView.swift new file mode 100644 index 0000000..4cf1331 --- /dev/null +++ b/CookCookMom/View/NotificationListView.swift @@ -0,0 +1,97 @@ +// +// NotiTestView.swift +// CookCookMom +// +// Created by JaeUngJang on 2023/05/09. +// + +import SwiftUI + +struct NotificationListView: View { + + @Environment(\.managedObjectContext) var managedObjectContext + // 1. + @FetchRequest( + // 2. + entity: Item.entity(), + // 3. + sortDescriptors: [ + NSSortDescriptor(keyPath: \Item.timestamp, ascending: false) + ] + //,predicate: NSPredicate(format: "genre contains 'Action'") + // 4. + ) var items: FetchedResults + + @State var isPresented = false + @State var receivedMsg = ["carrot", "mushroom", "fish", "scallion", "onion", "paprika", "potato", "eggplant", "meat"] + + var body: some View { + NavigationView { + List { + ForEach(items, id: \.ingredientName) { + NotificationRowView(notification: $0) + } + .onDelete(perform: deleteItem) + } + // .sheet(isPresented: $isPresented) { + // AddMovie { title, genre, release in + // self.addMovie(title: title, genre: genre, releaseDate: release) + // self.isPresented = false + // } + // } + .navigationBarItems(trailing: + Button(action: { + addItem(ingredientName: receivedMsg.randomElement()!, liked: false, timestamp: Date.now) + }) { + Image(systemName: "plus") + } + ) + .listStyle(.automatic) + } + } + + func deleteItem(at offsets: IndexSet) { + // 1. + offsets.forEach { index in + // 2. + let item = self.items[index] + + // 3. + self.managedObjectContext.delete(item) + } + + // 4. + saveContext() + } + + + func addItem(ingredientName: String, liked: Bool, timestamp: Date) { + // 1 + let newItem = Item(context: managedObjectContext) + + // 2 + newItem.ingredientName = ingredientName + newItem.liked = liked + newItem.timestamp = timestamp + + // 3 + saveContext() + } + + + func saveContext() { + do { + try managedObjectContext.save() + } catch { + print("Error saving managed object context: \(error)") + } + } + +} + +struct NotiTestView_Previews: PreviewProvider { + static var previews: some View { + NotificationListView() + } +} + diff --git a/CookCookMom/View/NotificationRowView.swift b/CookCookMom/View/NotificationRowView.swift new file mode 100644 index 0000000..4beccba --- /dev/null +++ b/CookCookMom/View/NotificationRowView.swift @@ -0,0 +1,93 @@ +// +// NotiRowTestView.swift +// CookCookMom +// +// Created by JaeUngJang on 2023/05/09. +// + +import SwiftUI +import CoreData + +struct NotificationRowView: View { + + let notification: Item + + static let dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateFormat = "M월 dd일" + return formatter + } () + + static let timeFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.locale = Locale(identifier: "ko_KR") + formatter.timeZone = TimeZone(abbreviation: "KST") + formatter.timeStyle = .short + return formatter + } () + + + + func EngToKor(eng:String?) -> (String?, String?) { + switch eng { + case "carrot": + return ("🥕", "당근을") + case "mushroom": + return ("🍄", "버섯을") + case "fish": + return ("🐟", "생선을") + case "scallion": + return ("🧪", "대파를") + case "onion": + return ("🧅", "양파를") + case "paprika": + return ("🫑", "파프리카를") + case "potato": + return ("🥔", "감자를") + case "eggplant": + return ("🍆", "가지를") + case "meat": + return ("🥩", "고기를") + default: + return ("", "") + } + } + + var body: some View { + + HStack { + VStack(alignment: .leading) { +// notification.ingredientName.map(Text.init) +// .font(.body) +// EngToKor(eng: notification.ingredientName).map(Text.init) + + var sentence: (String?, String?) = EngToKor(eng: notification.ingredientName) + Text("\(sentence.0!) 아이가 \(sentence.1!) 썰어 보냈습니다.") + .padding(1) + + + HStack { +// Text("\(notification.timestamp!, formatter: NotificationRowView.releaseFormatter)") + let a = notification.timestamp + + notification.timestamp.map { Text(Self.dateFormatter.string(from: $0)) } + .font(.subheadline) + .foregroundColor(.gray) + + notification.timestamp.map { Text(Self.timeFormatter.string(from: $0)) } + .font(.subheadline) + .foregroundColor(.gray) + } + } + Spacer() + Image(systemName: "heart") + } + + } +} + +//struct NotiRowTestView_Previews: PreviewProvider { +// static var previews: some View { +// NotificationRowView() +// } +//} From 721dc988eb4d33d7e0179bad3ed4880d389da709 Mon Sep 17 00:00:00 2001 From: Jae Ung Jang Date: Fri, 12 May 2023 16:08:47 +0900 Subject: [PATCH 04/18] chore : add lists to check database in real time --- CookCookMom/Constants/SendView.swift | 173 ++++++++++++++------------- 1 file changed, 90 insertions(+), 83 deletions(-) diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index ee0797c..a11ddc1 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -26,24 +26,30 @@ struct SendView: View { @StateObject var peripheral: PeripheralViewModel var body: some View { - ZStack{ - Color(red: 242 / 255, green: 242 / 255, blue: 247 / 255) - .ignoresSafeArea() - VStack { -// NotificationButton() -// CartView(ingredientsViewModel: ingredientsViewModel) -// .padding(10) -// Text("아이에게 어떤 재료를 보낼까요?") -// .font(.title2) -// .bold() -// .padding(20) - - List{ - Text("리스트") - ForEach(rawIngredients) { item in - Text(item.ingredients!) - } + ZStack{ + Color(red: 242 / 255, green: 242 / 255, blue: 247 / 255) + .ignoresSafeArea() + VStack { + // NotificationButton() + // CartView(ingredientsViewModel: ingredientsViewModel) + // .padding(10) + // Text("아이에게 어떤 재료를 보낼까요?") + // .font(.title2) + // .bold() + // .padding(20) + + List{ + Text("리스트") + ForEach(choppedIngredients) { item in + Text(item.ingredient!) } + } + List{ + Text("리스트") + ForEach(rawIngredients) { item in + Text(item.ingredients!) + } + } // List { // ForEach(rawIngredients) { item in // NavigationLink { @@ -62,79 +68,79 @@ struct SendView: View { // EditButton() // } // } - ForEach(0..<3) { stack in - HStack{ - ForEach(stack*3.. Date: Fri, 12 May 2023 17:38:09 +0900 Subject: [PATCH 05/18] feat : add description modal view --- CookCookMom.xcodeproj/project.pbxproj | 4 ++ CookCookMom/Constants/SendView.swift | 30 +++++--- .../View/Components/descriptionButton.swift | 27 +++++++ CookCookMom/View/DescriptionView.swift | 71 +++++++++++++++++++ 4 files changed, 123 insertions(+), 9 deletions(-) create mode 100644 CookCookMom/View/Components/descriptionButton.swift create mode 100644 CookCookMom/View/DescriptionView.swift diff --git a/CookCookMom.xcodeproj/project.pbxproj b/CookCookMom.xcodeproj/project.pbxproj index 0d12617..9775612 100644 --- a/CookCookMom.xcodeproj/project.pbxproj +++ b/CookCookMom.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ 363087C12A0B69100062DDC9 /* NotificationListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087C02A0B69100062DDC9 /* NotificationListView.swift */; }; 363087C32A0B69240062DDC9 /* NotificationRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087C22A0B69240062DDC9 /* NotificationRowView.swift */; }; 363087C62A0B69620062DDC9 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 363087C42A0B69620062DDC9 /* Model.xcdatamodeld */; }; + 363087CA2A0E1B3B0062DDC9 /* DescriptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087C92A0E1B3B0062DDC9 /* DescriptionView.swift */; }; 363BE19D2A0A3070005E2876 /* CartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363BE19C2A0A3070005E2876 /* CartView.swift */; }; 36673D292A00D1DA001EEB19 /* NotificationButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36673D282A00D1DA001EEB19 /* NotificationButton.swift */; }; 36673D2B2A00D1E2001EEB19 /* IngredientButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36673D2A2A00D1E2001EEB19 /* IngredientButton.swift */; }; @@ -52,6 +53,7 @@ 363087C02A0B69100062DDC9 /* NotificationListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationListView.swift; sourceTree = ""; }; 363087C22A0B69240062DDC9 /* NotificationRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationRowView.swift; sourceTree = ""; }; 363087C52A0B69620062DDC9 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; + 363087C92A0E1B3B0062DDC9 /* DescriptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DescriptionView.swift; sourceTree = ""; }; 363BE19C2A0A3070005E2876 /* CartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CartView.swift; sourceTree = ""; }; 36673D282A00D1DA001EEB19 /* NotificationButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationButton.swift; sourceTree = ""; }; 36673D2A2A00D1E2001EEB19 /* IngredientButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IngredientButton.swift; sourceTree = ""; }; @@ -141,6 +143,7 @@ 18DA572E2A09222C00EE16EA /* CentralView.swift */, 363087C02A0B69100062DDC9 /* NotificationListView.swift */, 363087C22A0B69240062DDC9 /* NotificationRowView.swift */, + 363087C92A0E1B3B0062DDC9 /* DescriptionView.swift */, ); path = View; sourceTree = ""; @@ -299,6 +302,7 @@ 363BE19D2A0A3070005E2876 /* CartView.swift in Sources */, 36673D552A0282E5001EEB19 /* IngredientC.swift in Sources */, 363087BF2A0B68E20062DDC9 /* PersistenceController.swift in Sources */, + 363087CA2A0E1B3B0062DDC9 /* DescriptionView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index 43ab57c..fb73e00 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -10,6 +10,7 @@ import SwiftUI struct SendView: View { @StateObject var ingredientsViewModel: IngredientsViewModel @StateObject var peripheral: PeripheralViewModel + @State private var showModal = false var body: some View { NavigationView { @@ -17,15 +18,26 @@ struct SendView: View { Color(red: 242 / 255, green: 242 / 255, blue: 247 / 255) .ignoresSafeArea() VStack { - NavigationLink { - NotificationListView() - } label: { - Image(systemName: "bell.fill") - .resizable() - .frame(width: 25, height: 25) - .foregroundColor(.black) - .padding(.top) - .padding(.leading, 300) + HStack { + Button(action: { self.showModal = true}){ Image(systemName: "info.circle.fill") + .resizable() + .frame(width: 25, height: 25) + .foregroundColor(.black) + .padding([.top,.trailing]) + }.sheet(isPresented: self.$showModal) { + DescriptionView() + } + + NavigationLink { + NotificationListView() + } label: { + Image(systemName: "bell.fill") + .resizable() + .frame(width: 25, height: 25) + .foregroundColor(.black) + .padding(.top) + .padding(.leading, 250) + } } CartView(ingredientsViewModel: ingredientsViewModel) .padding(10) diff --git a/CookCookMom/View/Components/descriptionButton.swift b/CookCookMom/View/Components/descriptionButton.swift new file mode 100644 index 0000000..b201ca8 --- /dev/null +++ b/CookCookMom/View/Components/descriptionButton.swift @@ -0,0 +1,27 @@ +// +// descriptionButton.swift +// CookCookMom +// +// Created by 김수인 on 2023/05/12. +// + +import SwiftUI + +struct descriptionButton: View { + var body: some View { + Button(action: {print("설명")}) { + Image(systemName: "info.circle.fill") + .resizable() + .frame(width: 25, height: 25) + .foregroundColor(.black) + .padding(.top) + .padding(.trailing, 300) + } + } +} + +struct descriptionButton_Previews: PreviewProvider { + static var previews: some View { + descriptionButton() + } +} diff --git a/CookCookMom/View/DescriptionView.swift b/CookCookMom/View/DescriptionView.swift new file mode 100644 index 0000000..0511366 --- /dev/null +++ b/CookCookMom/View/DescriptionView.swift @@ -0,0 +1,71 @@ +// +// descriptionView.swift +// CookCookMom +// +// Created by 김수인 on 2023/05/12. +// + +import SwiftUI + +struct DescriptionView: View { + + var body: some View { + NavigationView { + VStack { + Text("재료 선택하기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + Text("오늘 할 요리에 들어갈 재료를 선택해주세요") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + + Text("재료 보내기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("선택한 재료를 [재료 보내기] 버튼을 눌러 아이에게 보내주세요") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + + Text("아이와 함께하기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("재료를 보내고 아이에게 \"오늘 요리 같이해볼래?\" 라고 말해주세요") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + + Text("아이 칭찬하기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("아이에게 함께 썬 재료를 받으면 아이를 칭찬해주세요") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.leading) + } + .navigationTitle("이렇게 써보세요!") + .navigationBarTitleDisplayMode(.large) + + } + + } +} + +struct DescriptionView_Previews: PreviewProvider { + static var previews: some View { + DescriptionView() + } +} From 5a6fa5d51b00b32356941b132e624141eb2106eb Mon Sep 17 00:00:00 2001 From: musclefrog Date: Fri, 12 May 2023 20:27:21 +0900 Subject: [PATCH 06/18] chore : fix date sorting error --- CookCookMom/View/NotificationListView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CookCookMom/View/NotificationListView.swift b/CookCookMom/View/NotificationListView.swift index 4cf1331..b8b3f07 100644 --- a/CookCookMom/View/NotificationListView.swift +++ b/CookCookMom/View/NotificationListView.swift @@ -28,7 +28,7 @@ struct NotificationListView: View { var body: some View { NavigationView { List { - ForEach(items, id: \.ingredientName) { + ForEach(items, id: \.objectID) { NotificationRowView(notification: $0) } .onDelete(perform: deleteItem) From 67726d6d0ed698b0e58c852711a49d413594b1dd Mon Sep 17 00:00:00 2001 From: eemdeeks Date: Fri, 12 May 2023 20:37:35 +0900 Subject: [PATCH 07/18] fix : fix some build error --- CookCookMom/View/NotificationListView.swift | 40 +++++++++------------ CookCookMom/View/NotificationRowView.swift | 6 ++-- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/CookCookMom/View/NotificationListView.swift b/CookCookMom/View/NotificationListView.swift index 4cf1331..8d654f7 100644 --- a/CookCookMom/View/NotificationListView.swift +++ b/CookCookMom/View/NotificationListView.swift @@ -13,14 +13,14 @@ struct NotificationListView: View { // 1. @FetchRequest( // 2. - entity: Item.entity(), + entity: ChoppedIngredient.entity(), // 3. sortDescriptors: [ - NSSortDescriptor(keyPath: \Item.timestamp, ascending: false) + NSSortDescriptor(keyPath: \ChoppedIngredient.timestamp, ascending: false) ] //,predicate: NSPredicate(format: "genre contains 'Action'") // 4. - ) var items: FetchedResults + ) var items: FetchedResults @State var isPresented = false @State var receivedMsg = ["carrot", "mushroom", "fish", "scallion", "onion", "paprika", "potato", "eggplant", "meat"] @@ -28,7 +28,7 @@ struct NotificationListView: View { var body: some View { NavigationView { List { - ForEach(items, id: \.ingredientName) { + ForEach(items, id: \.ingredient) { NotificationRowView(notification: $0) } .onDelete(perform: deleteItem) @@ -39,13 +39,7 @@ struct NotificationListView: View { // self.isPresented = false // } // } - .navigationBarItems(trailing: - Button(action: { - addItem(ingredientName: receivedMsg.randomElement()!, liked: false, timestamp: Date.now) - }) { - Image(systemName: "plus") - } - ) + .listStyle(.automatic) } } @@ -65,18 +59,18 @@ struct NotificationListView: View { } - func addItem(ingredientName: String, liked: Bool, timestamp: Date) { - // 1 - let newItem = Item(context: managedObjectContext) - - // 2 - newItem.ingredientName = ingredientName - newItem.liked = liked - newItem.timestamp = timestamp - - // 3 - saveContext() - } +// func addItem(ingredientName: String, liked: Bool, timestamp: Date) { +// // 1 +// let newItem = Item(context: managedObjectContext) +// +// // 2 +// newItem.ingredientName = ingredientName +// newItem.liked = liked +// newItem.timestamp = timestamp +// +// // 3 +// saveContext() +// } func saveContext() { diff --git a/CookCookMom/View/NotificationRowView.swift b/CookCookMom/View/NotificationRowView.swift index 4beccba..9f18cc2 100644 --- a/CookCookMom/View/NotificationRowView.swift +++ b/CookCookMom/View/NotificationRowView.swift @@ -10,7 +10,7 @@ import CoreData struct NotificationRowView: View { - let notification: Item + let notification: ChoppedIngredient static let dateFormatter: DateFormatter = { let formatter = DateFormatter() @@ -30,7 +30,7 @@ struct NotificationRowView: View { func EngToKor(eng:String?) -> (String?, String?) { switch eng { - case "carrot": + case "carrot3D": return ("🥕", "당근을") case "mushroom": return ("🍄", "버섯을") @@ -61,7 +61,7 @@ struct NotificationRowView: View { // .font(.body) // EngToKor(eng: notification.ingredientName).map(Text.init) - var sentence: (String?, String?) = EngToKor(eng: notification.ingredientName) + var sentence: (String?, String?) = EngToKor(eng: notification.ingredient) Text("\(sentence.0!) 아이가 \(sentence.1!) 썰어 보냈습니다.") .padding(1) From a9e38a8d467d3499dc87a7845ada3189e8b314a1 Mon Sep 17 00:00:00 2001 From: musclefrog Date: Fri, 12 May 2023 21:14:24 +0900 Subject: [PATCH 08/18] chore : edit description modal view --- CookCookMom/Constants/SendView.swift | 2 + CookCookMom/View/DescriptionView.swift | 135 +++++++++++++++---------- 2 files changed, 81 insertions(+), 56 deletions(-) diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index fb73e00..486c5db 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -11,6 +11,8 @@ struct SendView: View { @StateObject var ingredientsViewModel: IngredientsViewModel @StateObject var peripheral: PeripheralViewModel @State private var showModal = false + @Environment(\.presentationMode) var presentationMode + var body: some View { NavigationView { diff --git a/CookCookMom/View/DescriptionView.swift b/CookCookMom/View/DescriptionView.swift index 0511366..98d49f6 100644 --- a/CookCookMom/View/DescriptionView.swift +++ b/CookCookMom/View/DescriptionView.swift @@ -8,64 +8,87 @@ import SwiftUI struct DescriptionView: View { - + @Environment(\.presentationMode) var presentationMode var body: some View { NavigationView { - VStack { - Text("재료 선택하기") - .font(.title3) - .bold() - .foregroundColor(.blue) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom]) - Text("오늘 할 요리에 들어갈 재료를 선택해주세요") - .font(.body) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom]) - - Text("재료 보내기") - .font(.title3) - .bold() - .foregroundColor(.blue) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom,.top]) - Text("선택한 재료를 [재료 보내기] 버튼을 눌러 아이에게 보내주세요") - .font(.body) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom]) - - Text("아이와 함께하기") - .font(.title3) - .bold() - .foregroundColor(.blue) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom,.top]) - Text("재료를 보내고 아이에게 \"오늘 요리 같이해볼래?\" 라고 말해주세요") - .font(.body) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom]) - - Text("아이 칭찬하기") - .font(.title3) - .bold() - .foregroundColor(.blue) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom,.top]) - Text("아이에게 함께 썬 재료를 받으면 아이를 칭찬해주세요") - .font(.body) - .frame(maxWidth: .infinity, alignment: .leading) - .padding(.leading) - } + ScrollView { + VStack { + Text("재료 선택하기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + Text("오늘 할 요리에 들어갈 재료를 손질할 순서대로 선택해주세요.") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + + Text("재료 보내기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("선택한 재료를 [재료 보내기] 버튼을 눌러 아이에게 보내주세요.") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + + Text("아이와 함께하기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("재료를 보내고 아이에게 \"오늘 요리 같이 해볼래?\" 라고 말해주세요. 그리고 아이용 앱에서 흔들리는 알림 아이콘을 누르게 유도해주세요.") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + + Text("아이가 손질한 재료 받기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("아이가 재료를 다 손질하면 보내기 버튼을 눌러 부모에게 보낼 수 있도록 알려주세요.") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.leading) + + Text("아이 칭찬하기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("아이가 손질한 재료를 받으면 아이를 칭찬해주세요❤️ \n\n그 외의 역할놀이에도 사용해도 좋습니다") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.leading) + + }//VStack .navigationTitle("이렇게 써보세요!") .navigationBarTitleDisplayMode(.large) - - } - - } -} - -struct DescriptionView_Previews: PreviewProvider { - static var previews: some View { - DescriptionView() - } + .toolbar{ + ToolbarItem(placement: .navigationBarTrailing){ + Button(action: {self.presentationMode.wrappedValue.dismiss()}) {Image(systemName: "xmark") + .foregroundColor(.black) + } + } + + } +// .onTapGesture { +// self.presentationMode.wrappedValue.dismiss() +// } + } + }//ScrollView + }//NavigationView } +// +//struct DescriptionView_Previews: PreviewProvider { +// static var previews: some View { +// DescriptionView() +// } +//} From 74e3b9036e6c90db2b145fd90c75b5ecae2783b7 Mon Sep 17 00:00:00 2001 From: eemdeeks Date: Sat, 13 May 2023 18:17:24 +0900 Subject: [PATCH 09/18] feat : add push notification from baby to parents --- CookCookMom.xcodeproj/project.pbxproj | 12 +-- CookCookMom/Constants/SendView.swift | 92 +++++++++++++++---- CookCookMom/ContentView.swift | 2 +- .../IngredientsViewModel.swift | 15 ++- 4 files changed, 89 insertions(+), 32 deletions(-) diff --git a/CookCookMom.xcodeproj/project.pbxproj b/CookCookMom.xcodeproj/project.pbxproj index 2d6195e..eff99c1 100644 --- a/CookCookMom.xcodeproj/project.pbxproj +++ b/CookCookMom.xcodeproj/project.pbxproj @@ -18,10 +18,9 @@ 18DA572A2A08EEDC00EE16EA /* SendView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA57292A08EEDC00EE16EA /* SendView.swift */; }; 18DA572D2A08EF0C00EE16EA /* SendIngredientsButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA572C2A08EF0C00EE16EA /* SendIngredientsButton.swift */; }; 18DA572F2A09222C00EE16EA /* CentralView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA572E2A09222C00EE16EA /* CentralView.swift */; }; - 363087BF2A0B68E20062DDC9 /* PersistenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087BE2A0B68E20062DDC9 /* PersistenceController.swift */; }; 363087C12A0B69100062DDC9 /* NotificationListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087C02A0B69100062DDC9 /* NotificationListView.swift */; }; 363087C32A0B69240062DDC9 /* NotificationRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087C22A0B69240062DDC9 /* NotificationRowView.swift */; }; - 363087C62A0B69620062DDC9 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 363087C42A0B69620062DDC9 /* Model.xcdatamodeld */; }; + 363087C62A0B69620062DDC9 /* (null) in Sources */ = {isa = PBXBuildFile; }; 363087CA2A0E1B3B0062DDC9 /* DescriptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363087C92A0E1B3B0062DDC9 /* DescriptionView.swift */; }; 363BE19D2A0A3070005E2876 /* CartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 363BE19C2A0A3070005E2876 /* CartView.swift */; }; 36673D292A00D1DA001EEB19 /* NotificationButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36673D282A00D1DA001EEB19 /* NotificationButton.swift */; }; @@ -51,10 +50,8 @@ 18DA57292A08EEDC00EE16EA /* SendView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SendView.swift; path = CookCookMom/Constants/SendView.swift; sourceTree = SOURCE_ROOT; }; 18DA572C2A08EF0C00EE16EA /* SendIngredientsButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendIngredientsButton.swift; sourceTree = ""; }; 18DA572E2A09222C00EE16EA /* CentralView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CentralView.swift; sourceTree = ""; }; - 363087BE2A0B68E20062DDC9 /* PersistenceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceController.swift; sourceTree = ""; }; 363087C02A0B69100062DDC9 /* NotificationListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationListView.swift; sourceTree = ""; }; 363087C22A0B69240062DDC9 /* NotificationRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationRowView.swift; sourceTree = ""; }; - 363087C52A0B69620062DDC9 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = ""; }; 363087C92A0E1B3B0062DDC9 /* DescriptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DescriptionView.swift; sourceTree = ""; }; 363BE19C2A0A3070005E2876 /* CartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CartView.swift; sourceTree = ""; }; 36673D282A00D1DA001EEB19 /* NotificationButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationButton.swift; sourceTree = ""; }; @@ -118,7 +115,6 @@ 36673D502A0136F0001EEB19 /* ShoppingCart.swift */, 36673D522A023BDD001EEB19 /* Ingredient.swift */, 36673D542A0282E5001EEB19 /* IngredientC.swift */, - 363087C42A0B69620062DDC9 /* Model.xcdatamodeld */, 187ADEFF29FA5D8500C4CDCD /* Assets.xcassets */, 402F505C2A0AB4DE0093C94B /* CookCookMom.xcdatamodeld */, 187ADF0129FA5D8500C4CDCD /* Preview Content */, @@ -162,7 +158,6 @@ children = ( 6FCE85842A08D43E0086FB52 /* IngredientModel.swift */, 402F505A2A0AB4B70093C94B /* PersistenceController.swift */, - ); path = Model; sourceTree = ""; @@ -290,7 +285,7 @@ buildActionMask = 2147483647; files = ( 18DA57282A08EE8F00EE16EA /* TransferService.swift in Sources */, - 363087C62A0B69620062DDC9 /* Model.xcdatamodeld in Sources */, + 363087C62A0B69620062DDC9 /* (null) in Sources */, 36673D2F2A00D1EC001EEB19 /* SelectView.swift in Sources */, 36673D292A00D1DA001EEB19 /* NotificationButton.swift in Sources */, 187ADEFE29FA5D8400C4CDCD /* ContentView.swift in Sources */, @@ -460,7 +455,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.cookcookmo; + PRODUCT_BUNDLE_IDENTIFIER = com.myApp.container; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -533,7 +528,6 @@ ); currentVersion = 402F505D2A0AB4DE0093C94B /* CookCookMom.xcdatamodel */; path = CookCookMom.xcdatamodeld; - sourceTree = ""; versionGroupType = wrapper.xcdatamodel; }; diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index fd03072..7b44048 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -6,6 +6,47 @@ // import SwiftUI +import CloudKit + +class CloudKitPushNotificationViewModel: ObservableObject { + func requestNotiPermision() { + let option: UNAuthorizationOptions = [.alert,.sound,.badge] + + UNUserNotificationCenter.current().requestAuthorization(options: option) { success, error in + if let error = error { + print(error) + } else if success { + print("notification permissions success!") + DispatchQueue.main.sync { + UIApplication.shared.registerForRemoteNotifications() + } + } else { + print("notification permissions failure!") + } + + } + } + + func subscribeToNoti() { + let predicate = NSPredicate(value: true) + let subscription = CKQuerySubscription(recordType: "CD_ChoppedIngredient", predicate: predicate, subscriptionID: "ChoppedIngredient_added_to_database", options: .firesOnRecordCreation ) + let notification = CKSubscription.NotificationInfo() + notification.title = "아이가 재료를 손질해서 보냈어요!" + notification.alertBody = "아이에게 칭찬의 한마디 부탁드립니다 :)" + notification.soundName = "default" + + subscription.notificationInfo = notification + + CKContainer.default().privateCloudDatabase.save(subscription) { returnedSubscription, returnedError in + if let error = returnedError { + print(error) + } else { + print("Successfully subscribed to notifications!") + } + + } + } +} struct SendView: View { @@ -22,13 +63,16 @@ struct SendView: View { private var choppedIngredients: FetchedResults - @StateObject var ingredientsViewModel: IngredientsViewModel - @StateObject var peripheral: PeripheralViewModel + @ObservedObject var ingredientsViewModel: IngredientsViewModel + @State private var showModal = false + + @StateObject private var vm = CloudKitPushNotificationViewModel() var body: some View { NavigationView { ZStack{ + Color(red: 242 / 255, green: 242 / 255, blue: 247 / 255) .ignoresSafeArea() VStack { @@ -41,17 +85,33 @@ struct SendView: View { }.sheet(isPresented: self.$showModal) { DescriptionView() } - + .onAppear{ + vm.requestNotiPermision() + vm.subscribeToNoti() + } + + NavigationLink { NotificationListView() } label: { - Image(systemName: "bell.fill") - .resizable() - .frame(width: 25, height: 25) - .foregroundColor(.black) - .padding(.top) - .padding(.leading, 250) - } + if ingredientsViewModel.newNoti { + Image(systemName: "bell.badge.fill") + .resizable() + .frame(width: 25, height: 25) + .foregroundStyle(.red,.black) + .padding(.top) + .padding(.leading, 250) + } else { + Image(systemName: "bell.fill") + .resizable() + .frame(width: 25, height: 25) + .foregroundColor(.black) + .padding(.top) + .padding(.leading, 250) + } + }.simultaneousGesture(TapGesture().onEnded{ + ingredientsViewModel.checkNotification() + }) } CartView(ingredientsViewModel: ingredientsViewModel) .padding(10) @@ -59,6 +119,7 @@ struct SendView: View { .font(.title2) .bold() .padding(20) + ForEach(0..<3) { stack in HStack{ ForEach(stack*3.. Date: Sat, 13 May 2023 18:21:24 +0900 Subject: [PATCH 10/18] chore : delete peripheral files --- CookCookMom.xcodeproj/project.pbxproj | 12 - CookCookMom/ContentView.swift | 2 +- .../View/Components/IngredientButton.swift | 1 - .../Components/SendIngredientsButton.swift | 5 +- .../Peripheral/PeripheralViewModel.swift | 209 ------------------ 5 files changed, 2 insertions(+), 227 deletions(-) delete mode 100644 CookCookMom/ViewModel/Peripheral/PeripheralViewModel.swift diff --git a/CookCookMom.xcodeproj/project.pbxproj b/CookCookMom.xcodeproj/project.pbxproj index eff99c1..72054a7 100644 --- a/CookCookMom.xcodeproj/project.pbxproj +++ b/CookCookMom.xcodeproj/project.pbxproj @@ -13,7 +13,6 @@ 187ADF0329FA5D8500C4CDCD /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 187ADF0229FA5D8500C4CDCD /* Preview Assets.xcassets */; }; 187ADF0A29FA5F2500C4CDCD /* .gitignore in Resources */ = {isa = PBXBuildFile; fileRef = 187ADF0929FA5F2500C4CDCD /* .gitignore */; }; 18DA57232A08EDE600EE16EA /* CentralViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA57222A08EDE600EE16EA /* CentralViewModel.swift */; }; - 18DA57252A08EE1600EE16EA /* PeripheralViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA57242A08EE1600EE16EA /* PeripheralViewModel.swift */; }; 18DA57282A08EE8F00EE16EA /* TransferService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA57272A08EE8F00EE16EA /* TransferService.swift */; }; 18DA572A2A08EEDC00EE16EA /* SendView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA57292A08EEDC00EE16EA /* SendView.swift */; }; 18DA572D2A08EF0C00EE16EA /* SendIngredientsButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18DA572C2A08EF0C00EE16EA /* SendIngredientsButton.swift */; }; @@ -45,7 +44,6 @@ 187ADF0229FA5D8500C4CDCD /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 187ADF0929FA5F2500C4CDCD /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; 18DA57222A08EDE600EE16EA /* CentralViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CentralViewModel.swift; sourceTree = ""; }; - 18DA57242A08EE1600EE16EA /* PeripheralViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeripheralViewModel.swift; sourceTree = ""; }; 18DA57272A08EE8F00EE16EA /* TransferService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferService.swift; sourceTree = ""; }; 18DA57292A08EEDC00EE16EA /* SendView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SendView.swift; path = CookCookMom/Constants/SendView.swift; sourceTree = SOURCE_ROOT; }; 18DA572C2A08EF0C00EE16EA /* SendIngredientsButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendIngredientsButton.swift; sourceTree = ""; }; @@ -134,7 +132,6 @@ isa = PBXGroup; children = ( 18DA571F2A08ED7F00EE16EA /* Central */, - 18DA57212A08ED9200EE16EA /* Peripheral */, 18DA57202A08ED8600EE16EA /* SendIngredients */, ); path = ViewModel; @@ -178,14 +175,6 @@ path = SendIngredients; sourceTree = ""; }; - 18DA57212A08ED9200EE16EA /* Peripheral */ = { - isa = PBXGroup; - children = ( - 18DA57242A08EE1600EE16EA /* PeripheralViewModel.swift */, - ); - path = Peripheral; - sourceTree = ""; - }; 18DA57262A08EE7100EE16EA /* Constants */ = { isa = PBXGroup; children = ( @@ -298,7 +287,6 @@ 36673D2B2A00D1E2001EEB19 /* IngredientButton.swift in Sources */, 6FCE858A2A08D4C70086FB52 /* IngredientsViewModel.swift in Sources */, 18DA572F2A09222C00EE16EA /* CentralView.swift in Sources */, - 18DA57252A08EE1600EE16EA /* PeripheralViewModel.swift in Sources */, 363087C32A0B69240062DDC9 /* NotificationRowView.swift in Sources */, 363087C12A0B69100062DDC9 /* NotificationListView.swift in Sources */, 187ADEFC29FA5D8400C4CDCD /* CookCookMomApp.swift in Sources */, diff --git a/CookCookMom/ContentView.swift b/CookCookMom/ContentView.swift index b5be4a9..94e179d 100644 --- a/CookCookMom/ContentView.swift +++ b/CookCookMom/ContentView.swift @@ -12,7 +12,7 @@ struct ContentView: View { let persistenceController = PersistenceController.shared @StateObject var ingredientsViewModel: IngredientsViewModel = IngredientsViewModel(ingredientModels: [.carrot,.mushroom,.fish,.scallion,.onion,.paprika,.potato,.eggplant,.meat]) - @StateObject var peripheral: PeripheralViewModel = PeripheralViewModel() + var body: some View { SendView(ingredientsViewModel: ingredientsViewModel) diff --git a/CookCookMom/View/Components/IngredientButton.swift b/CookCookMom/View/Components/IngredientButton.swift index 052fa36..14d3c6a 100644 --- a/CookCookMom/View/Components/IngredientButton.swift +++ b/CookCookMom/View/Components/IngredientButton.swift @@ -9,7 +9,6 @@ import SwiftUI struct IngredientButton: View { @StateObject var ingredientsViewModel: IngredientsViewModel - @StateObject var peripheral: PeripheralViewModel = PeripheralViewModel() var index: Int diff --git a/CookCookMom/View/Components/SendIngredientsButton.swift b/CookCookMom/View/Components/SendIngredientsButton.swift index ba38c71..f90e231 100644 --- a/CookCookMom/View/Components/SendIngredientsButton.swift +++ b/CookCookMom/View/Components/SendIngredientsButton.swift @@ -8,15 +8,12 @@ import SwiftUI struct SendIngredientsButton: View { - @StateObject var peripheral: PeripheralViewModel = PeripheralViewModel() @StateObject var sendViewModel: IngredientsViewModel @Binding var sendable: Bool var body: some View { Button(action: { - peripheral.message = sendViewModel.sendIngredientsMessage() - print(peripheral.message) - peripheral.isPossibleToSend = sendable + }) { Text("재료 보내기") .frame(width: 280, height: 50) diff --git a/CookCookMom/ViewModel/Peripheral/PeripheralViewModel.swift b/CookCookMom/ViewModel/Peripheral/PeripheralViewModel.swift deleted file mode 100644 index 5a3bd67..0000000 --- a/CookCookMom/ViewModel/Peripheral/PeripheralViewModel.swift +++ /dev/null @@ -1,209 +0,0 @@ -// -// PeripheralViewModel.swift -// CookCookMom -// -// Created by 김예림 on 2023/05/08. -// - -import Foundation -import CoreBluetooth -import os - -class PeripheralViewModel: NSObject, ObservableObject { - - @Published var message: String = "" - @Published var isPossibleToSend: Bool = false - - - @Published var isSent: Bool = false - var peripheralManager: CBPeripheralManager! - var transferCharacteristic: CBMutableCharacteristic? - var connectedCentral: CBCentral? - var dataToSend = Data() - var sendDataIndex: Int = 0 - - - override init() { - super.init() - peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: [CBPeripheralManagerOptionShowPowerAlertKey: true]) - } - - // switch 메소드 - true 일 때, - func switchChanged() { - if isPossibleToSend { - peripheralManager.startAdvertising([CBAdvertisementDataServiceUUIDsKey: [TransferService.serviceUUID]]) - - } else { - stopAction() - } - } - - // 뷰 나갈 시, 종료 - func stopAction() { - peripheralManager.stopAdvertising() - } - - - private func setUpPeripheral() { - let transferCharacteristic = CBMutableCharacteristic(type: TransferService.characteristicUUID, - properties: [.notify, .writeWithoutResponse], - value: nil, - permissions: [.readable, .writeable]) - - let transferService = CBMutableService(type: TransferService.serviceUUID, primary: true) - - transferService.characteristics = [transferCharacteristic] - - peripheralManager.add(transferService) - - self.transferCharacteristic = transferCharacteristic - } - - static var sendingEOM = false - - private func sendData() { - - guard let transferCharacteristic = transferCharacteristic else { - return - } - - - if PeripheralViewModel.sendingEOM { - let didSend = peripheralManager.updateValue("EOM".data(using: .utf8)!, for: - transferCharacteristic, onSubscribedCentrals: nil) - - if didSend { - PeripheralViewModel.sendingEOM = false - print("Sent: EOM") - isSent = true - } - return - } - - if sendDataIndex >= dataToSend.count { - return - } - - var didSend = true - while didSend { - - var amountToSend = dataToSend.count - sendDataIndex - if let mtu = connectedCentral?.maximumUpdateValueLength { - amountToSend = min(amountToSend, mtu) - } - - - let chunk = dataToSend.subdata(in: sendDataIndex..<(sendDataIndex + amountToSend)) - - didSend = peripheralManager.updateValue(chunk, for: transferCharacteristic, onSubscribedCentrals: nil) - - - if !didSend { - return - } - - let stringFromData = String(data: chunk, encoding: .utf8) - print("Sent \(chunk.count) bytes: \(String(describing: stringFromData))") - - - sendDataIndex += amountToSend - - if sendDataIndex >= dataToSend.count { - - PeripheralViewModel.sendingEOM = true - - - let eomSent = peripheralManager.updateValue("EOM".data(using: .utf8)!, - for: transferCharacteristic, onSubscribedCentrals: nil) - if eomSent { - - PeripheralViewModel.sendingEOM = false - print("Sent: EOM") - isPossibleToSend = false - } - return - } - } - } -} - - -extension PeripheralViewModel: CBPeripheralManagerDelegate { - func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) { - -// isPossibleToSend = peripheral.state == .poweredOn - - switch peripheral.state { - case .poweredOn: - print(".powerOn") - setUpPeripheral() - return - - case .poweredOff : - print(".powerOff") - return - - case .resetting: - print(".restting") - return - - case .unauthorized: - print(".unauthorized") - return - - case .unknown: - print(".unknown") - return - - case .unsupported: - print(".unsupported") - return - - default: - print("A previously unknown central manager state occurred") - return - } - } - - - func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic) { - print("Central subscribed to characteristic") - - if let message = message.data(using: .utf8) { - dataToSend = message - } - - sendDataIndex = 0 - - connectedCentral = central - - - sendData() - } - - - func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) { - print("Central unsubscribed from characteristic") - connectedCentral = nil - } - - - func peripheralManagerIsReady(toUpdateSubscribers peripheral: CBPeripheralManager) { - sendData() - } - - - func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveWrite requests: [CBATTRequest]) { - for aRequest in requests { - guard let requestValue = aRequest.value, - let stringFromData = String(data: requestValue, encoding: .utf8) else { - continue - } - - print("Received write request of \(requestValue.count) bytes: \(stringFromData)") - message = stringFromData - } - } -} - - From 5243e6d020cacfe19c5dd1362f0fcd15c6fcd254 Mon Sep 17 00:00:00 2001 From: musclefrog Date: Sat, 13 May 2023 18:36:40 +0900 Subject: [PATCH 11/18] feat : add app launch screen --- .../LaunchScreenImage.imageset/Contents.json | 21 ++++++++++++++++++ .../LaunchScreenImage.png | Bin 0 -> 171949 bytes CookCookMom/Constants/SendView.swift | 20 +++++++++++++++++ CookCookMom/View/DescriptionView.swift | 2 +- CookCookMom/View/SplashView.swift | 20 +++++++++++++++++ 5 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 CookCookMom/Assets.xcassets/LaunchScreenImage.imageset/Contents.json create mode 100644 CookCookMom/Assets.xcassets/LaunchScreenImage.imageset/LaunchScreenImage.png create mode 100644 CookCookMom/View/SplashView.swift diff --git a/CookCookMom/Assets.xcassets/LaunchScreenImage.imageset/Contents.json b/CookCookMom/Assets.xcassets/LaunchScreenImage.imageset/Contents.json new file mode 100644 index 0000000..56f20a8 --- /dev/null +++ b/CookCookMom/Assets.xcassets/LaunchScreenImage.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "LaunchScreenImage.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CookCookMom/Assets.xcassets/LaunchScreenImage.imageset/LaunchScreenImage.png b/CookCookMom/Assets.xcassets/LaunchScreenImage.imageset/LaunchScreenImage.png new file mode 100644 index 0000000000000000000000000000000000000000..4de6dacfb552f4a8204cdee02fadafa81080dfa5 GIT binary patch literal 171949 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 +!CT=l+x_gj3efW_#)@!|gqDMA^sFaT`@ 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 Date: Sat, 13 May 2023 18:42:30 +0900 Subject: [PATCH 12/18] chore : add alert after pressing send button --- CookCookMom/Constants/SendView.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index 7b44048..4703d61 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -66,6 +66,7 @@ struct SendView: View { @ObservedObject var ingredientsViewModel: IngredientsViewModel @State private var showModal = false + @State private var showingAlert = false @StateObject private var vm = CloudKitPushNotificationViewModel() @@ -132,6 +133,7 @@ struct SendView: View { Button { addRawIngredients(sendText: ingredientsViewModel.sendIngredientsMessage()) + showingAlert = true } label: { Text("재료 보내기") .frame(width: 280, height: 50) @@ -141,6 +143,11 @@ struct SendView: View { .cornerRadius(30) } .padding(.top, 15) + .alert(isPresented: $showingAlert, content: { + Alert(title: Text("아이에게 재료를 보냈습니다😄"), + message: Text("아이에게 보냈다고 알려주세요~")) + }) + } From beab14edd3fabc6a0386fa835b8db096330f2305 Mon Sep 17 00:00:00 2001 From: Jae Ung Jang Date: Sat, 13 May 2023 19:02:29 +0900 Subject: [PATCH 13/18] fix : fix some error --- CookCookMom/Constants/SendView.swift | 161 +++++++++++++-------------- 1 file changed, 80 insertions(+), 81 deletions(-) diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index 4f3d957..a41c6ed 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -23,7 +23,6 @@ class CloudKitPushNotificationViewModel: ObservableObject { } else { print("notification permissions failure!") } - } } @@ -76,88 +75,97 @@ struct SendView: View { var body: some View { ZStack { - NavigationView { - ZStack{ - - Color(red: 242 / 255, green: 242 / 255, blue: 247 / 255) - .ignoresSafeArea() - VStack { - HStack { - Button(action: { self.showModal = true}){ Image(systemName: "info.circle.fill") - .resizable() - .frame(width: 25, height: 25) - .foregroundColor(.black) - .padding([.top,.trailing]) - }.sheet(isPresented: self.$showModal) { - DescriptionView() - } - .onAppear{ - vm.requestNotiPermision() - vm.subscribeToNoti() - } - - - NavigationLink { - NotificationListView() - } label: { - if ingredientsViewModel.newNoti { - Image(systemName: "bell.badge.fill") - .resizable() - .frame(width: 25, height: 25) - .foregroundStyle(.red,.black) - .padding(.top) - .padding(.leading, 250) - } else { - Image(systemName: "bell.fill") + NavigationView { + ZStack{ + + Color(red: 242 / 255, green: 242 / 255, blue: 247 / 255) + .ignoresSafeArea() + VStack { + HStack { + Button(action: { self.showModal = true}){ Image(systemName: "info.circle.fill") .resizable() .frame(width: 25, height: 25) .foregroundColor(.black) - .padding(.top) - .padding(.leading, 250) + .padding([.top,.trailing]) + }.sheet(isPresented: self.$showModal) { + DescriptionView() } - }.simultaneousGesture(TapGesture().onEnded{ - ingredientsViewModel.checkNotification() - }) - } - CartView(ingredientsViewModel: ingredientsViewModel) - .padding(10) - Text("아이에게 어떤 재료를 보낼까요?") - .font(.title2) - .bold() - .padding(20) + .onAppear{ + vm.requestNotiPermision() + vm.subscribeToNoti() + } + + + NavigationLink { + NotificationListView() + } label: { + if ingredientsViewModel.newNoti { + Image(systemName: "bell.badge.fill") + .resizable() + .frame(width: 25, height: 25) + .foregroundStyle(.red,.black) + .padding(.top) + .padding(.leading, 250) + } else { + Image(systemName: "bell.fill") + .resizable() + .frame(width: 25, height: 25) + .foregroundColor(.black) + .padding(.top) + .padding(.leading, 250) + } + }.simultaneousGesture(TapGesture().onEnded{ + ingredientsViewModel.checkNotification() + }) + } + CartView(ingredientsViewModel: ingredientsViewModel) + .padding(10) + Text("아이에게 어떤 재료를 보낼까요?") + .font(.title2) + .bold() + .padding(20) - ForEach(0..<3) { stack in - HStack{ - ForEach(stack*3.. Date: Sat, 13 May 2023 21:50:24 +0900 Subject: [PATCH 14/18] chore : delete heart button --- CookCookMom/View/NotificationRowView.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/CookCookMom/View/NotificationRowView.swift b/CookCookMom/View/NotificationRowView.swift index 9f18cc2..d448fbc 100644 --- a/CookCookMom/View/NotificationRowView.swift +++ b/CookCookMom/View/NotificationRowView.swift @@ -80,9 +80,7 @@ struct NotificationRowView: View { } } Spacer() - Image(systemName: "heart") } - } } From 64f578e91832ca4f25fc41410811361316a96dae Mon Sep 17 00:00:00 2001 From: musclefrog Date: Sat, 13 May 2023 21:50:49 +0900 Subject: [PATCH 15/18] chore : edit description modal view --- CookCookMom.xcodeproj/project.pbxproj | 2 + .../AppIcon.appiconset/Contents.json | 1 + .../AppIcon.appiconset/appIcon.png | Bin 0 -> 57572 bytes .../clickCarrot.imageset/Contents.json | 21 +++ .../clickCarrot.imageset/clickCarrot.svg | 35 +++++ .../hands.imageset/Contents.json | 21 +++ .../Assets.xcassets/hands.imageset/hands.svg | 12 ++ .../momKid.imageset/Contents.json | 21 +++ .../momKid.imageset/momKid.svg | 9 ++ CookCookMom/View/DescriptionView.swift | 132 +++++++++++------- 10 files changed, 204 insertions(+), 50 deletions(-) create mode 100644 CookCookMom/Assets.xcassets/AppIcon.appiconset/appIcon.png create mode 100644 CookCookMom/Assets.xcassets/clickCarrot.imageset/Contents.json create mode 100644 CookCookMom/Assets.xcassets/clickCarrot.imageset/clickCarrot.svg create mode 100644 CookCookMom/Assets.xcassets/hands.imageset/Contents.json create mode 100644 CookCookMom/Assets.xcassets/hands.imageset/hands.svg create mode 100644 CookCookMom/Assets.xcassets/momKid.imageset/Contents.json create mode 100644 CookCookMom/Assets.xcassets/momKid.imageset/momKid.svg diff --git a/CookCookMom.xcodeproj/project.pbxproj b/CookCookMom.xcodeproj/project.pbxproj index 72054a7..d4a2b26 100644 --- a/CookCookMom.xcodeproj/project.pbxproj +++ b/CookCookMom.xcodeproj/project.pbxproj @@ -430,6 +430,7 @@ ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = CookCookMom/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = ChopChopMom; INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "\"CookCookMom\" use bluetooth"; INFOPLIST_KEY_NSBluetoothPeripheralUsageDescription = "\"CookCookMom\" use bluetooth"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; @@ -464,6 +465,7 @@ ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = CookCookMom/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = ChopChopMom; INFOPLIST_KEY_NSBluetoothAlwaysUsageDescription = "\"CookCookMom\" use bluetooth"; INFOPLIST_KEY_NSBluetoothPeripheralUsageDescription = "\"CookCookMom\" use bluetooth"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; diff --git a/CookCookMom/Assets.xcassets/AppIcon.appiconset/Contents.json b/CookCookMom/Assets.xcassets/AppIcon.appiconset/Contents.json index 13613e3..1915845 100644 --- a/CookCookMom/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/CookCookMom/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,6 +1,7 @@ { "images" : [ { + "filename" : "appIcon.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" diff --git a/CookCookMom/Assets.xcassets/AppIcon.appiconset/appIcon.png b/CookCookMom/Assets.xcassets/AppIcon.appiconset/appIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..58b8959a7756957bc080b5467cae172a6c07c34a GIT binary patch literal 57572 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

mAp+CSuN8E}z!dOdQus@D$d(jI;sQ8ZsQcSy?o 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®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 UxL+w%?m+Nc8l4bT7op1g55FE1!T + + Group 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CookCookMom/Assets.xcassets/hands.imageset/Contents.json b/CookCookMom/Assets.xcassets/hands.imageset/Contents.json new file mode 100644 index 0000000..2fe1931 --- /dev/null +++ b/CookCookMom/Assets.xcassets/hands.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "hands.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CookCookMom/Assets.xcassets/hands.imageset/hands.svg b/CookCookMom/Assets.xcassets/hands.imageset/hands.svg new file mode 100644 index 0000000..c6ab322 --- /dev/null +++ b/CookCookMom/Assets.xcassets/hands.imageset/hands.svg @@ -0,0 +1,12 @@ + + + Group 4 + + + + + + + + + \ No newline at end of file diff --git a/CookCookMom/Assets.xcassets/momKid.imageset/Contents.json b/CookCookMom/Assets.xcassets/momKid.imageset/Contents.json new file mode 100644 index 0000000..3af7070 --- /dev/null +++ b/CookCookMom/Assets.xcassets/momKid.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "momKid.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/CookCookMom/Assets.xcassets/momKid.imageset/momKid.svg b/CookCookMom/Assets.xcassets/momKid.imageset/momKid.svg new file mode 100644 index 0000000..580c82f --- /dev/null +++ b/CookCookMom/Assets.xcassets/momKid.imageset/momKid.svg @@ -0,0 +1,9 @@ + + + figure.and.child.holdinghands@2x + + + + + + \ No newline at end of file diff --git a/CookCookMom/View/DescriptionView.swift b/CookCookMom/View/DescriptionView.swift index aa06bf7..e9dc965 100644 --- a/CookCookMom/View/DescriptionView.swift +++ b/CookCookMom/View/DescriptionView.swift @@ -13,60 +13,92 @@ struct DescriptionView: View { NavigationView { ScrollView { VStack { - Text("재료 선택하기") - .font(.title3) - .bold() - .foregroundColor(.blue) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom]) - Text("오늘 할 요리에 들어갈 재료를 손질할 순서대로 선택해주세요.") - .font(.body) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom]) + HStack { + Image("clickCarrot") + .resizable() + .frame(width: 111.31, height: 125.49) + .padding(.leading) + VStack { + Text("재료 선택하기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.top,.bottom]) + Text("오늘 할 요리에 들어갈 재료를 선택해주세요.") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + .foregroundColor(.secondary) + } + + } - Text("재료 보내기") - .font(.title3) - .bold() - .foregroundColor(.blue) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom,.top]) - Text("선택한 재료를 [재료 보내기] 버튼을 눌러 아이에게 보내주세요.") - .font(.body) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom]) + HStack { + VStack { + Text("재료 보내기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("선택한 재료를 [재료 보내기] 버튼을 눌러 아이에게 보내주세요.") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + .foregroundColor(.secondary) + } + Button { + } label: { + Text("재료 보내기") + .frame(width: 150, height: 46.3) + .fontWeight(.semibold) + .foregroundColor(.white) + .background(Color.blue) + .cornerRadius(30) + }.padding(.trailing) + } - Text("아이와 함께하기") - .font(.title3) - .bold() - .foregroundColor(.blue) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom,.top]) - Text("재료를 보내고 아이에게 \"오늘 요리 같이 해볼래?\" 라고 말해주세요. 그리고 아이용 앱에서 흔들리는 알림 아이콘을 누르게 유도해주세요.") - .font(.body) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom]) + HStack { + Image("momKid") + .resizable() + .frame(width: 81.39, height: 94) + .padding(.leading) + VStack { + Text("아이와 함께하기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("재료를 보내고 아이에게 \n\"오늘 요리 같이 해볼래?\" \n라고 말해주세요.") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom]) + .foregroundColor(.secondary) + } + } - Text("아이가 손질한 재료 받기") - .font(.title3) - .bold() - .foregroundColor(.blue) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom,.top]) - Text("아이가 재료를 다 손질하면 보내기 버튼을 눌러 부모에게 보낼 수 있도록 알려주세요.") - .font(.body) - .frame(maxWidth: .infinity, alignment: .leading) - .padding(.leading) + HStack { + VStack { + Text("아이 칭찬하기") + .font(.title3) + .bold() + .foregroundColor(.blue) + .frame(maxWidth: .infinity, alignment: .leading) + .padding([.leading,.bottom,.top]) + Text("아이가 손질한 재료를 받으면 아이를 칭찬해주세요❤️") + .font(.body) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.leading) + .foregroundColor(.secondary) + } + Image("hands") + .resizable() + .frame(width: 120.25, height: 91) + .padding(.trailing) + } - Text("아이 칭찬하기") - .font(.title3) - .bold() - .foregroundColor(.blue) - .frame(maxWidth: .infinity, alignment: .leading) - .padding([.leading,.bottom,.top]) - Text("아이가 손질한 재료를 받으면 아이를 칭찬해주세요❤️ \n\n그 외의 역할놀이에도 사용해도 좋습니다!") - .font(.body) - .frame(maxWidth: .infinity, alignment: .leading) - .padding(.leading) }//VStack .navigationTitle("이렇게 써보세요!") From 5b1bbbdc1fded7d55f688671c1bc1c5a0c28b8cc Mon Sep 17 00:00:00 2001 From: eemdeeks Date: Mon, 15 May 2023 17:34:20 +0900 Subject: [PATCH 16/18] chore : add button reset function --- CookCookMom/Constants/SendView.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index a41c6ed..edec1ef 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -138,6 +138,7 @@ struct SendView: View { Button { addRawIngredients(sendText: ingredientsViewModel.sendIngredientsMessage()) showingAlert = true + ingredientsViewModel.resetIngredients() } label: { Text("재료 보내기") .frame(width: 280, height: 50) From 3252eb0caa78357be1e5c71c5f0b677fc0d41a0e Mon Sep 17 00:00:00 2001 From: eemdeeks Date: Mon, 15 May 2023 18:01:23 +0900 Subject: [PATCH 17/18] feat : check network connection --- CookCookMom.xcodeproj/project.pbxproj | 12 ++++++ CookCookMom/Constants/SendView.swift | 4 ++ Utils/NetworkManager.swift | 60 +++++++++++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 Utils/NetworkManager.swift diff --git a/CookCookMom.xcodeproj/project.pbxproj b/CookCookMom.xcodeproj/project.pbxproj index d4a2b26..ec4ddf8 100644 --- a/CookCookMom.xcodeproj/project.pbxproj +++ b/CookCookMom.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ 36673D552A0282E5001EEB19 /* IngredientC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36673D542A0282E5001EEB19 /* IngredientC.swift */; }; 402F505B2A0AB4B70093C94B /* PersistenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402F505A2A0AB4B70093C94B /* PersistenceController.swift */; }; 402F505E2A0AB4DE0093C94B /* CookCookMom.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 402F505C2A0AB4DE0093C94B /* CookCookMom.xcdatamodeld */; }; + 6F8565BC2A12277500FD0A58 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F8565BB2A12277500FD0A58 /* NetworkManager.swift */; }; 6FCE85852A08D43E0086FB52 /* IngredientModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FCE85842A08D43E0086FB52 /* IngredientModel.swift */; }; 6FCE85882A08D4BE0086FB52 /* TestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FCE85872A08D4BE0086FB52 /* TestView.swift */; }; 6FCE858A2A08D4C70086FB52 /* IngredientsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FCE85892A08D4C70086FB52 /* IngredientsViewModel.swift */; }; @@ -63,6 +64,7 @@ 402F50592A0AB4220093C94B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 402F505A2A0AB4B70093C94B /* PersistenceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistenceController.swift; sourceTree = ""; }; 402F505D2A0AB4DE0093C94B /* CookCookMom.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = CookCookMom.xcdatamodel; sourceTree = ""; }; + 6F8565BB2A12277500FD0A58 /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = ""; }; 6FCE85842A08D43E0086FB52 /* IngredientModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IngredientModel.swift; sourceTree = ""; }; 6FCE85872A08D4BE0086FB52 /* TestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestView.swift; sourceTree = ""; }; 6FCE85892A08D4C70086FB52 /* IngredientsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IngredientsViewModel.swift; sourceTree = ""; }; @@ -82,6 +84,7 @@ 187ADEEF29FA5D8400C4CDCD = { isa = PBXGroup; children = ( + 6F8565BA2A12271800FD0A58 /* Utils */, 187ADF0929FA5F2500C4CDCD /* .gitignore */, 187ADEFA29FA5D8400C4CDCD /* CookCookMom */, 187ADEF929FA5D8400C4CDCD /* Products */, @@ -194,6 +197,14 @@ path = Components; sourceTree = ""; }; + 6F8565BA2A12271800FD0A58 /* Utils */ = { + isa = PBXGroup; + children = ( + 6F8565BB2A12277500FD0A58 /* NetworkManager.swift */, + ); + path = Utils; + sourceTree = ""; + }; 6FCE85862A08D4980086FB52 /* Test */ = { isa = PBXGroup; children = ( @@ -295,6 +306,7 @@ 363BE19D2A0A3070005E2876 /* CartView.swift in Sources */, 36673D552A0282E5001EEB19 /* IngredientC.swift in Sources */, 402F505E2A0AB4DE0093C94B /* CookCookMom.xcdatamodeld in Sources */, + 6F8565BC2A12277500FD0A58 /* NetworkManager.swift in Sources */, 402F505B2A0AB4B70093C94B /* PersistenceController.swift in Sources */, 363087CA2A0E1B3B0062DDC9 /* DescriptionView.swift in Sources */, ); diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index edec1ef..a48901a 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -72,6 +72,7 @@ struct SendView: View { @Environment(\.presentationMode) var presentationMode @State var isLoading: Bool = true + @ObservedObject var networkManager = NetworkManager() var body: some View { ZStack { @@ -152,6 +153,9 @@ struct SendView: View { Alert(title: Text("아이에게 재료를 보냈습니다😄"), message: Text("아이에게 보냈다고 알려주세요~")) }) + .alert(isPresented: $networkManager.isntConnected , content: { + Alert(title: Text("네트워크를 연결 해주세요!")) + }) diff --git a/Utils/NetworkManager.swift b/Utils/NetworkManager.swift new file mode 100644 index 0000000..2716cb6 --- /dev/null +++ b/Utils/NetworkManager.swift @@ -0,0 +1,60 @@ +// +// NetworkManager.swift +// CookCookMom +// +// Created by 박승찬 on 2023/05/15. +// + +import Foundation +import Network // Let's import Network +class NetworkManager: ObservableObject { + let monitor = NWPathMonitor() + let queue = DispatchQueue(label: "NetworkManager") + + @Published var isConnected = true + @Published var isntConnected = false + + // Image depends the network status. + var imageName: String { + return isConnected ? "wifi" : "wifi.slash" + } + + // Text depends on the network status. + var connectionDescription: String { + if isConnected { + return "Internet connection looks good!" + } else { + return "It looks like you're not connected to the internet" + } + } + + init() { + monitor.pathUpdateHandler = { path in + DispatchQueue.main.async { + self.isConnected = path.status == .satisfied + self.isntConnected = !self.isConnected + } + } + + monitor.start(queue: queue) + } + + // method working when you touch 'Check Status' button. + func startMonitoring() { + monitor.start(queue: queue) + monitor.pathUpdateHandler = { path in + self.isConnected = path.status == .satisfied + self.isntConnected = !self.isConnected + if path.usesInterfaceType(.wifi) { + print("Using wifi") + } else if path.usesInterfaceType(.cellular) { + print("Using cellular") + } + } + } + + // method stop checking. + func stopMonitoring() { + monitor.cancel() + } +} From c94f5f603d36f24cfc5f63c8f829e83ff71ab94b Mon Sep 17 00:00:00 2001 From: eemdeeks Date: Wed, 17 May 2023 14:30:01 +0900 Subject: [PATCH 18/18] chore : fix alert --- CookCookMom/Constants/SendView.swift | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CookCookMom/Constants/SendView.swift b/CookCookMom/Constants/SendView.swift index a48901a..6ca5649 100644 --- a/CookCookMom/Constants/SendView.swift +++ b/CookCookMom/Constants/SendView.swift @@ -81,6 +81,9 @@ struct SendView: View { Color(red: 242 / 255, green: 242 / 255, blue: 247 / 255) .ignoresSafeArea() + .alert(isPresented: $networkManager.isntConnected , content: { + Alert(title: Text("네트워크를 연결 해주세요!")) + }) VStack { HStack { Button(action: { self.showModal = true}){ Image(systemName: "info.circle.fill") @@ -153,9 +156,7 @@ struct SendView: View { Alert(title: Text("아이에게 재료를 보냈습니다😄"), message: Text("아이에게 보냈다고 알려주세요~")) }) - .alert(isPresented: $networkManager.isntConnected , content: { - Alert(title: Text("네트워크를 연결 해주세요!")) - }) +