Deep_Dev
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์ฃผ ) - ๊ธฐํš - ๊ฐœ๋ฐœ๊ณผ์ • - ์—๋Ÿฌ์‚ฌํ•ญ ๊ธฐํš ์‚ฌ์‹ค ๊ธฐํš์˜๋„๋Š” ํ•™๋ถ€ ์‹œ์ ˆ ์ข…์ด์— ์ ์–ด๊ฐ€๋ฉฐ ์•”๊ธฐํ•˜๋ฉฐ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚˜์˜ ๋ชจ์Šต์„ ๋– ์˜ฌ๋ฆฌ๊ณ  ๊ธฐํšํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ „๊ณต์„œ์ ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ฐฑ์ง€์— ์˜ฎ๊ฒจ ์ ์–ด๊ฐ€๋ฉฐ ์™ธ์šฐ๊ณ  ๋‚ฌ์„๋•Œ, ์ด๋ฅผ ๋‹ค์‹œ ๋นˆ์นธ์„ ๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด์„œ ์ž˜ ์™ธ์› ๋‚˜ ์‹œํ—˜ ๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ๋นˆ์นธ์„ ๋งŒ๋“ค์‹œ๊ฐ„์— ์ฐจ๋ผ๋ฆฌ ์กฐ๊ธˆ ๋” ์™ธ์šฐ๋Š”๋ฐ ์ง‘์ค‘์„ ํ•ด๋ณด๊ณ ์ž ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์Šค์Šค๋กœ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋ฐฑ์ง€์— ์ ์€ ๋‚ด์šฉ๋“ค์„ ์‚ฌ์ง„์œผ๋กœ ์ฐ์œผ๋ฉด ํ•ด๋‹น ๋‚ด์šฉ์ค‘์—์„œ ๋žœ๋ค์œผ๋กœ ๋นˆ์นธ์„ ์ƒ์„ฑํ•ด์ฃผ๋ฉฐ ๋นˆ์นธ ๋‚ด์šฉ์„ ์ฑ„์›Œ๋ณผ ์ˆ˜ ์žˆ๋Š” ์•ฑ์„ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋˜ํ•œ ์‹ค์ œ๋กœ ํŽœ์„ ์ด์šฉํ•ด ์‹œํ—˜์„ ๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋Š๋‚Œ์„ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ํ…์ŠคํŠธ ์ž…๋ ฅ๋ณด๋‹ค๋Š” ์• ํ”ŒํŽœ์Šฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์“ธ ์ˆ˜ ..

article thumbnail
[iOS] Clean Build Folder
๐ŸŽ iOS/UIKit 2023. 11. 24. 23:54

๐Ÿ“š ๋นŒ๋“œ ํด๋ฆฐ Clean Build Folder ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ Image ํŒŒ์ผ๋“ค์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ AppIcon ์ด๋ฏธ์ง€๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚ฌ๋‹ค. 2๊ฐ€์ง€ ์˜ค๋ฅ˜๊ฐ€ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ๋œจ๊ธฐ๋„ ํ–ˆ๋Š”๋ฐ, App ์•„์ด์ฝ˜ ์ด๋ฏธ์ง€๋ฅผ ํ”ฝ์…€๋ณ„๋กœ ๋‹ค์šด๋ฐ›์•„์„œ ํด๋” ๊ทธ๋Œ€๋กœ ์ถ”๊ฐ€ํ–ˆ์Œ์—๋„ ์ด์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚˜์„œ Build Success๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜๋‹ค. AppIcon ๋„ค์ด๋ฐ๋„ ์ž˜๋ชป๋˜์ง€์•Š์•˜์—ˆ๊ณ , 152.png ํŒŒ์ผ๋„ ์ •์ƒ์ ์œผ๋กœ ๋Œ์•„๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด ๋•Œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€, ์ด๋ฏธ์ง€๋ฅผ ๊ต์ฒดํ•˜๊ณ  ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ํ–‰์œ„๋ฅผ ํ•˜์ง€๋ง๊ณ  Product - Clean Build Folder ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฐพ์•„๋ณด๋‹ˆ Xcoce์—์„œ ์ž์ฒด์ ์œผ๋กœ ์ง€์›ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ธ๋ฐ, 100% ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›Œ์ง€๋Š”๊ฒƒ์€ ์•„๋‹ˆ๋ผ๊ณ  ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€ ๊ด€๋ จํ•œ ์—๋Ÿฌ..

article thumbnail
[iOS] ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ (LifeCycle)
๐ŸŽ iOS/UIKit 2023. 6. 15. 16:03

์ƒ๋ช…์ฃผ๊ธฐ ( LifeCycle ) ์ƒ๋ช…์ฃผ๊ธฐ๋ผ๋Š” ๊ฒƒ์€ ์•ฑ์˜ ์ตœ์ดˆ ์‹คํ–‰๋ถ€ํ„ฐ ์•ฑ์ด ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ์•ฑ์ด ๊ฐ€์ง€๋Š” ์ƒํƒœ์™€ ๊ทธ ์ƒํƒœ๋“ค ์‚ฌ์ด์˜ ์ „์ด๋ฅผ ๋งํ•œ๋‹ค. ์•ฑ์˜ ์ƒํƒœ๋Š” ์•ฑ์ด ํ˜„์žฌ ์–ด๋– ํ•œ ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ( App's Life Cycle ) App์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” APP์˜ ์‹คํ–‰/์ข…๋ฃŒ ๋ฐ App์ด Foreground/Background ์ƒํƒœ์— ์žˆ์„ ๋•Œ, ์‹œ์Šคํ…œ์ด ๋ฐœ์ƒ์‹œํ‚ค๋Š” event์— ์˜ํ•ด App์˜ ์ƒํƒœ๊ฐ€ ์ „ํ™˜๋˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค. ์นด์นด์˜คํ†ก ์•ฑ์œผ๋กœ ์นดํ†ก์„ ํ•˜๊ณ  ์žˆ๋Š” ๋„์ค‘์— ์ „ํ™”๊ฐ€ ์™”์„ ๋•Œ ์•ฑ์ด ํ™”๋ฉด์ƒ์—์„œ ๋ณด์—ฌ์ง€์ง€ ์•Š๋Š” ์ƒํƒœ์ธ Background ์ƒํƒœ์™€ ์•ฑ์ด ํ™”๋ฉด์— ์˜ฌ๋ผ์™€์žˆ๋Š” ์ƒํƒœ์ธ Foreground ๋“ฑ๊ณผ ๊ฐ™์€ ์ƒํƒœ๋“ค์„ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค. iOS์—์„œ ์•ฑ์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์งˆ๊นŒ ? iO..

article thumbnail
[iOS][UiKit] Navigation BackButton ( ์‚ฌ๋ผ์ง€๋Š” ํ˜„์ƒ, ํ™”์‚ดํ‘œ๋งŒ ํ‘œ์‹œ )
๐ŸŽ iOS/UIKit 2023. 6. 14. 17:31

์ฝ”๋“œ๋กœ Navigation ์˜์—ญ ์ˆ˜์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ์•Œ๊ฒŒ ๋œ ์‚ฌ์‹ค .. ์›๋ž˜๋Š” Navigation Back ๋ฒ„ํŠผ์„ ํ†ตํ•ด ํ™”๋ฉด์„ ์ „ํ™˜ํ–ˆ๋‹ค๊ฐ€ ๋Œ์•„์˜ค๋ฉด, ํ•ด๋‹น ๋ฒ„ํŠผ์ด ๋ณด์ด์ง€ ์•Š๋Š” ํ˜„์ƒ๋•Œ๋ฌธ์— ์ˆ˜์ •์„ ํ•˜๋ ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ฅผ ์ˆ˜์ •ํ•˜๋‹ค ์šฐ์—ฐํžˆ ํ•„์š”ํ–ˆ๋˜ ๊ตฌํ˜„์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. Navigation Back Button A ํ™”๋ฉด์—์„œ Navigation ๋ฒ„ํŠผ์„ ํ†ตํ•ด B ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜ํ–ˆ์„ ๋•Œ, Bํ™”๋ฉด์—์„œ ๋‹ค์‹œ A ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” Navigation ์˜์—ญ์˜ Back ๋ฒ„ํŠผ์„ ์ปจํŠธ๋กค๋Ÿฌ์˜ ํƒ€์ดํ‹€์€ ๋ณด์ด์ง€ ์•Š๊ณ , ํ™”์‚ดํ‘œ ๋ชจ์–‘๋งŒ ๋ณด์ด๊ฒŒ ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. ์ผ๋‹จ ๋’ค๋กœ๊ฐ€๋Š”๋ฒ„ํŠผ์ด ์‚ฌ๋ผ์ง€๋Š” ํ˜„์ƒ์˜ ์›์ธ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ ์Šคํƒ€์ผ๊ณผ ๋ฒ„ํŠผ ์†์„ฑ์ด ์ •ํ™•ํ•˜๊ฒŒ ์„ค์ •๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ ์Šคํƒ€์ผ๊ณผ ๋ฒ„ํŠผ ์†์„ฑ์„..

article thumbnail
[Swift][iOS] GCD API ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํ•„์š”์„ฑ (1)
๐ŸŽ iOS/Swift 2023. 6. 13. 15:28

๐Ÿ“Œ GCD ( Grand Central Dispatch) ๋ž€? ๋‹ค์ˆ˜์˜ Thread์— ์ ์ ˆํ•˜๊ฒŒ ์ž‘์—…์„ ๋ถ„๋ฐฐํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์•ผ ํ•  ์ผ์€ ๋ฌด์—‡์ผ๊นŒ ? ๋ฐ”๋กœ ํ•  ์ผ(task)๋ฅผ Queue์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค. ๋„ฃ์–ด์•ผ ๋˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋‹ค์ˆ˜์˜ Thread์— ์ ์ ˆํ•˜๊ฒŒ ์ž‘์—…์„ ๋ถ„๋ฐฐํ•˜๋Š” ์ผ์€ ๋ˆ„๊ฐ€ ํ•  ๊ฒƒ์ธ๊ฐ€ ? ๋ฐ”๋กœ GCD๋Š” Queue์— ๋„ฃ์œผ๋ฉด ๊ทธ์— ๋”ฐ๋ฅธ ์Šค๋ ˆ๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ƒ์„ฑํ•ด ๋ถ„๋ฐฐํ•ด์ฃผ๋Š” ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  GCD์—์„œ ์‚ฌ์šฉํ•˜๋Š” Queue ์ด๋ฆ„์ด Dispatch Queue์ด๋‹ค. ๊ทธ๋Ÿผ Dispatch Queue์— ์ž‘์—…์ด ์ถ”๊ฐ€๋˜๋ฉด GCD๋Š” ์ž‘์—…์— ๋งž๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์„œ ์‹คํ–‰ํ•˜๊ณ , ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๋ฉด ์Šค๋ ˆ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ฒŒ ๋œ๋‹ค. ๐Ÿ“Œ Dispatch Queue๋ž€? ์•ฑ์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋‚˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ๋˜๋Š” ๋™์‹œ์— ์ž‘..