OAuth
๋ฅผ ํตํด ํ์๊ฐ์ , ๋ก๊ทธ์ธ, ๋ก๊ทธ์์์ ํตํด ์ ์ ๋ฅผ ์๋ณํ๊ณ ,Firebase
๋ฅผ ํ์ฉํ ์ค์ผ์ค๋ง ์ฑ.
ย
ย
์ ๋งํฌ์์ ํ์ผ ๋๊ฐ๋ฅผ ๋ค์ด๋ฐ๊ณ ์์ ๋์ผํ๊ฒ ํ์ผ๋ค์ ํ๋ก์ ํธ ๋ด์ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์.
ย
์ดํ ํ๋ก์ ํธ Configuration ์ค์ ์ ์์ ๋์ผํ๊ฒ ์ค์ ํด์ฃผ์ธ์.
ย
- ํ์ผ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
- ๊ธฐ์ ์คํ
- ๊ธฐ๋ฅ ๋ฐ UI
- ์ค๊ณ ๋ฐ ๊ตฌํ
- ์คํ ํ๋ฉด
- ๊ธฐ์ ์ ๋์
- Truoble Shooting
- ๊ณ ๋ฏผํ๋ ์
PersonalScheduler
โโโ Resources
โย ย โโโ Assets.xcassets
โโโ Sources
โโโ App
โโโ Common
โย ย โโโ Extensions
โย ย โย ย โโโ UI
โย ย โโโ Utility
โโโ Data
โย ย โโโ Network
โย ย โย ย โโโ Protocol
โย ย โโโ Repositories
โย ย โโโ Storages
โโโ Model
โโโ Presentation
โโโ Auth
โย ย โโโ Coordinator
โย ย โโโ View
โย ย โโโ ViewController
โย ย โโโ ViewModel
โโโ Schedule
โย ย โโโ Coordinator
โย ย โโโ View
โย ย โโโ ViewController
โย ย โโโ ViewModel
โโโ ScheduleList
โโโ Coordinator
โโโ View
โโโ ViewController
โโโ ViewModel
ย
- MVVM
- Coordinator
ย
- Combine
ย
๊ธฐ๋ฅ/UI | ์ค๋ช |
---|---|
๋ก๊ทธ์ธ, ๋ก๊ทธ์์ | OAuth๋ฅผ ์ด์ฉํด ์ธ์ฆ ํ ํฐ์ ์์ฒญํ์ฌ, ๋ก๊ทธ์ธ ๋ฐ ๋ก๊ทธ์์์ ํ ์ ์์ต๋๋ค. ์ง์ํ๋ ์์
๋ก๊ทธ์ธ์ Kakao , Apple , Facebook ์ด ์์ต๋๋ค. |
์ค์ผ์ค ๋ชฉ๋ก | ์ฌ์ฉ์๊ฐ ์ถ๊ฐํ ์ค์ผ์ค์ ๋ฆฌ์คํธ ํํ๋ก ํ์ธํ ์ ์์ต๋๋ค. ์ผ์ ์ด ์๋ค๋ฉด ๋น ํ๋ฉด ๋์ ์ผ์ ์ ์ถ๊ฐํด๋ฌ๋ผ๋ Label์ ๋์ ๋์๋๋ค. ์ข์ธก ์๋จ ๋ค๋น๊ฒ์ด์
ํ์ดํ์ ํ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ ์ง ์ค์ผ์ค์ ํ์ธ ํ ์๋ ์์ต๋๋ค. ๋ํ, ํ์ฌ ์งํ์ค์ธ ์ค์ผ์ค์ธ ๊ฒฝ์ฐ ์ฐ๋์์ผ๋ก ํ์ด๋ผ์ดํธ ํ์ ๋ฉ๋๋ค. |
์ค์ผ์ค ๋ฑ๋ก | ๋ชฉ๋ก ํ๋ฉด์์ ์ฐ์ธก ํ๋จ + ๋ฒํผ์ ํตํด ์๋ก์ด ์ค์ผ์ค์ ๋ฑ๋กํ ์ ์์ต๋๋ค. |
์ค์ผ์ค ์์ | ๋ชฉ๋ก์ ์๋ ์ค์ผ์ค์ ํฐ์นํ๋ฉด ์ค์ผ์ค์ ์์ ํ ์ ์๋ ํ๋ฉด์ผ๋ก ์ด๋ํฉ๋๋ค. |
ย
ย
class/struct | ์ญํ |
---|---|
AuthViewController |
๋ก๊ทธ์ธ ๋ฐ ํ์๊ฐ์ ์ ์งํํ ์ ์๋ ํ๋ฉด์ด๋ค. |
ScheduleListViewController |
๋ฑ๋กํ ์ค์ผ์ค ์ผ์ ์ ํ์ธํ ์ ์๋ ํ๋ฉด์ด๋ค. ์
์ ํฐ์น์ ์ค์ผ์ค ์์ ํ๋ฉด์ผ๋ก ์ง์
ํ๊ณ , + ๋ฒํผ์ ํด๋ฆญ ์ ์ ์ผ์ ์ ๋ฑ๋กํ ์ ์๋ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ค. |
ScheduleViewController |
์ค์ผ์ค ์์ ๋ฐ ์์ฑ์ ๋ํ๋๋ ํ๋ฉด์ด๋ค. ์ค์ผ์ค์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ฅ๋ฒํผ ํด๋ฆญ ์ ๋ก์ปฌ๊ณผ ๋ฆฌ๋ชจํธ์ ์ค์ผ์ค์ด ์ ์ฅ๋๋ค. ์ ์ฅํ๋ฉด์ Notification ์์ฝ๋ ํจ๊ป ์งํ๋๋ค. |
AuthenticationRepository |
OAuth๋ฅผ ํตํด ์ธ์ฆ ํ ํฐ์ ๋ฐ์์ค๊ณ , ๋ฐ์์จ ํ ํฐ์ ํค์ฒด์ธ์ ํตํด ๊ด๋ฆฌํ๋ค. |
UserRepository |
Firebase๋ฅผ ํตํด ์ ์ ๋ฅผ ๋ฑ๋กํ๋ค. ๋ก์ปฌ์ ์ ์ฅ๋์ด์๋ ์ ์ ์ ๋ณด๋ฅผ ์ฝ์ด์ค๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ค. |
ScheduleRepository |
์ค์ผ์ค ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ํ์
์ด๋ค. ๋ถ๋ฌ์ค๊ธฐ, ์์ , ์ฐ๊ธฐ, ์ญ์ ๊ธฐ๋ฅ ๋ฑ์ ์ ๊ณตํ๊ณ , ๋ชจ๋ ์์
์ ๋ฆฌ๋ชจํธ์ ๋ก์ปฌ์ ๋ชจ๋ ๋ฐ์๋ ์ ์๋๋ก ํ๋ค. ์ค์ผ์ค๋ค์ ๊ด๋ฆฌํ๋ฉด์ ํด๋น ์ค์ผ์ค์ Notification ๋ ๊ฐ์ด ๊ด๋ฆฌํ๋ค. |
ย
class/struct | ์ญํ |
---|---|
LocalStorage |
๋ก์ปฌ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ํ์ ์ด๋ค. |
KeyChainStorage |
ํค์ฒด์ธ์ ์ธ์ฆ ํ ํฐ์ ๊ด๋ฆฌํด์ฃผ๋ ํ์ ์ด๋ค. |
FirestoreStorage |
Firebase DB๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์ ์ ๋ณด ๋ฐ ์ค์ผ์ค๋ค์ ๊ด๋ฆฌํด์ฃผ๋ ํ์ ์ด๋ค. |
ย
๊ธฐ๋ฅ๋ค์ ๋น ๋ฅด๊ฒ ํ์ธํ๋ ค๋ฉด,
๋๋ณด๊ธฐ
์ ํ์ ๋ผ์ธ์ ํ์ฉํด์ฃผ์ธ์.
ย
์ฐ์๋ escaping closure๋ฅผ ํผํ๊ณ , ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ํตํ ๋์ ๊ฐ๋ ์ฑ๊ณผ ์คํผ๋ ์ดํฐ๋ค์ ํตํ ํจ์จ์ ์ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด์ Combine์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
ํ๋ฉด ์ ํ์ ๋ํ ๋ก์ง์ ViewController๋ก๋ถํฐ ๋ถ๋ฆฌํ๊ณ ์์กด์ฑ ๊ฐ์ฒด์ ๋ํ ์ฃผ์ ์ ์ธ๋ถ์์ ์ฒ๋ฆฌํ๋๋ก ํ๊ธฐ ์ํด ์ฝ๋๋ค์ดํฐ๋ฅผ ์ ์ฉํ์ต๋๋ค.
ย
ํ๋์ ์ฟผ๋ฆฌ์ ์ ๋ ฌ๊ณผ ํํฐ๋ง ๋ชจ๋ ๊ฐ๋ฅํ์ฌ ๋ณตํฉ์ ์ธ ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ๋์ฉ๋ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์ฝํ ๋ ์ฌ์ฉํ๊ธฐ ์ข์ FireStore ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
ย
์ํฉ
๊ธฐ๋ฅ ๊ตฌํ์ ๋ชจ๋ ๋ง์น๊ณ , ๋ฆฌํฉํ ๋งํ๋ฉฐ ๊ฐ์ ํ๋ ๊ณผ์ ์ค์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ฌ ๋๋ฒ๊น ์ ์๋ํ์๋ค. ์ ๋ง ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ ์จ๊ฐ๋ฉด์ ๋๋ฒ๊น ์ ํด๋ณด์์ง๋ง, ์๋ฌด๋ฆฌ ์ฐพ์๋ด๋ ์ด๋์ ๋์๊ฐ ๋๋ ๊ฑด์ง ์ฐพ์ ์๊ฐ ์์๋ค. ๊ทธ๋์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์์ฌ๋๋ ViewController ๋ด๋ถ์ View ์ค์ , bind ์์ ๋ฑ์ ํ๋์ฉ ๋ค์ ์ถ๊ฐํด๊ฐ๋ฉฐ, ์ด๋ค ๊ณณ์์ ๋์๊ฐ ๋๋์ง.... ๋ ธ๊ฐ๋ค๋ฅผ ์์ํ๊ฒ ๋์๋ค.์ด์
์ด๋ฒ์ ์ ์ฌ์ฉํ์ง ์์๋ UICollectionViewDiffableDataSource๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด์ ๋ ์ด์์ ๋ํ CompositionalLayout์ผ๋ก ๋์ ํ๊ฒ ๋์๋๋ฐ, ๊ตฌํํ๋ ๋์ค ํด๋ก์ ๋ฅผ ๋ฉ์๋๋ก ํ ๋นํด์ฃผ๋ ์์ ์์ ๋์๊ฐ ๋๋ ๊ฒ์ ํ์ธํ๊ฒ ๋์๋ค.ํด๊ฒฐ
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ํด๋ก์ ๋ฅผ ๋ฉ์๋๋ก ๋ฐ๋ก ํ ๋นํด์ฃผ๋ ๊ฒ์ด ์๋๋ผ, ํด๋ก์ ๋ฅผ ํตํด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ์์ ํ์ฌ ๋์๋ฅผ ํด๊ฒฐํ๊ฒ ๋์๋ค. ์ด๋ฐ ๊ณณ์์ ๋์๊ฐ ๋๋ ๊ฒฝํ์ ์ฒ์์ด๋ผ์... ์ฝ์ง์ ๋ง์ด ํ๋ ๊ฒ ๊ฐ์๋ฐ, ๋๋ถ์ ๋ค์๋ถํด ์กฐ์ฌํ ์ ์๊ฒ ๋์๋ค...!!!
์ฝ๋๋ฅผ ์์ ํ ๋ด์ฉ
ย
์ํฉ
๋ค๋น๊ฒ์ด์ ๋ฐ์ back ๋ฒํผ์ ์ปค์คํ ํ๊ณ ์ถ์ด์ ์๋ก์ด ๋ฐ๋ฒํผ ์์ดํ ์ ํ ๋นํด์ฃผ์๋ค. ๊ทธ๋ฌ๊ณ ๋๋๊น ๊ธฐ์กด์ ๊ธฐ๋ณธ์ผ๋ก ์๋ ๊ธฐ๋ฅ์ธ ๋ค๋ก๊ฐ๊ธฐ ์ ์ค์ฒ๊ฐ ๋์ํ์ง ์์๋ค.์ด์
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ๋ฐ๋ฒํผ์ ์๋ก์ด ๋ฐ๋ฒํผ์ผ๋ก ํ ๋น์์ผ์ค ๋ถ๋ถ ๋๋ฌธ์ ๋ค๋ก๊ฐ๊ธฐ ์ ์ค์ฒ๋ ๊ฐ์ด ์ฌ๋ผ์ง ๊ฒ ๊ฐ์๋ค.ํด๊ฒฐ
๊ทธ๋์ ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ฅผ overrideํ์ฌ UIGestureRecognizerDelegate๋ฅผ ์ฑํํ๊ณ , gestureRecognizerShouldBegin ํจ์๋ฅผ ํ์ฉํ์ฌ ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ปค์คํ ํ์ฌ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฒ ๋์๋ค.
ย
PR์ ์ฌ๋ฆฌ๋ ๊ณผ์ ์์ GitGuardian์๊ฒ ์๋์ ๊ฐ์ ๋ฉ์ผ์ ๋ฐ์๋ค.
App ID๋ App Key๋ remote์ ์ฌ๋ฆฌ๋ฉด ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์๋ค. ํ์ง๋ง Facebook์ ๊ฒฝ์ฐ info.plist์ App key๋ฅผ ๋ฑ๋กํด์ผ ์ด์ฉํ ์ ์์๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐฉ๋ฒ์ ์์๋ณด๋ .xcconfig
๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์๊ณ , ํด๋น ํ์ผ์ ํ์ฉํ์ฌ ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ๊ณ App key๋ฅผ remote์์ ๊ฐ์ถ ์ ์์๋ค.
Configuration Set์ ์ค์ ํ๊ณ ...
ํ๊ฒฝ๋ณ์๋ก APP ID ๋ฑ์ ๊ฐ์ถ ๋ชจ์ต.
ย
API ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ ์ํ ์ฝ๋์ ๋ฐ๋ผ ๊ฐ๋ฐ์์๊ฒ๋ ๋ก๊ทธ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ํ๋ค.
์ฌ์ฉ์์ ๊ฒฝ์ฐ๋ ์ฌ์ฉ์๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ์๋ฌ๋ผ๋ฉด ์ค๋ช
์ ๋ฃ์๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ์ ์ ์๋ ์๋ฌ
๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ํด์ฃผ์๋ค.
ย
ํ๋ก์ ํธ ์๊ตฌ์ฌํญ์๋ ํ๋ฉด์ ์์ ๋กญ๊ฒ ๊ตฌ์ฑ ๋ฐ ๋ฐฐ์นํ๋ผ๊ณ ๋์ด์์ด์ ํ๋ฉด๋ค์ ์ง์ ์ค๊ณํด์ผํ์๋ค. ๊ทธ๋์ ํ๋ก์ ํธ ์๊ตฌ์ฌํญ๋ค์ ์ฒดํฌํด์ ๊ตฌํํด์ผํ๋ ๊ธฐ๋ฅ ๋ช ์ธ๋ฅผ ์ ๋ฆฌํ๊ณ , ํ์ฌ ์ฑ๋ค์ ์ฐธ๊ณ ํด๊ฐ๋ฉฐ Figma๋ฅผ ์ฌ์ฉํด์ ์ต๋ํ ํ ์ ์๋ ๋งํผ ์ค๋ ฅ์ ๋ฐํํด์ UI ๋ฐฐ์น๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋ง๋ฌด๋ฆฌํ๋ค.