/Keyneez-iOS

๐Ÿ‘ ๋„์›๊ฒฐ์˜ ๐Ÿถ (์ •๋„ํ˜„์˜ ๋„. ์ตœํšจ์›์˜ ์›. ๋ฐ•์˜์„œ์˜ ์˜.)

Primary LanguageSwift

Keyneez-iOS

๐Ÿ’™ ํ‚ค๋‹ˆ์ฆˆ(Keyneez) ์†Œ๊ฐœ

์ฒญ์†Œ๋…„์˜ ์ผ์ƒ์„ ๋‹ค์ฑ„๋กญ๊ณ  ํ’๋ถ€ํ•˜๊ฒŒ,
์ฒญ์†Œ๋…„ ํ†ตํ•ฉ ์ธ์ฆ ์„œ๋น„์Šค์™€ ๋‹ค์–‘ํ•œ ํ™œ๋™&ํ˜œํƒ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

A2 ํŒ๋„ฌ 1@2x



๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿง‘โ€๐Ÿ’ป ์ฐธ์—ฌ ๊ตฌ์„ฑ์›


๋‹ด๋‹น์ž

๋ฐ•์˜์„œ


์ตœํšจ์›


์ •๋„ํ˜„
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 ๊ตฌ๋ฌธ ์ตœ๋Œ€ํ•œ ์ง€์–‘ํ•˜๊ธฐ


๐ŸŒŠ Git Flow ์ „๋žต

๐Ÿชต 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


๐Ÿ—‚ ํ”„๋กœ์ ํŠธ ํด๋”๋ง Convention

โ””โ”€โ”€ 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