Deep_Lee
[SwiftUI] ํ”„๋กœํผํ‹ฐ๋ž˜ํผ ์ •๋ฆฌ
๐ŸŽ iOS/SwiftUI 2024. 3. 17. 17:54

โœ… Property Wrapper ์†์„ฑ(Property)์— ์ถ”๊ฐ€์ ์ธ ํ–‰๋™์ด๋‚˜ ๊ณ„์‚ฐ์„ ๋ง๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ํ”„๋กœํผํ‹ฐ ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๋กœ์ง์ด๋‚˜ ๊ณ„์‚ฐ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค. โœ… PreView ( ์š”์•ฝ ) @State : ๋ทฐ ๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๋กœ์ปฌ ์ƒํƒœ๊ฐ’ ์ €์žฅ @Binding : ๋ถ€๋ชจ ๋ทฐ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฐ’์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง @ObservedObject : ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. @EnvironmentObject : ์•ฑ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ์ƒํƒœ ๊ฐ์ฒด ์‚ฌ์šฉ @Published : ObservableObject์˜ ์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ View๋ฅผ ์ž๋™ ๋ฆฌํ”„๋ ˆ์‹œ @AppStorage : UserDefaults์— ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ..

article thumbnail
[์•„ํ‚คํ…์ฒ˜ํŒจํ„ด][iOS] MVVMํŒจํ„ด
๐ŸŽ iOS/Design Pattern 2024. 3. 12. 23:39

์ด ํฌ์ŠคํŒ…์€ Udemy "MVVM Design Pattern in iOS Using SwiftUI" ๊ฐ•์˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ์ด๋ฉฐ ๋ชจ๋“  ๋‚ด์šฉ์˜ ์ €์ž‘๊ถŒ์€ ๊ฐ•์˜์˜ ์›์ž‘์ž์ธ Mohammad Adam ์—๊ฒŒ ์žˆ์Œ์„ ๋ฐํž™๋‹ˆ๋‹ค. โœ… MVVM ํŒจํ„ด์ด๋ž€ Model - View - ViewModel๋กœ ๋‚˜๋‰œ๋‹ค. ํ™”๋ฉด์„ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒƒ์ด MVVM์˜ ํ•ต์‹ฌ์ด๋‹ค. ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ View๊ฐ€ ViewModel ๊ฐ’์„ ๊ด€์ฐฐํ•˜์—ฌ ๋ณ€ํ™”๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ๋ฒ„ํŠผ ํด๋ฆญ์„ ํ–ˆ์„ ๋•Œ ๋‹ค์Œ ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์˜ค๋Š” ๋™์ž‘์„ ํ•œ๋‹ค๊ณ  ์นœ๋‹ค. MVC๋Š” ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์ด๋ฏธ์ง€๋ฅผ "๋ฐ”๊พผ๋‹ค"์˜ ๊ฐœ๋…์ด๋ผ๋ฉด, MVVM์€ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋ทฐ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๋‹ˆ ์ด๋ฏธ์ง€๋„ "์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐ”๋€Œ์–ด์ง„๋‹ค"๋Š” ๊ฐœ๋…์ด๋‹ค...

article thumbnail
ENABLE_USER_SCRIPT_SANDBOXING ์—๋Ÿฌํ•ด๊ฒฐ

โœ… ENABLE_USER_SCRIPT_SANDBOXING ์—๋Ÿฌ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ •์—์„œ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋ฐœ๊ฒฌํ•˜์˜€๋‹ค. โœ… ์›์ธ ํ•ด๋‹น ๋ฌธ์ œ์˜ ์›์ธ์€ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ๋‚ด์— Cocoa pods๊ณผ ๊ฐ™์€ ํŒŒ์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ๊ด€๋ จ ๊ณต๊ฐœ ๋ฌธ์ œ https://github.com/CocoaPods/CocoaPods/issues/11946 โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• PROJECT - Build Settings - Build Options - User Script Sandboxing -> NO ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.

article thumbnail
[iOS][SwiftUI] @State @Binding
๐ŸŽ iOS/SwiftUI 2024. 1. 7. 00:08

๐Ÿ“š @State @Binding Property Wrapper์— ๋Œ€ํ•ด์„œ State โœ… PropertyWrapper ? ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์“ธ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. SwiftUI์—์„œ๋Š” property wrapper๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜์˜ ๋ณ€ํ™”์™€ ํ•ด๋‹น ์ž‘์—…์„ ์ž๋™ํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค. SwiftUI๋Š” state๋กœ ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ๋“ค์˜ ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. StateValue ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ทฐ๋Š” ํ•ด๋‹น value์˜ appearance๋ฅผ ๋ฌดํšจํ™”ํ•˜๊ณ  ๋‹ค์‹œ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. State ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด View๋Š” ์ƒˆ๋กœ ๋žœ๋”๋ง์„ ํ•˜์—ฌ ํ•ญ์ƒ ์ตœ์‹  ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. State ์ธ์Šคํ„ด์Šค๋Š” ๊ทธ ์ž์ฒด๋กœ ๊ฐ’์ด ์•„๋‹Œ, ๊ฐ’์„ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ํ˜„์žฌ ๋ทฐ UI์˜ ํŠน์ •์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต Priv..

article thumbnail
[iOS][SwiftUI] Save Color in UserDefaults
๐ŸŽ iOS/SwiftUI 2024. 1. 1. 14:41

๐Ÿ“š Save Color in UserDefaults from Color Picker variable in Color Data private let COLOR_KEY = "COLOR" private let userDefaults = UserDefaults.standard saveColor func saveColor(color: Color) { let color = UIColor(color).cgColor if let components = color.components { userDefaults.set(components, forKey: COLOR_KEY) } } loadColor func loadColor() -> Color { guard let colorComponenets = userDefaults...

[iOS][SwiftUI] @main @UIApplicationMain
๐ŸŽ iOS/SwiftUI 2023. 12. 28. 22:51

๐Ÿ“š main & UIApplication @main ํ”„๋กœ๊ทธ๋žจ์˜ ์ง„์ž…์ ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์–ด๋Š ํ”„๋กœ๊ทธ๋žจ์ด๋“ ์ง€ ์‹œ์ž‘์ ์ธ Entry Point๊ฐ€ ์กด์žฌํ•ด์•ผํ•œ๋‹ค. Swift์—์„œ๋Š” @main์„ ํ†ตํ•ด์„œ ์–ด๋””์„œ๋ถ€ํ„ฐ ์ด ์•ฑ์ด ์ตœ์ดˆ ์‹คํ–‰๋˜๊ณ  ์‹œ์ž‘๋ ์ง€๋ฅผ ๋ช…์‹œํ•ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค. ์ด ํ‚ค์›Œ๋“œ๋Š” Swift 5.3 ์ด์ƒ(Xcode 12)๋ถ€ํ„ฐ ์‚ฌ์šฉ๋œ ํ‚ค์›Œ๋“œ๋กœ ๋ฐ”๋กœ ์ด์–ด์„œ ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ @main ํ‚ค์›Œ๋“œ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „์—๋Š” @UIApplcationMain ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. > UIKit์˜ ๊ฒฝ์šฐ AppDelegate๊ฐ€ ์‚ฌ์‹ค์ƒ App Life Cycle์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ฃผ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— @main ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™๋Š”๋‹ค. import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate..

article thumbnail
[iOS][SwiftUI] Init ()
๐ŸŽ iOS/SwiftUI 2023. 12. 28. 22:11

๐Ÿ“š ์ดˆ๊ธฐํ™”์— ๋Œ€ํ•ด์„œ AppDelegate() init() AppDelegate๋ฅผ ์ด์šฉํ•œ ์ดˆ๊ธฐํ™” ์ด ๋ฐฉ๋ฒ•์€ ์‚ฌ์‹ค AppDelegate์˜ ์—ญํ• (์ง„์ž…์ )์„ ํ•˜๋Š” ๊ฒƒ์ด ๋”ฐ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ์žฅ๋˜์ง€๋Š” ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. @main struct PushMessageApp: App { var body: some Scene { WindowGroup { ContentView() } } } ์œ„ ์ฝ”๋“œ์—์„œ ๋ณด์ด๋Š” App ํ”„๋กœํ† ์ฝœ ์ž์ฒด๊ฐ€ ์•ฑ์˜ ๊ตฌ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ตฌ์กฐ์ฒด์— ํ”„๋กœํ† ์ฝœ์„ ์ง€์ •ํ•ด์ฃผ์–ด์„œ ์•ฑ์˜ ์‹œ์ž‘(Presenting) ์ง€์ ์„ ์ •ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ @main์„ ํ†ตํ•˜์—ฌ ์•ฑ์ด ์‹œ์ž‘๋˜๊ณ  ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ€์•ผํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ช…์‹œํ•ด์ฃผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— AppDelegate๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ์˜ ์ดˆ๊ธฐํ™” ์ด์™ธ์—๋„ AppDele..

article thumbnail
[iOS] ์„ธ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ ( ๋ฏธ์ถœ์‹œ )

๐Ÿ“ฑBrain Buddy โœ๏ธ 2023๋…„ 5์›” 17์ผ ~ 2023๋…„ 6์›”์ค‘ ( ์•ฝ 3์ฃผ ) - ๊ธฐํš - ๊ฐœ๋ฐœ๊ณผ์ • - ์—๋Ÿฌ์‚ฌํ•ญ ๊ธฐํš ์‚ฌ์‹ค ๊ธฐํš์˜๋„๋Š” ํ•™๋ถ€ ์‹œ์ ˆ ์ข…์ด์— ์ ์–ด๊ฐ€๋ฉฐ ์•”๊ธฐํ•˜๋ฉฐ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚˜์˜ ๋ชจ์Šต์„ ๋– ์˜ฌ๋ฆฌ๊ณ  ๊ธฐํšํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ „๊ณต์„œ์ ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ฐฑ์ง€์— ์˜ฎ๊ฒจ ์ ์–ด๊ฐ€๋ฉฐ ์™ธ์šฐ๊ณ  ๋‚ฌ์„๋•Œ, ์ด๋ฅผ ๋‹ค์‹œ ๋นˆ์นธ์„ ๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด์„œ ์ž˜ ์™ธ์› ๋‚˜ ์‹œํ—˜ ๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ๋นˆ์นธ์„ ๋งŒ๋“ค์‹œ๊ฐ„์— ์ฐจ๋ผ๋ฆฌ ์กฐ๊ธˆ ๋” ์™ธ์šฐ๋Š”๋ฐ ์ง‘์ค‘์„ ํ•ด๋ณด๊ณ ์ž ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์Šค์Šค๋กœ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋ฐฑ์ง€์— ์ ์€ ๋‚ด์šฉ๋“ค์„ ์‚ฌ์ง„์œผ๋กœ ์ฐ์œผ๋ฉด ํ•ด๋‹น ๋‚ด์šฉ์ค‘์—์„œ ๋žœ๋ค์œผ๋กœ ๋นˆ์นธ์„ ์ƒ์„ฑํ•ด์ฃผ๋ฉฐ ๋นˆ์นธ ๋‚ด์šฉ์„ ์ฑ„์›Œ๋ณผ ์ˆ˜ ์žˆ๋Š” ์•ฑ์„ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋˜ํ•œ ์‹ค์ œ๋กœ ํŽœ์„ ์ด์šฉํ•ด ์‹œํ—˜์„ ๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋Š๋‚Œ์„ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ํ…์ŠคํŠธ ์ž…๋ ฅ๋ณด๋‹ค๋Š” ์• ํ”ŒํŽœ์Šฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์“ธ ์ˆ˜ ..