์ฒญ์๋
์ ์ผ์์ ๋ค์ฑ๋กญ๊ณ ํ๋ถํ๊ฒ,
์ฒญ์๋
ํตํฉ ์ธ์ฆ ์๋น์ค์ ๋ค์ํ ํ๋&ํํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์๋น์ค์
๋๋ค.
๋ด๋น์ | ![]() ๋ฐ์์ |
![]() ์ตํจ์ |
![]() ์ ๋ํ |
---|---|---|---|
github | @kpk0616 | @wonniiii | @pastapeter |
์์
- ๊ณตํต ์ปค์คํ ํญ๋ฐ : UITabBar ์ด์ฉ, BazierPath ๋ก ์ปค์คํ
- Home : Segmented Control ๊ณผ CollectionView ์ด์ฉ
- ์์ธ ์ธํฌ : ์คํฌ๋กค ๋ทฐ
- ์ ์ฅ ๋ทฐ : ์ฝ๋ ์ ๋ทฐ
- ๊ฒ์ ๋ทฐ : PerformBatchUpdate, CollectionView ์ด์ฉ
- ๊ฐ ๋ทฐ ์ด๋ฏธ์ง : ํนํผ์ ์ด์ฉํด ์ด๋ฏธ์ง ์บ์ฑ
ํจ์
- ๋๋ฉํ์ด์ง
โ PageControl๋ก Indicator๋ฅผ ๋ง๋ค์๊ณ Scroll View๋ฅผ ์ด์ฉํด์ ์ด๋ฏธ์ง๋ง ์ฌ๋ผ์ด๋ ๋๋๋ก ๊ตฌํํ์์ต๋๋ค. ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ ์คํ์ผ์ ํ๋ก์ ํธ์์ ๋ง์ด ์ฐ์ด๋ ์คํ์ผ์ด๋ผ์ ๋ฐ๋ก extension์ ๋ง๋ค์ด์ ์ฌ์ฌ์ฉํด์ฃผ์์ต๋๋ค.
-
ํ์๊ฐ์ (๋ค๋ ํด๋ํฐ ์ธ์ฆ ๋ทฐ + ์ฑํฅ ํ๊ทธ ๋ทฐ + ์ ๋ณด ํ์ธ ๋ฐ ๊ด์ฌ์ฌ ํ๊ทธ ๋ทฐ)
โ ์ฑ์ผ ๋จ์์์๋ ๋ค๋ API๋ฅผ ์ด์ฉํ์ง ์๊ณ ๋๋ฏธ๋ฐ์ดํฐ๋ก ๋์๊ฐ๊ฒ ํ์๊ณ , ์ฑํฅ ํ๊ทธ๋ UIImage๋ก ๋ฃ์ด์ ํด๋ฆญ๋๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ณ๊ฒฝ๋๊ฒ ๊ตฌํํ์ต๋๋ค. ์ ๋ณด ํ์ธ ๋ฐ ๊ด์ฌ์ฌ ํ๊ทธ๋ CollectionView๋ฅผ ์ด์ฉํ์ฌ ์ ์ํด์ฃผ์๊ณ , ์ธ๋ฏธ๋ ์นด์นด์ค ์ฌํ ๊ณผ์ ์ฒ๋ผ Index ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ก ๋ง๋ค์ด์ ํด๋ฆญํ ์์์ ๋ฐ๋ผ Index๊ฐ ๋ณ๊ฒฝ๋๊ฒ ํ์์ต๋๋ค.
-
์ ค๋ฆฌ ์์ฑ ๋ทฐ
โ ์ ์ ๊ฐ ์ ํํ ์ฑํฅ๊ณผ ๊ด์ฌ์ฌ๋ฅผ ๋ฐํ์ผ๋ก ์ ค๋ฆฌ๊ฐ ์์ฑ์ด ๋๊ณ , ์๋ฒ์์ ๋ฐ์์จ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์บ๋ฆญํฐ ํ์ ๊ณผ, ์ ค๋ฆฌ ์ด๋ฏธ์ง, ์์ดํ ์ ๋ณ๊ฒฝ๋๊ฒ ํด์ฃผ์์ต๋๋ค. ๋์ ์์ดํ ๋ถ๋ถ์ CollectionView๋ก ๊ตฌํํ์๊ณ , ์บ๋ฆญํฐ ํ์ ์ ํด๋ฆญํ๋ฉด ์ปค์คํ ํ View์ธ BottomSheet์ด ๋์ค๋๋ก ๊ตฌํํ์ต๋๋ค.\
-
๊ฐํธ ๋น๋ฐ๋ฒํธ ์ค์ ๋ทฐ
โ ๋ง์ง๋ง ๋จ๊ณ ํ ์คํธ ๋ฉ์์ง๋ Toast-Swift ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์๊ณ , ๋ฐ์ ๋ฒํธํ์ CollectionView๋ก ๋ง๋ค์์ต๋๋ค. Cell์ด ํด๋ฆญ๋ ๋๋ง๋ค ์งํ ์ด๋ฏธ์ง๊ฐ ๋ฐ๋๋๋ก ์ง์ฃผ์๊ณ , ์ฒซ๋ฒ์งธ๋ก ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ dataBindํ์ฌ ๋ค์ํ๋ฉด์์ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ์ ๊ฐ์ ๋ ํ ๋ทฐ๋ก ๋์ด๊ฐ๋๋ก ๋ง๋ค์ด์ฃผ์์ต๋๋ค.
๋ํ
OCR ์นด๋ฉ๋ผ ๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค. AVFoundation์ ์ฌ์ฉํด์ ์นด๋ฉ๋ผ, preview view๋ฅผ ์ปค์คํ ํ์์ต๋๋ค.
BottomSheetViewController๋ฅผ ๊ตฌํํ์์ผ๋ฉฐ, PresentationStyle์ ์ปค์คํ ํ์ฌ์ ๋ง๋ค์ด์ต๋๋ค.
IDViewController๋ฅผ ๊ตฌํํ๋ฉด์, User์ ๋ง๊ฒ ๋ณํํ๋ ํ๋ก์ฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์, View์ VC๋ฅผ ๋๋ ์ ๊ตฌํํ์์ต๋๋ค.
์์
์๋ฒ์์ ๋ค๋ฅธ ํต์ ์ ๋ค ๋๋๋ฐ ์ ์ฒด์กฐํ ํต์ ์ด ์ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ํฌ์คํธ๋งจ์ ์ด์ฉํด ํ ํฐ๊ฐ์ ๋ฃ๊ณ ํค๋์ Content-Type ๊น์ง ์ ๋ฃ์ด์ ๋ฆฌํ์คํธ๋ฅผ ๋ณด๋์์๋ ์ ์ฒด์กฐํ์์ ๊ณ์ํด์ ํ์์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์๋ฒ์ธก๊ณผ ํฌ์คํธ๋งจ์ ๋๊ฐ์ด ๋์กฐํด์ ๋ณด๋ด๋ด๋ ์ ๋๊ณ , ์ฐจ์ด์ ์ ์ฐพ์ง ๋ชปํ๋ค. ๊ทผ๋ฐ ์๋ฒ์ธก ์ปดํจํฐ์์๋ ๋์ํ๊ณ , ํด๋ผ์ธก ์ปดํจํฐ์์๋ ๋์ํ์ง ์์๋ค. ์ฝ๋์์๋ ์๋ฒ์ ํต์ ์ ์ ๋๋๋ฐ ์ ์ฒด์กฐํ ๋ถ๋ถ์์๋ง ํ์ ์์ ์๋ฌ๊ฐ ๊ณ์ํด์ ๋ฐ์ํ๋ค. ์๊ณ ๋ณด๋ ์๋ฒ ์ธก์์ ํ์๊ฐ์ ์ด ์ด๋ฃจ์ด์ง ํ ์ฑํฅ ์ฒดํฌ ๋ก์ง์ ๊ฑฐ์ณ์ผ์ง๋ง ์ ์ฒด ์กฐํ๊ฐ ์ด๋ฃจ์ด์ง๋๋ก ์ฒ๋ฆฌ๋ฅผ ํด ์ฃผ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด์๋ค. ํฌ์คํธ๋งจ์ ์ด์ฉํด ๋ฐ๊ธ๋ฐ์ ํ ํฐ์ ์ด์ฉํด ์ฑํฅ ์ฒดํฌ API ์ ๋ฆฌํ์คํธ๋ฅผ ๋ ๋ฆฐ ํ, ํด๋น ํ ํฐ์ ์ ์ฉ์ํค๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ค.
ํจ์
๋๋ฉํ์ด์ง๋ฅผ ๊ทธ๋ฅ ViewController๋ฅผ 4๊ฐ ๋ง๋ค์ด์ PageViewController๋ก ViewController์์ฒด๋ฅผ ๋ฐ๋๊ฒ ๋ง๋ค๋ ค๊ณ ํ๋๋ฐ ๋ญ๊ฐ ๋นํจ์จ์ ์ธ ๊ฒ ๊ฐ์์ ์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก ๋ง๋ค ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ฐ ์ด๋ ค์์ด ์์์ต๋๋ค. ๊ทธ๋์ ๋ง์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐพ์๋ด์ PageControl๊ณผ ScollView๋ฅผ ์ด์ฉํ์ฌ ViewController๋ฅผ 1๊ฐ๋ง ๋ง๋ค์ด์ ๊ทธ ์์์ ๋ค ์ฒ๋ฆฌํด์ฃผ์์ต๋๋ค.
๋ํ
iOS๊ธฐ๊ธฐ Camera I/O๊ฐ ๋ ๋, Camera buffer ์ ์กด์ฌํ๋ ํ๋ ์์ ๊ธฐ๋ฐ์ผ๋ก ์๋OCR ๊ธฐ๋ฅ ๊ตฌํ, ํ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ด์ค๋ camerabuffer์ ๊ฐ์ ์ํ๋ ์ฌ์ง ํฌ๊ธฐ๋ก ์๋ฅด๋ ๊ฒ, ์๋OCR ๊ธฐ๋ฅ ๊ตฌํ์ด ์ด๋ ค์ ์ต๋๋ค. ์นด๋ฉ๋ผ ๋ฒํผ์์ ๋ค์ด์ค๋ ํ๋ ์์ ํฌ๊ธฐ์ ํ์ฌ ํด๋ํฐํ๋ฉด์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํ๊ณ , ๋น๋ก๋๋ก ์๋์ต๋๋ค. ์๋ฅธ ๊ฒ์ OCR์ ํ์ฉํด์ ํ์ํ ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค.
๋ํ ์นด๋ฉ๋ผ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ๋์ํ๋๋ฐ, ํด๋น ์นด๋ฉ๋ผ i/o๋์๊ณผ ์ฌ์ง ํ๋ก์ธ์ฑํ๋ ๊ฒ์ ์ค๋ ๋๋ฅผ ๋๋ ์ผํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ง ํ๋ก์ธ์ฑํ๋ ๋์๊ณผ ์นด๋ฉ๋ผ I/O๋ฅผ ๋๋๋ฉด์ ํ๋ก์ธ์ฑํ ๋, ์นด๋ฉ๋ผ I/O์ blockํ์ต๋๋ค. ์ฌ์ง ํ๋ก์ธ์ฑํ๋ ๋ฒํผ๊ฐ ๋ค ์ฐจ๋ฉด ์นด๋ฉ๋ผ ๋ธ๋ญ์ํค๋ ๊ณผ์ ์ DispatchSemaphore์ ์ฌ์ฉํด์ ๋ธ๋ญ์์ผฐ์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์ฌ์ฉ ๋ชฉ์ | Version |
---|---|---|
FloatingPanel | ViewController ๊ฐํธํ | 2.5.5 |
Floaty | UIButton ๊ฐํธํ | master |
Kingfisher | ์ด๋ฏธ์ง ์๋ฒ ํต์ | 7.4.1 |
SnapKit | UI Layout | 5.6.0 |
Then | UI ์ ์ธ | 3.0.0 |
Moya | ์๋ฒ ํต์ | 15.0.3 |
Toast | ํ ์คํธ ์๋ฆผ View ๊ฐํธํ | 5.0.1 |
Google MLKit | OCR ๊ธฐ๋ฅ ๊ตฌํ | 6.25.0 |
- Indentation 2์นธ์ผ๋ก
- ์ต๋ ์ค ๊ธธ์ด 99์ค
- MARK ์ต๋ํ ๋ง์ด ์ฌ์ฉํ๊ธฐ
- get ์ ์ฌ๋งํ๋ฉด ๋ถ์ด์ง ์๊ธฐ
- ํด๋๋ง์ ๋ทฐ ๋ณ๋ก ๋๋๊ธฐ
- Constant๋ ํด๋น ๋ทฐ ๋ด์์ ๋ง๋ค์ด ์ฌ์ฉํ๊ธฐ
- ์๋ฌ๋ ๋งจ ์์์ ์ฒ๋ฆฌํด์ฃผ๊ธฐ
- else ๊ตฌ๋ฌธ ์ต๋ํ ์ง์ํ๊ธฐ
๐ชต Branch ์ ๋ต
main
ย : ๊ฐ๋ฐ์ด ์๋ฃ๋ ์ฐ์ถ๋ฌผ์ด ์ ์ฅ๋ ๊ณต๊ฐdevelop
ย : feature ๋ธ๋์น์์ ๊ตฌํ๋ ๊ธฐ๋ฅ๋ค์ด merge๋ ๋ธ๋์นfeature
ย : ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น, ์ด์๋ณ/์์ ๋ณ๋ก ๋ธ๋์น๋ฅผ ์์ฑํ์ฌ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋คrelease
ย : ๋ฆด๋ฆฌ์ฆ๋ฅผ ์ค๋นํ๋ ๋ธ๋์น, ๋ฆด๋ฆฌ์ฆ ์ง์ QA ๊ธฐ๊ฐ์ ์ฌ์ฉํ๋คhotfix
ย : ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ธ๋์น
๐ ์์ฑ๋ฐฉ์
- ์ญํ /#(์ด์๋ฒํธ)
๐ฌ Commit Message
- [Hotfix] : issue๋, QA์์ ๊ธํ ๋ฒ๊ทธ ์์ ์ ์ฌ์ฉ
- [Fix] : ๋ฒ๊ทธ, ์ค๋ฅ ํด๊ฒฐ
- [Add] : Feat ์ด์ธ์ ๋ถ์์ ์ธ ์ฝ๋ ์ถ๊ฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ, ์๋ก์ด ํ์ผ ์์ฑ ์
- [Style] : ์ฝ๋ ํฌ๋งทํ , ์ธ๋ฏธ์ฝ๋ก ๋๋ฝ, ์ฝ๋ ๋ณ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ
- [Feat] : ์๋ก์ด ๊ธฐ๋ฅ ๊ตฌํ
- [Del] : ์ธ๋ชจ์๋ ์ฝ๋ ์ญ์
- [Docs] : README๋ WIKI ๋ฑ์ ๋ฌธ์ ๊ฐ์
- [Mod] : storyboard ํ์ผ๋ง ์์ ํ ๊ฒฝ์ฐ
- [Chore] : ์ฝ๋ ์์ , ๋ด๋ถ ํ์ผ ์์ , ๋น๋ ์ ๋ฌด ์์ , ํจํค์ง ๋งค๋์ ์์
- [Correct] : ์ฃผ๋ก ๋ฌธ๋ฒ์ ์ค๋ฅ๋ ํ์ ์ ๋ณ๊ฒฝ, ์ด๋ฆ ๋ณ๊ฒฝ ๋ฑ์ ์ฌ์ฉํฉ๋๋ค.
- [Move] : ํ๋ก์ ํธ ๋ด ํ์ผ์ด๋ ์ฝ๋์ ์ด๋
- [Rename] : ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ์ด ์์ ๋ ์ฌ์ฉํฉ๋๋ค.
- [Improve] : ํฅ์์ด ์์ ๋ ์ฌ์ฉํฉ๋๋ค.
- [Refactor] : ์ ๋ฉด ์์ ์ด ์์ ๋ ์ฌ์ฉํฉ๋๋ค
- [Init] : Initial Commit
โโโ Keyneez
โโโ Keyneez
โย ย โโโ Application
โย ย โย ย โโโ Assets.xcassets
โย ย โย ย โย ย โโโ AccentColor.colorset
โย ย โย ย โย ย โโโ AppIcon.appiconset
โย ย โย ย โโโ Base.lproj
โย ย โโโ Auth
โย ย โย ย โโโ SignIn
โย ย โย ย โโโ SignUp
โย ย โโโ Global
โย ย โย ย โโโ Color
โย ย โย ย โโโ Font
โย ย โย ย โโโ NetworkLayer
โย ย โย ย โโโ Views
โย ย โโโ Tab
โย ย โโโ Home
โย ย โโโ ID
โย ย โโโ Like
โย ย โโโ MyPage
โโโ Keyneez.xcodeproj
โย ย โโโ project.xcworkspace
โย ย โย ย โโโ xcshareddata
โย ย โย ย โย ย โโโ swiftpm
โย ย โย ย โย ย โโโ configuration
โย ย โย ย โโโ xcuserdata
โย ย โย ย โโโ jungpeter.xcuserdatad
โย ย โโโ xcuserdata
โย ย โโโ jungpeter.xcuserdatad
โย ย โโโ xcschemes
โโโ KeyneezTests
โโโ KeyneezUITests