[iOS] ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection) ๊ฐœ๋…๊ณผ ์˜ˆ์ œ ( feat. Clean Architecture + MVVM)

Clean Architecture๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฐœ๋…์ด์—ˆ๋˜ '์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)'์— ๋Œ€ํ•œ ์ •๋ฆฌ๋ฅผ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, Clean Architecture์— ๋Œ€ํ•œ ์ „ ๊ณผ์ •์„ ๋‹ค๋ฃจ๋Š” ๊ธ€์ด ์•„๋‹ˆ๋‹ˆ ์ด ์  ์ฐธ๊ณ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ ์™„๋ฒฝํ•œ ๊ธ€์ด ์•„๋‹ˆ๋‹ค๋ณด๋‹ˆ, ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋งŽ์€ ์ง€์  ๋ถ€ํƒ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค! :) ์˜์กด์„ฑ(Dependency)์ด๋ž€? ํ”ํžˆ, Clean Architecture์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์›์น™์„ ์„ค๋ช…ํ•  ๋•Œ "๊ฐ ๊ณ„์ธต(Layer)์€ ์„œ๋กœ ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•˜๋ฉฐ, ํ•œ ๊ณ„์ธต์˜ ๋ณ€ํ™”๊ฐ€ ๋‹ค๋ฅธ ๊ณ„์ธต์— ์˜ํ–ฅ์„ ์ฃผ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค!" ๋ผ๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” '๊ณ„์ธต์ด ์„œ๋กœ ๋…๋ฆฝ์ ' ์ด๋ผ๋Š” ๋ง์€, ๊ฐ ๊ณ„์ธต์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™” ํ•˜๋Š”๊ฒƒ์„ ์ง€ํ–ฅํ•ด์•ผํ•œ๋‹ค๋Š” ๋ง ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, iO..

๐ŸŽ/iOS 2023. 3. 31. 00:30
[Error #3] Package ์˜ค๋ฅ˜ : Missing package product < Package name >

ํŒ€์—์„œ ์ž‘์—…์ค‘์ด๋˜ Git์„ Cloneํ•˜๊ณ  Buildํ•˜๋˜ ๊ณผ์ •์—์„œ Missing package product ~ ์™€ ๊ฐ™์€ Error๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค... ํ•ด๋‹น ์—๋Ÿฌ๋Š”, ๋‹จ์ˆœํžˆ cocoapod์„ ์™ธ๋ถ€์—์„œ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ์— package ์—…๋ฐ์ดํŠธ๋‚˜, cache์‚ญ์ œ ๋“ฑ๊ณผ ๊ฐ™์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ๋ฒ•์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. (ํ•ด๋‹น ํ•ด๊ฒฐ๋ฒ•์€ ๊ตฌ๊ธ€์— ๋งŽ์ด ์กด์žฌํ•˜๋‹ˆ, ์ฐพ์•„๋ณด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค!) ํ•˜์ง€๋งŒ, ์ œ ํŒ€์—์„œ ์ž‘์—…์ค‘์ธ ํ”„๋กœ์ ํŠธ๋Š” ์‚ฌ์šฉ ํ•  cocoapod์„ submodule๋กœ ๋“ฑ๋กํ•˜์—ฌ ๊ด€๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ, Git ์ €์žฅ์†Œ์— submodule์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š”๋ฐ ๋‹จ์ˆœ Clone์„ ํ•˜๋ฉด submodule์˜ ์œ„์น˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์žก์ง€ ๋ชปํ•ด์„œ Missing package product ์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ Clo..

๐ŸŽ/Error 2023. 3. 4. 09:57
[Error #2] Firebase ์˜ค๋ฅ˜ : Default app has already been configured.

FCM์„ ์„ค์ •ํ•˜๋˜ ๋„์ค‘, Build๋‹จ๊ณ„์—์„œ Default app has already been configured. ๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค... ๊ทธ๋ž˜์„œ, ์Šคํƒ์„ ๋”ฐ๋ผ ์˜ฌ๋ผ๊ฐ€๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ์— ๋„์ฐฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋ณด๋‹ˆ, // Only extensions should potentially be able to call 'configure' more than onse ๋ผ๊ณ  ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š” ์ฃผ์„ ๋ณด์ด์‹œ๋‚˜์š”?? ํ•ด์„ ํ•ด๋ณด๋ฉด, '์ด ์˜ˆ์™ธ๋Š”, ์ž ์žฌ์ ์œผ๋กœ 'configure'๊ฐ€ 1๋ฒˆ ์ด์ƒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ๋ถˆ๋ ค์ง‘๋‹ˆ๋‹ค.' ๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ, ์šฐ๋ฆฌ๊ฐ€ ์ฒ˜์Œ Firebase๋ฅผ ์„ค์ • ํ•  ๋•Œ Firebase.configure() ์š”๋†ˆ์ด 2๋ฒˆ ์ด์ƒ ํ˜ธ์ถœ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ๊ฒ ์ฃ ? ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ..

๐ŸŽ/Error 2023. 3. 4. 09:32
[iOS/UIScrollView] RxSwift๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, KeyboardNotification ๋‹ค๋ฃจ๊ธฐ ( + textField ์„ ํƒ ์‹œ Keyboard ๋†’์ด๋งŒํผ ScrollView์ด๋™ )

RxSwift๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ KeyboardNotification ๋‹ค๋ฃจ๊ธฐ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด, TextField๋ฅผ ์„ ํƒํ•˜์˜€์„ ๋•Œ ํ•ด๋‹น TextField์˜์—ญ์„ KeyBoard๊ฐ€ ์นจ๋ฒ”ํ•˜์—ฌ [1] ์ž‘์„ฑํ•˜๋Š” ๋‚ด์šฉ [2] ์™„๋ฃŒ ๋ฒ„ํŠผ ๋“ฑ์„ ๊ฐ€๋ฆฌ๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Notification์ด๋ผ๋Š” Class๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. UIScrollView ๋‚ด๋ถ€์— ์ •์˜๋˜์–ด ์žˆ๋Š” TextField์˜ ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด TextField๋ฅผ ์„ ํƒ ํ•˜์˜€์„ ๋•Œ, KeyBoard์˜ ๋†’์ด๋งŒํผ ScrollView๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. class SignUpViewController: BaseViewController{ var keyBoardUpDown = false override fu..

๐ŸŽ/iOS 2023. 2. 19. 04:52
๋ฐ˜์‘ํ˜•
๋งํฌ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
Total
Today
Yesterday