Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

πŸ‘ λ„μ›κ²°μ˜ 🍢 (μ •λ„ν˜„μ˜ 도. μ΅œνš¨μ›μ˜ 원. λ°•μ˜μ„œμ˜ 의.)

Notifications You must be signed in to change notification settings

Keyneez/Keyneez-iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

41 Commits

Repository files navigation

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
 

About

πŸ‘ λ„μ›κ²°μ˜ 🍢 (μ •λ„ν˜„μ˜ 도. μ΅œνš¨μ›μ˜ 원. λ°•μ˜μ„œμ˜ 의.)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /