์ „์ฒด ๊ธ€ 124

[Swift] Privacy Masking(Privacy Screen) ๊ตฌํ˜„ํ•˜๊ธฐ

iOS์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋ž˜์—์„œ ์œ„๋กœ ์Šค์™€์ดํ”„๋ž˜ ์•ฑ ์ „ํ™˜๊ธฐ(App Switcher)๋ฅผ ์—ด๋ฉด,์‹œ์Šคํ…œ์ด ํ˜„์žฌ ์•ฑ์˜ ํ™”๋ฉด ์Šค๋ƒ…์ƒท์„ ์ž๋™์œผ๋กœ ์ฐ์–ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค€๋‹ค.๋ฌธ์ œ๋Š” ์ด๋•Œ ๋ฏผ๊ฐ ์ •๋ณด๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด ํ—ฌ์Šค ๋ฐ์ดํ„ฐ, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„, ๋ฉ”์‹œ์ง€ ๋“ฑ์€ ๋ณด์•ˆ์ƒ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋ฉด ๊ณค๋ž€ํ•˜๋‹ค.์ด๋ฒˆ ๊ธ€์—์„œ๋Š”,์ „ํ™˜๊ธฐ๋กœ ์ด๋™ํ•  ๋•Œ ์•ฑ ํ™”๋ฉด ๋Œ€์‹  ๋””ํดํŠธ ๋กœ๊ณ  ํ˜น์€ ์›ํ•˜๋Š” UI๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ํ•ด๋‹น ๋ทฐ๊ฐ€ ๋ณด์ด๋„๋ก ๊ฐ€๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ UIKit ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. (๋งˆ์ง€๋ง‰์— ๊ฐ„๋žตํ•˜๊ฒŒ SwiftUI๋„ ์žˆ์Œ) ๋™์ž‘ ์›๋ฆฌ์•ฑ์ด active → inactive ๋˜๋Š” background ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๋ฉด,iOS๋Š” ํ˜„์žฌ ์œˆ๋„์šฐ๋ฅผ ๋ Œ๋”๋งํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ž๋™์œผ๋กœ ์บก์ณํ•œ๋‹ค.์ด ์Šค๋ƒ…์ƒท์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์—†๊ณ ,"..

๐ŸŒ™ 2025.10.19

[iOS] New Requirement for Apps Using Sign in with Apple for Account Creation

์•„๋ž˜ ๊ธ€์€ 2025๋…„ 10์›” 10์ผ ์• ํ”Œ์—์„œ ๋ณด๋‚ด์˜จ ์š”๊ตฌ์‚ฌํ•ญ ๋ฉ”์ผ์ž…๋‹ˆ๋‹ค.๋Œ€์ถฉ ๋ณด๋‹ˆ, ์• ํ”Œ ๋กœ๊ทธ์ธ ๊ด€๋ จํ•œ ๋‚ด์šฉ์ธ ๊ฒƒ ๊ฐ™์•„์š”.์š”์•ฝํ•˜๋ฉด, 2026๋…„ 1์›” 1์ผ๋ถ€ํ„ฐ ๋Œ€ํ•œ๋ฏผ๊ตญ ๊ฐœ๋ฐœ์ž๋Š” Sign in with Apple์„ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ๊ณผ ์—ฐ๊ฒฐ๋œ Services IDs๋ฅผ ์‹ ๊ทœ ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ,Server-to-Server(Notification) ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ•„์ˆ˜๋กœ ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ.์ฆ‰ Apple๋กœ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด Services IDs๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•˜๋Š”๋ฐ,๋“ฑ๋ก ์‹œ ์—ฐ๊ฒฐํ•œ App IDs์— ์—”๋“œํฌ์ธํŠธ URL๋ฅผ ๋“ฑ๋กํ•˜๋ผ๋Š” ๊ฒƒ.(๊ทธ๋ž˜์•ผ ์• ํ”Œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ)๊ฒฝ๋กœ: Apple Developer ํฌํ„ธ > identifiers > App IDs > ๋Œ€์ƒ ID > Sign In with Apple > E..

๐ŸŒ™ 2025.10.15

[Swift] ์•ฑ ์ฒซ ์‹คํ–‰ ์‹œ ํ•ด์•ผ ํ•  ์ดˆ๊ธฐํ™” ์ž‘์ ‘ ์ •๋ฆฌ(AppDelagate vs SceneDelegate)

์˜ค๋Š˜์€ ๊ฐ€๋ฒผ์šด ์ฃผ์ œ๋กœ ๋ธ”๋กœ๊ทธ๋ฅผ ๋„์ ์—ฌ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.(์ถ”์„ ์—ฐํœด ๊ธฐ๋… ๐Ÿฅณ) AppDelegate์—์„œ๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ..SceneDelegate์—์„œ๋„? ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ, ์šฐ๋ฆฌ๋Š” ํ”ํžˆ AppDelegate์˜ didFinishLaunchingWithOptions์—์„œ ๋ชจ๋“  ์ดˆ๊ธฐํ™”๋ฅผ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ iOS 13 ์ดํ›„ ๋„์ž…๋œ SceneDelegate ๊ตฌ์กฐ์—์„œ๋Š” ์ด ์ƒ๊ฐ์ด ํ‹€๋ฆด ์ˆ˜ ์žˆ๋‹ค.์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ ๋ฐ˜๋“œ์‹œ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์™€AppDelegate/SceneDelegate ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.๐Ÿ’๐Ÿป‍โ™€๏ธ ์—ญํ• ์˜ ์ฐจ์ด AppDelegateSceneDelegateํ˜ธ์ถœ ์‹œ์ ์•ฑ ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ๊ฐ ์”ฌ ์ƒ์„ฑ ์‹œ์—ญํ• ์ „์—ญ์ ์ธ ์•ฑ ์ดˆ๊ธฐํ™”(SDK, Logger, ..

๐ŸŒ™ 2025.10.05

[Swift] SplashView - ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด

์Šคํ”Œ๋ž˜์‹œ?์•ฑ์„ ์ฒ˜์Œ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ์ฒซ ํ™”๋ฉด์„ '์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด(Splash Screen)์ด๋ผ๊ณ  ํ•œ๋‹ค.๋‹จ์ˆœํžˆ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ ,์ดˆ๊ธฐํ™” ์ž‘์—…์ด๋‚˜ ์›๊ฒฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์ „์— ์ž ์‹œ ๋…ธ์ถœ๋˜๋Š” ์šฉ๋„๋กœ ํ™œ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋”ฐ๋ผ UX์™€ ์‹ฌ์‚ฌ ๊ธฐ์ค€์— ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅธ ๊ตฌํ˜„๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.โ–ท LaunchScreen- ์‹œ์Šคํ…œ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ดˆ๊ธฐ ํ™”๋ฉด- ์•ฑ ์‹คํ–‰ ์งํ›„ ๊ฐ€์žฅ ๋จผ์ € ํ‘œ์‹œ๋˜๋ฉฐ, Xcode์˜ LaunchScreen.storyboard๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑ- ์žฅ์ : ๊น”๋”ํ•˜๊ณ  ์‹คํ–‰ ์งํ›„ ํ‘œ์‹œ, iOS ์‹ฌ์‚ฌ ๊ฐ€์ด๋“œ๋ผ์ธ์— ๋ถ€ํ•ฉ- ๋‹จ์ : ๋™์  ๋กœ์ง ์ ์šฉ ๋ถˆ๊ฐ€ → ๋„คํŠธ์›Œํฌ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‚ฝ์ž… ๋“ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•จโ–ท Custom SplashView- ์•ฑ ์‹คํ–‰..

๐ŸŒ™ 2025.09.28

[Swift] KeychainManager

iOS ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์•ฑ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.๋‹จ์ˆœํ•œ ์„ค์ • ๊ฐ’์€ UserDefaults๋กœ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ,์—‘์„ธ์Šค ํ† ํฐ์ด๋‚˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด์ฒ˜๋Ÿผ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋œ Keychain์— ์ €์žฅํ•˜๋ฉด ์ข‹๋‹ค.์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๊ธฐ์กด์— ๋งŒ๋“ค์–ด๋‘” UserDefaultsManager์™€ ์œ ์‚ฌํ•œ ํŒจํ„ด์œผ๋กœ,Keychain์„ ์กฐ๊ธˆ ๋” ์†์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” KeychainManager๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค :)Keychain์€ ์‹œ์Šคํ…œ์—์„œ ์ง์ ‘ ์•”ํ˜ธํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ์•ˆ์ „ํ•œ ์ €์žฅ์†Œ์ง€๋งŒ,API๊ฐ€ ๋‹ค์†Œ ๋ณต์žกํ•˜๊ณ  ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.๋”ฐ๋ผ์„œ UserDefaults์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ '์ €์žฅ, ์ฝ๊ธฐ, ์‚ญ์ œ' ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋˜๋„๋ก ๋ž˜ํ•‘ํ•˜๋ฉด ์‹ค๋ฌด์—์„œ ํ›จ์”ฌ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•  ๊ฒƒ ๊ฐ™์•˜๋‹ค.์ด๋ฒˆ์— ๊ตฌํ˜„ํ•œ KeychainMana..

๐ŸŒ™ 2025.09.21

[Swift] Keychain

iOS์—์„œ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ๋Š” UserDefaults, CoreData, Keychain ๋“ฑ์ด ์žˆ๋‹ค.ํ•œ์ฐฝ ๊ณต๋ถ€ํ•  ๋•Œ, ์ด๋Ÿฐ ์ด์•ผ๊ธฐ๋ฅผ ์ž์ฃผ ๋“ค์—ˆ๋‹ค."๋น„๋ฐ€๋ฒˆํ˜ธ ํ˜น์€ ํ† ํฐ๊ณผ ๊ฐ™์ด ์ค‘์š”ํ•œ ์ •๋ณด๋“ค์€ ํ‚ค์ฒด์ธ์— ์ €์žฅํ•ด์•ผํ•ด. UserDefaults๋Š” ๋ณด์•ˆ์ƒ ์ข‹์ง€ ์•Š์•„.""๊ฒฐ๊ตญ ๋”ฐ์ง€๊ณ  ๋ณด๋ฉด UserDefaults์— ์ €์žฅํ•˜๋‚˜ ํ‚ค์ฒด์ธ์— ์ €์žฅํ•˜๋‚˜ ๋น„์Šทํ•ด."ํ•˜์ง€๋งŒ ์ •์ž‘ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์–ด๋–ค ์ €์žฅ์†Œ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•œ ๊ธฐ์ค€์„ ์ฐพ์ง€ ๋ชปํ–ˆ๊ณ ,๋‹จ์ˆœํžˆ ๊ตฌํ˜„์ด ๊ฐ„ํŽธํ•˜๋‹ค๋Š” ์ด์œ ๋กœ UserDefaults๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•ด ์™”๋‹ค.์ด๋ฒˆ ๊ธ€์—์„œ๋Š” iOS Keychain์„ ์ข€ ๋” ๋ฉด๋ฐ€ํžˆ ์‚ดํŽด๋ณด๊ณ , ์•ž์œผ๋กœ๋Š” ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ์˜ ์„ฑ๊ฒฉ๊ณผ ๋ณด์•ˆ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž์ถ”์–ด ์ ์ ˆํ•œ ์ €์žฅ์†Œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ธฐ์ค€์„ ์„ธ์›Œ๋ณด๋ ค๊ณ  ํ•œ๋‹ค :)Keychain์ด๋ž€?- ..

๐ŸŒ™ 2025.09.14

[Swift] CoreData ํ™œ์šฉํ•ด๋ณด๊ธฐ (Subclass ์ƒ์„ฑ๋ฒ•, Double ํƒ€์ž… ์„ ์–ธ ์•ˆ๋˜๋Š” ์ด์œ )

CoreData๋ฅผ ํ™œ์šฉํ•ด์„œ ์ž‘์€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์—ฐ์Šตํ•ด๋ณผ๊นŒํ•ฉ๋‹ˆ๋‹ค! ์ด๋ฆ„, ์„ฑ๋ณ„, ๋‚˜์ด๋ฅผ ์ž…๋ ฅํ•œ ํ›„์ €์žฅ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, CoreData์— ์ €์žฅ๋˜๊ณ ์ „์ฒด์‚ญ์ œ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.โ‘  ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์šฐ์„  ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ํ•˜๋‹จ์— CoreData๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋ฉด ์œ„์™€ ๊ฐ™์ด xcdatamodeld ํŒŒ์ผ์ด ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.๋งŒ์•ฝ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰์ค‘์— CoreData๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค๋ฉด?๋”๋ณด๊ธฐCommand + N ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.โ‘ก Entity, Attributes, Relationships ์„ค์ •์ด์ œ ํ•˜๋‹จ Add Entity๋ฅผ ํด๋ฆญํ•ด์„œ Entity๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.์—ฌ๊ธฐ์„œ Entity์ด๋ฆ„์€ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ ์ž˜ ๊ธฐ์–ตํ•˜๊ธฐ!(์ €๋Š” Testํ”„๋กœ์ ํŠธ๋ผ ์ œ ์ด๋ฆ„ Yegr๋ผ๊ณ  ์ง€์—ˆ..

Swift/Xcode 2024.12.12

[Swift] CoreData - ๊ณต์‹๋ฌธ์„œ ํŒŒํ—ค์น˜๊ธฐ

์˜ค๋Š˜ ์ •๋ฆฌํ•  ์ฃผ์ œ๋Š” Swift CoreData!!๊ทธ๋™์•ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ UserDefaults์™€ Realm์„ ์‚ฌ์šฉํ•ด์™”๋Š”๋ฐ,์•Œ๋˜ ์ง€์‹์„ ๋ฐ”ํƒ•์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ CoreData๋ฅผ ์จ๋ณผ ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค..๋ฐ”์œ ๊ณผ์ •๋„ ๋๋‚ฌ๊ณ ! ์ด์ œ๋Š” ๋ถ€์กฑํ•œ ๊ฐœ๋ฐœ ์ง€์‹์„ ์ฑ„์šธ ์‹œ๊ฐ„์ธ ๊ฒƒ ๊ฐ™์•„์„œ๊ณต๋ถ€ํ•  ๊ฒธ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜€์ฒ˜์Œ ๊ณต๋ถ€ํ•˜๋Š” ๋‚ด์šฉ์ด๋ผ ๊ณต์‹๋ฌธ์„œ ๋จผ์ € ์‚ดํŽด๋ณผ๊ฒŒ์š”. Core Data | Apple Developer DocumentationPersist or cache data on a single device, or sync data to multiple devices with CloudKit.developer.apple.com๋ถ€์กฑํ•œ ์˜์–ด์‹ค๋ ฅ์ด์ง€๋งŒ, ์ฐจ๊ทผ์ฐจ๊ทผ ํ•ด์„ํ•ด๋ณผ๊ฒŒ์š”. ํ‘ธํ•˜ํ•˜..(๋ฒˆ์—ญ์ด..

Swift 2024.12.01