๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŽ iOS/iOS Programming

(15)
[iOS, Swift] UserDefault ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ์ €์žฅ, ์‚ฌ์šฉํ•˜๊ธฐ โญ๏ธ UserDefault ๋ž€ ? iOS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์ฆ‰ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ์„ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ผ๋˜๊ฐ€ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•œ ์ •๋ณด์ฒ˜๋Ÿผ ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ž๋™ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€, ์•„์ด๋”” ์ €์žฅ, ํ™˜๊ฒฝ์„ค์ •์—์„œ ์„ค์ •ํ•˜๋Š” ์„ค์ • ๋ฐ์ดํ„ฐ ๊ฐ’(์‚ฌ์šฉ์ž๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์ธก์ • ๋‹จ์œ„๋‚˜ ๋ฏธ๋””์–ด ์žฌ์ƒ ์†๋„ ๋“ฑ) ๊ฐ™์€ ๋‹จ์ผ ๋ฐ์ดํ„ฐ ๋“ฑ์„ UserDefaults๋กœ ๋‹ด์•„์„œ ๋ณด๊ด€ ๊ณต์‹ ๋ฌธ์„œ : https://developer.apple.com/documentation/foundation/userdefaults Apple Developer Documentation developer.apple.com โญ๏ธ UserDefault ํŠน์ง• ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ(์•ฑ์ด ์‹คํ–‰๋˜๋Š” ..
[iOS] ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI) ์ด๋ž€ ? Swift ์—์„œ ์ ์šฉํ•˜๊ธฐ, ์˜์กด ๊ด€๊ณ„ ์—ญ์ „ ๋ฒ•์น™ ์˜์กด์„ฑ ์ฃผ์ž…์„ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ ๋‹ค๋ฅธ add-on ํ”„๋ ˆ์ž„์›Œํฌ api๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, dynamic ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ”„๋กœ์ ํŠธ ๋‚ด embed ํ•œ ๊ฒฝ์šฐ, ํ•ด๋‹น api๊ฐ€ ์ •์ƒ ํ˜ธ์ถœ๋˜์ง€๋งŒ, embed ํ•˜์ง€ ์•Š๊ณ  ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„์ด ํ•„์š”ํ–ˆ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…(DI, Dependency Injection) ์ด๋ž€? ๋จผ์ €, ๋‘ ๋‹จ์–ด๋ฅผ ๋œฏ์–ด์„œ ๋ณด๋ฉด, ์˜์กด์„ฑ(Dependency) ์ด๋ž€ ? ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด ์‚ฌ์ด์— ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ฝ”๋“œ๋กœ ์ดํ•ดํ•ด๋ณด์ž. ์ฆ‰, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค A๊ฐ€ B๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, 'A ๊ฐ์ฒด๊ฐ€ B ๊ฐ์ฒด๋ฅผ ์˜์กดํ•œ๋‹ค' ๋ผ๊ณ  ํ•œ๋‹ค. ๋ฌด์Šจ ๋ง์ด๋ƒ ์œ„ ์ฝ”๋“œ์˜ B ํด๋ž˜์Šค name ๋ณ€์ˆ˜๋ฅผ name2๋กœ ๋ณ€๊ฒฝํ•ด๋ณด๋ฉด, ๋ฐ”๋กœ A ํด๋ž˜์Šค..
[iOS, SwiftUI] ํ•˜์ด๋ธŒ๋ฆฌ๋“œ(Hybrid) ์•ฑ์ด๋ž€ ? ์›น๋ทฐ<->๋„ค์ดํ‹ฐ๋ธŒ ํ†ต์‹  ๊ตฌํ˜„ํ•˜๊ธฐ, (SwiftUI + WebView evaluateJavaScript + javascript messagehandler) ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•ฑ(Hybid Application) ?๊ทธ์ „์— ๋จผ์ € ์•Œ์•„์•ผ ํ•  ๊ฒƒ: 1. ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ(Native App):  Android ๋˜๋Š” iOS ๊ฐ™์€ ์–ด๋–ค ๊ตฌ์ฒด์ ์ธ ํ”Œ๋žซํผ๋งŒ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ(Native App)์œผ๋กœ ๋””๋ฐ”์ด์Šค์— ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์žฅ๊ฐ ์šด์˜์ฒด์ œ์— ์ตœ์ ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฏ€๋กœ ์•ฑ์˜ ๊ตฌ๋™ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ๋†’์€ ์‚ฌ์–‘์˜ ๊ทธ๋ž˜ํ”ฝ์œผ๋กœ ์›ํ•˜๋Š” ๋””์ž์ธ์„ ๊ตฌํ˜„ ๊ฐ€๋Šฅ๋‹จ ๋‹ค๋ฅธ ์šด์˜์ฒด์ œ์—์„œ ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ๋“œ๋กœ์ด๋“œ์™€ iOS ์•ฑ์„ ๋ณ„๋„๋กœ ๊ฐœ๋ฐœํ•ด์•ผ ํ•จ์•ฑ์— ์ˆ˜์ •์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ ์•ฑ ๋งˆ์ผ“์˜ ์‹ฌ์‚ฌ๋ฅผ ๊ฑฐ์น˜๊ณ  ์ „์ฒด ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ 2. ์›น ์•ฑ(Web App):  ๋ฐ์Šคํฌํ†ฑ ๋˜๋Š” ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์žฅ์ธํ„ฐ๋„ท ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ..
[iOS, swift] ์†Œ์…œ ๋กœ๊ทธ์ธ(social login) ๊ตฌํ˜„ํ•˜๊ธฐ - ์• ํ”Œ(Apple) ๊ณ„์ • ์†Œ์…œ ๋กœ๊ทธ์ธ - ์• ํ”Œ ๋กœ๊ทธ์ธ(Sign in with Apple)์„ ๊ตฌํ˜„ํ•ด๋ณด์ž. ์š”์ฆ˜ ์–ดํ”Œ์—์„œ๋Š” ํ•„์ˆ˜๋กœ ๋“ค์–ด๊ฐ€๋Š” ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด, ์• ํ”Œ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ์€ 2019๋…„ ์• ํ”Œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๋ฐœํ‘œ์™€ ๋™์‹œ์— ์•ฑ ๋‚ด์— ๋‹ค๋ฅธ ์†Œ์…œ ๋กœ๊ทธ์ธ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉ ์‹œ ํ•„์ˆ˜๋กœ ์• ํ”Œ ๋กœ๊ทธ์ธ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‹ฌ์‚ฌ์ง€์นจ๋„ ํ•จ๊ป˜ ๋‚ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ!! Apple๋กœ ๋กœ๊ทธ์ธ์— ๋Œ€ํ•œ ์‹ ๊ทœ ๊ฐ€์ด๋“œ๋ผ์ธ - ๋‰ด์Šค - Apple Developer ์‚ฌ์šฉ์ž์˜ Apple ID๋กœ ์•ฑ๊ณผ ์›น์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธํ•˜๋„๋ก ํ•˜์—ฌ ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ Apple๋กœ ๋กœ๊ทธ์ธ์„ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณ„์ •์„ ์„ค์ •ํ•˜๊ณ  ๋ฐ”๋กœ ์‹œ developer.apple.com ๋”ฐ๋ผ์„œ, ์ด์ œ๋Š” ํ•„์ˆ˜๊ฐ€ ๋œ ์• ํ”Œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ..
[iOS, Swift] ContainerView ๋งŒ๋“ค๊ธฐ, View๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๊ธฐ - 1. prepare ๋ฉ”์†Œ๋“œ, 2.Children, parent ํ”„๋กœํผํ‹ฐ ์‚ฌ์šฉ ์ปจํ…Œ์ด๋„ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ(Container View Controller)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž ์ฝ˜ํ…์ธ  ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ด๋ฏธ์ง€๋‚˜ ํ…์ŠคํŠธ, HTML ํŽ˜์ด์ง€ ๋“ฑ ์•ฑ์˜ ํ™”๋ฉด์— ํ‘œํ˜„ํ•  ์ฝ˜ํ…์ธ ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ฝ˜ํ…์ธ  ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ™”๋ฉด ์ „์ฒด ์‚ฌ์ด์ฆˆ์˜ ๋ฃจํŠธ ๋ทฐ๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ๋ทฐ ์œ„์— ๊ฐ์ข… ์ฝ˜ํ…์ธ ๋ฅผ ์–น์–ด ํ™”๋ฉด์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. iOS๋Š” ํ™”๋ฉด์˜ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•œ ํ™”๋ฉด์— ํ•˜๋‚˜์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋งŒ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜๋จธ์ง€ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— ์ ‘๊ทผํ•˜๋Š” ํšจ์œจ์ ์ธ ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•˜๋‚˜์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋‹ค๋ฅธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‰ฝ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด์–ด์ง€๋„๋ก ๋‹ค์–‘ํ•œ ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Apple Developer Documentation developer.appl..
[iOS/Swift] ์œ ๋‹ˆ๋ฒ„์…œ ๋งํฌ(Universal Link) ์ ์šฉํ•˜๊ธฐ, ๋™์  ๋งํฌ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ ๋‹ˆ๋ฒ„์…œ ๋งํฌ(Univeral Link) ๋ž€? iOS์—์„œ ๋”ฅ๋งํฌ*๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ์›น์—์„œ ์•ฑ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ! *๋”ฅ๋งํฌ(Deep Link) : ํŠน์ • ์ฃผ์†Œ๋‚˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด ์•ฑ์ด ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์•ฑ ๋‚ด ํŠน์ • ํŽ˜์ด์ง€์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋งํฌ URI ์Šคํ‚ด ๋ฐฉ์‹ : ์•ฑ์— URI ์Šคํ‚ด(scheme) ๊ฐ’์„ ๋“ฑ๋กํ•˜์—ฌ ๋”ฅ๋งํฌ ์‚ฌ์šฉ ์•ฑ๋งํฌ(App Link) : Android ์ œ๊ณต - ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•œ ๋”ฅ๋งํฌ ์‚ฌ์šฉ ์œ ๋‹ˆ๋ฒ„์…œ ๋งํฌ (Universal Link) : iOS ์ œ๊ณต - ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•œ ๋”ฅ๋งํฌ ์‚ฌ์šฉ *Dynamic Link : ํŒŒ์ด์–ด๋ฒ ์ด์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋”ฅ๋งํฌ์˜ ์ผ์ข… ์œ ๋‹ˆ๋ฒ„์…œ ๋งํฌ๋ฅผ ์ด์šฉํ•˜๋ฉด, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ๋งํฌ ์ ‘๊ทผ ์‹œ, ์•ฑ์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์•ฑ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์—†์œผ..
[iOS] ํ‚คํŒจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋  ๋•Œ TextField ๊ฐ€๋ฆฌ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ, ํ‚คํŒจ๋“œ ํ•ธ๋“ค๋งํ•˜๊ธฐ ํ‚คํŒจ๋“œ๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด ์˜ฌ๋ผ์™”์„ ๋•Œ TextField๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ž ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ์ง€๋งŒ, NotificationCenter์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•ด๋ณด์ž:) ์›ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. PROCESS TextField์„ ํƒ์‹œ ํ‚คํŒจ๋“œ๊ฐ€ ์˜ฌ๋ผ์˜ด (*์•ˆ์˜ฌ๋ผ์˜ค๋Š” ๊ฒฝ์šฐ : Cmd + Shift + k) -> NotificationCenter๋ฅผ ํ†ตํ•ด ํ‚คํŒจ๋“œ๊ฐ€ ์˜ฌ๋ผ์˜ด์„ ์•ฑ์ด ์ธ์ง€ -> ๊ฐ€๋ ค์ง„ TextField๊ฐ€ ๋ณด์ด๋„๋ก ํ™”๋ฉด์ด ์˜ฌ๋ผ๊ฐ -> TextField์— ๊ฐ’ ์ž…๋ ฅ ํ›„ ํ‚คํŒจ๋“œ ๋‚ด๋ฆผ (ํ™”๋ฉด ํ„ฐ์น˜ or Done ํด๋ฆญ) -> ํ‚คํŒจ๋“œ๊ฐ€ ๋‚ด๋ ค๊ฐ์„ NotificationCenter๋ฅผ ํ†ตํ•ด ์•ฑ์ด ์ธ์ง€ -> ํ™”๋ฉด ์›์ƒ๋ณต๊ท€ 1. NotificationCenter - Observer ๋“ฑ๋ก ํ‚คํŒจ๋“œ๊ฐ€ ํ™œ์„ฑํ™” ๋˜๋Š”์ง€ ์•ˆ๋˜๋Š”์ง€ ํƒ์ง€ํ•  ..

๋ฐ˜์‘ํ˜•