/PostingWhichisHelpfulforiOS

Repository of iOS Posting which is helpful for your developement ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป

iOS๊ฐœ๋ฐœ์— ๋„์›€์ด ๋˜๋Š” ํฌ์ŠคํŒ… ๋ชจ์Œ

๋” ์ข‹์€ ์•ฑ์„ ๋งŒ๋“ค์–ด ๊ฐ€๊ธฐ ์œ„ํ•œ ์Šคํ„ฐ๋””๋ฅผ ํ•˜๋Š” ๋„์ค‘ ๊ตญ๋‚ด์™ธ ๊พธ์ค€ํžˆ ๋ณด๋Š” ๊ธ€๋“ค์„ ๋ฐ•-์ œ-ํ•ฉ๋‹ˆ๋‹ค๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ ํ•™์Šต๋ชฉ๋ก

UI

AutoLayout

  • ์ด๋™๊ฑด๋‹˜ ๋ธ”๋กœ๊ทธ
  • Cell์˜ ๋†’์ด๋ฅผ ๋™์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๊ณผ ์ฐจ์ด์ ์ด ์„œ์ˆ ๋˜์–ด ์žˆ์Œ
  • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒํ™ฉ์—์„œ์˜ ํ…Œ์ด๋ธ”๋ทฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œ, ํ•œ๊ตญ์–ด ๋ธ”๋กœ๊ทธ
  • ํ–‰ ์‚ฝ์ž…, ํ–‰ ์‚ญ์ œ, ํ–‰ ์ˆ˜์ •
  • ์ œ๊ณตํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋กœ ํ–‰ ์ด๋™ํ•˜๊ธฐ
  • ์ปค์Šคํ…€ํ•˜์—ฌ ํ–‰ ์ด๋™ ๋™์ž‘ ๊ตฌํ˜„ํ•˜๊ธฐ
  • UIKit์—์„œ SwiftUI์˜ Preview ์‚ฌ์šฉ๋ฐฉ๋ฒ•
  • SwiftUI ์‚ฌ์šฉ ์žฅ์  ์ค‘์— ํ•˜๋‚˜๋กœ view์˜ Hot reload ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜๋กœ ๊ผฝ๋Š”๋ฐ ์ด๋ฅผ UIKit์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Raywenderlich ์˜ˆ์ œ
  • UICollectionView Drag and Drop์„ ๊ตฌํ˜„ํ•˜๋Š” ์˜ˆ์ œ
  • ๋™์ผ CollectionView, ๋‹ค๋ฅธ CollectionView, ๋‹ค๋ฅธ ์•ฑ ๋ชจ๋‘๊ฐ€ ๋Œ€์‘ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • IndexPath๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋Š๊ธฐ ๋•Œ๋ฌธ์— ViewModel ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ ์ถ”๊ฐ€ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•˜๋‹ค.

Clean Arthitecture for iOS

  • ๋นŒ๋”ํŒจํ„ด์„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•จ์ˆ˜ํ˜•์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์†Œ๊ฐœ๋ฉ๋‹ˆ๋‹ค.
  • ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋™์ผํ•œ ํ˜•์‹์œผ๋กœ ์ง๊ด€์ ์œผ๋กœ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

MVVM

  • MVVM Templete Repository
  • Domain, Data, Presentation Layer์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ทธ๋ฆผ ๋ฐ ํ”„๋กœ์ ํŠธ ์ œ๊ณต
  • MVVM + RxSwift (including Domain Layer, Data Layer)
  • MVVM์„ Presenter Layer ~ Data Layer๋ฅผ RxSwift๋ฅผ ํ™œ์šฉํ•ด ์“ฐ๋Š” ์˜ˆ์ œ๋ฅผ ์ž˜ ๊ตฌ์„ฑํ•˜์˜€์Œ

MVI

  • ์ „์ˆ˜์—ด๋‹˜์˜ ReactorKit์„ ํ™œ์šฉํ•œ ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ
  • ReactorKit์„ ์ด์šฉํ•œ Clean Architecture์„ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์€์ง€ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Realm ๋ฐ Local Data Repository ์ƒ์„ฑ๋ฐฉ๋ฒ•

RIBs

  • ์šฐ๋ฒ„์—์„œ ๋งŒ๋“  ์•„ํ‚คํ…์ณ์ธ ribs official tutorial 1-4
  • RIBs ์Šคํ„ฐ๋””๋Š” ํŠœํ† ๋ฆฌ์–ผ์ด ์ž์„ธํ•ด์„œ ์ •๋…ํ•˜๊ณ  ์‹ค์Šตํ•œ๋‹ค๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ์ง€๋งŒ ์ถฉ๋ถ„ํ•˜๋‹ค.
  • ์œ ๋ฃŒ๊ฐ•์˜, RIBs ์•„ํ‚คํ…์ณ๋ฅผ ์ด์šฉํ•œ ์‹ค์Šต์„ ํ•˜๊ณ  ํ™•์žฅ์„ฑ ๋†’์€ ์•ฑ ์•„ํ‚คํ…์ณ ๊ตฌ์ถ•์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ•์˜์ด๋‹ค.
  • ํ˜ผ์ž ํŠœํ† ๋ฆฌ์–ผ์„ ๋ณด๊ณ  ๊ณต๋ถ€ํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์„ ๋งŽ์ด ๋Š๋‚€๋‹ค๋ฉด, ์ด ์œ ๋ฃŒ๊ฐ•์˜๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋”ฐ๋ผํ•˜๋ฉด ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์ค„์–ด๋“ค๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.

RxSwift

  • Networking ํ•  ๋•Œ RxSwift๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ViewModel & ViewController์—์„œ๋งŒ RxSwift๋ฅผ ์ ์šฉํ•  ๊ฒƒ์ธ๊ฐ€?
  • Networking Layer๋Ÿฌ ๋ถ€ํ„ฐ RxSwift๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€๊ฐ€? ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ•  ๋•Œ! ์ฐธ๊ณ !
  • ํž๋งํŽ˜์ดํผ ๋ธ”๋กœ๊ทธ
  • MVVM + RxSwift๋ฅผ ์ ์šฉํ•œ ๊ฐ„๋‹จํ•œ ์•ฑ ๊ตฌํ˜„
  • Input, Output์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ช…์‹œํ•˜์—ฌ ๊ตฌ๋ถ„
  • Data ์ตœ์ ํ™”๋ฅผ Transform ๋กœ์ง์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„
  • Test Code ์ž‘์„ฑ, RxNimple ํ™œ์šฉ
  • VieModel๋ฟ ์•„๋‹ˆ๋ผ Network Layer๋„ 'Moya/RxSwift'๋ฅผ ํ™œ์šฉํ•ญ ๊ฐœ๋ฐœํ•จ
  • RxCocoa ๋ฅผ Extention์œผ๋กœ animation์„ ์ฃผ๋Š” ๋ฐฉ๋ฒ•
  • RxAnimated ์ถ”๊ฐ€
  • UIView.animate๋ฅผ RxSwift์— ๋„ฃ์ง€ ์•Š๊ณ  ๋ฐ˜์‘ํ˜•์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ œ์‹œ
  • Observable์„ Createํ•˜๊ณ  ์ŠคํŠธ๋ฆผ ๋‹จ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ถ™์—ฌ์คŒ์œผ๋กœ์จ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ณต์žกํ•˜ Animation๋“ค์˜ ํ†ตํ•ฉ์ด ํ•„์š”ํ•  ๋•Œ์— ์ฐธ๊ณ ํ•˜๊ธฐ๊ฐ€ ์ข‹์Œ
  • RxFlow Demo App
  • ๊ฝค ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜์—ฌ์„œ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋Œ€ํ•œ ํ™œ์šฉ์„ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ˜„์žฌ Demo์•ฑ ๋ณด๋‹ค ์‰ฝ๊ณ  ๋””ํ…Œ์ผํ•˜๊ฒŒ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” RxFlow ์˜ˆ์ œ๋Š” ์—†๋‹ค๊ณ  ํŒ๋‹จ๋œ๋‹ค.

Test Code

  • ํ•œ๊ตญ์–ด ํฌ์ŠคํŒ…
  • Unit Test์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์„ค๋ช…์ด ๊ตญ๋‚ด ์ž๋ฃŒ๋Š” ๋‚ด์šฉ์„ ๋งŽ์ด ์ƒ๋žตํ•˜๊ณ  ๋ฐฉ๋ฒ•๋งŒ ์ ์€ ๊ฒƒ์ด ๋งŽ์€๋ฐ, ์ธ๊ณผ์ ์œผ๋กœ ๊ทผ๊ฑฐ๋ฅผ ๋‘๊ณ  ์ž˜ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Œ
  • Raywenderlich์˜ Unit Test ์˜ˆ์ œ
  • given, when, then์˜ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ด
  • Fake Object ๊ตฌํ˜„ (Mock, Stub)
  • ํผํฌ๋จผ์Šค ํ…Œ์ŠคํŠธ ๊ตฌํ˜„
  • ๋„คํŠธ์›Œํฌ ํ…Œ์ŠคํŠธ
  • ์žฅ์ : ํ”„๋กœ์ ํŠธ ๋‹จ์œ„๋กœ ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”์ง€ ์ฐธ๊ณ ๊ฐ€ ๊ฐ€๋Šฅ
  • Deeplink ๋กœ์ง์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ธฐ์ˆ 
  • Local Server์™€ ์‚ฌํŒŒ๋ฆฌ๋ฅผ
  • Q. ๋‹จ์ˆœํžˆ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋„˜์–ด์„œ์„œ ์–ด๋–ค ๋ฒ”์œ„๊นŒ์ง€ ์šฐ์„ ์ˆœ์œ„๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๊ฒƒ์ธ๊ฐ€?
  • Q. ViewModel์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ์˜์กด๋˜์–ด ์žˆ๋Š” Service, Repository๋ฅผ ๋‹ค ํ…Œ์ŠคํŠธํ•ด์•ผํ•˜๋Š”๊ฐ€?
  • Q. Mock, Stub์„ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์–ด๋–ค์‹์œผ๋กœ ๊ตฌ์„ฑํ• ๊นŒ?
  • ์œ„ ์งˆ๋ฌธ๋“ค์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜์˜ ์ข‹์€ ์˜ˆ์ œ๊ฐ€ ๋˜์—ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด TestCode๋ผ ์Šคํ„ฐ๋””ํ•˜๋Š”๋ฐ ์žˆ์–ด ๋‹ค์–‘ํ•œ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•ด์•ผ ํ•œ๋‹ค.
  • ํ”„๋กœ์ ํŠธ์—์„œ RxTest, RxBlocking์„ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€ ํ•™์Šต
  • ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ RxTest, RxBlocking ์ค‘ ์–ด๋Š๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•œ์ง€ ํ•™์Šต
  • ํ”„๋กœ์ ํŠธ Test๋ฒˆ๋“ค ์ฒ˜์Œ Addํ•  ๋•Œ ์—‰๋šฑํ•˜๊ฒŒ ๋งŽ์ด ํ•ด๋งค๋Š”๋ฐ ์ด๋ฅผ ๋ง๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•ด์ค€ ํฌ์ŠคํŒ…

Managing enterprise-app

  • ๋ฏผ์†Œ๋„ค๋‹˜ ํฌ์ŠคํŒ…
  • ๊ธฐ์—…๊ทœ๋ชจ ์•ฑ์˜ Layer ๋‚˜๋ˆ„๊ธฐ
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ์ œ๊ฑฐ, ๋ถˆํ•„์š”ํ•œ ํ”„๋กœํ† ์ฝœ ์ œ๊ฑฐ, ๋นŒ๋“œ ํƒ€์ž„ ๊ฐ์†Œ
  • ๋ฏผ์†Œ๋„ค๋‹˜ ํฌ์ŠคํŒ…
  • Framework๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“ˆํ™”๋ฅผ ์ž˜ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ธ์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•œ ํฌ์ŠคํŒ…
  • Library Link, Dependency์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ์œ„ํ•ด ๊ณต๋ถ€๊ฐ€ ํ•„์š”

LLDB

  • ๊ฐ€์€๋‹˜, Let us go ๋ฐœํ‘œ์ž๋ฃŒ
  • ๋นŒ๋“œ ํƒ€์ž„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋นŒ๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋””๋ฒ„๊น…
  • LLDB์™€ ์นœํ•ด์ง€๊ธฐ
  • ๋ฏผ์†Œ๋„ค๋‹˜ ํฌ์ŠคํŒ…
  • ์œ„ ๊ฐ€์€๋‹˜์˜ ๋ฐœํ‘œ์ž๋ฃŒ๊ฐ€ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์‚ฌ์šฉ๋ฒ•์„ ๋ฐœํ‘œ๋ฅผ ํ–ˆ์—ˆ๋‹ค๋ฉด, ๋ฏผ์†Œ๋„ค๋‹˜์€ LLDB ๋ช…๋ น์–ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ธฐ์ˆ ํ•จ
  • ์‹ค์ œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด์„œ ์„œ์ˆ ์ด ๋˜์–ด ๋”ฐ๋ผํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ

Dependency

  • ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ํ•„์š” ์ด์œ ์— ๋Œ€ํ•ด ํ•œ๊ตญ์–ด๋กœ ๊ฐ€์žฅ ์ž˜ ์„ค๋ช…๋œ ๊ธ€
  • ์˜์กด์„ฑ ์—ญ์ „์ด ํ•„์š”ํ•œ ์ด์œ , ๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๋ฒ•์„ ๊ฐ€์žฅ ์ž˜ ์ดํ•ดํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ๊ฐ€ ๋œ ๊ธ€์ž„.
  • ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ํ•  ๋•Œ์— Swinject๋ฅผ ์“ฐ๋Š” ์ด์œ ๊ฐ€ ์„ค๋ช…์ด ๋Œ
  • ์ˆœํ™˜ ์ข…์†์„ฑ์˜ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ

CI / CD

  • Xcode + Jenkins ์„ค์ •์„ ํ†ตํ•ด ๊ฐ ์„œ๋ฒ„๋ณ„๋กœ ์ž๋™๋ฐฐํฌ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๊ฐ ์„œ๋ฒ„ ๋ฐ ์กฐ๊ฑด ๋ณ„๋กœ ๋ฐฐํฌ๊ฐ€๋Šฅ ํ•˜๋„๋ก ํ™˜๊ฒฝ์„ค์ • ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ผ์ธ ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
  • Bazel + XcodeGen์„ ํ™œ์šฉํ•œ ๋นŒ๋“œ ์†๋„ ๊ฐœ์„  ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ์ด์Šˆ ๊ฐœ์„ 

Fastlane

  • Fastlane ๊ณต์‹๋ฌธ์„œ
  • ํ•œ๊ตญ์–ด ๋ฆฌ์†Œ์Šค
  • ๊ฐ๊ฐ์˜ lane๋“ค์˜ ์—ญํ• ๊ณผ ์ด๋ฅผ ์‘์šฉํ•˜์—ฌ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์ ์–ด๋†“์•˜์Œ
  • ์ด๋ฅผ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ ํ•˜๋‚˜๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ์„œ ๋‹ค๋ฅธ ํˆด๊ณผ ์—ฐ๋™ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด์•ผํ•œ๋‹ค.
  • ํ•ด์™ธ ์œ ํŠœ๋ฒ„, ์ฒ˜์Œํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ์ž˜ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ๊ณ„๋ณ„๋กœ ๋™์˜์ƒ์œผ๋กœ ์„ค๋ช…ํ•ด์คŒ
  • 2020.04.27 ๋‚ด ์ƒ์ผ์— ์˜ฌ๋ผ์˜จ ์˜์ƒ..

GitHub Action

  • Zedd๋‹˜ ๋ธ”๋กœ๊ทธ
  • Github Action์—์„œ ๋ฐฐํฌ๋ฅผ ํ•  ๋•Œ์— ๋นŒ๋“œ๊ฐ€ ์„ ํ–‰๋˜์–ด์•ผ ํ•จ.
  • ๋นŒ๋“œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ Github Server์— ๊ฐœ๋ฐœ์ž ์ธ์ฆ์„œ๊ฐ€ ์žˆ์–ด์•ผํ•˜๋Š”๋ฐ, ์•”ํ˜ธํ™”์—์„œ ์˜ฌ๋ฆฌ๊ณ  Action์— ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์„œ์ˆ ํ•จ

SwiftUI, and Combine

  • SwiftUI+Combine์œผ๋กœ MVVM ์•„ํ‚คํ…์ณ ๊ตฌ์„ฑ
  • ์ผ๋ณธ ๋ถ„์ด ๋งŒ๋“œ์‹  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ์Šคํƒ€๊ฐ€ 350๊ฐœ ๋„˜์Œ
  • UI ๋ฐ Unit Test ๋˜ํ•œ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • ํด๋ฆฐ์•„ํ‚คํ…์ณ๋ฅผ SwiftUI์—์„œ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ์ง€์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰์ด ์ž์ฃผ๋˜๋Š” ์œ„๊ธ€์—์„œ "๋ผ์šฐํŒ…์€ SwiftUI์—์„œ ์ถ”์ถœํ•˜๊ธฐ ํž˜๋“ค๋‹ค.", "๊ธฐ์กด ํด๋ฆฐ์•„ํ‚คํ…์ณ์—์„œ์˜ ๋ผ์šฐํŒ…, ๋˜๋Š” RIBs๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค."๋Š” ์ฃผ์žฅ์— ๋Œ€ํ•ด์„œ ๋™์˜ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•„.. ์ฐพ์•„๋ณด๋Š” ๊ธ€.
  • SwuftUI์—์„œ Router๋ฅผ ๋งŒ๋“  ์˜ˆ์‹œ

Network

  • Moya Library์— ๋Œ€ํ•œ ์ดํ•ด
  • Alamofire์™€์˜ ๊ด€๊ณ„
  • ์‚ฌ์šฉ๋ฐฉ๋ฒ• ๋ฐ ์žฅ์ 
  • Moya+RxSwift Service Layer์—์„œ ๊ฐœ์ธ์ ์œผ๋กœ ๊น”๋”ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•œ ์˜ˆ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•จ
  • Network Error, Mapping Error Handling์„ ํ•œ ์ŠคํŠธ๋ฆผ ๋‚ด์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ
  • JWT Token Refresh ๋˜ํ•œ Retry๋กœ ์›ํ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„์ง€ ์‹œ๋„ํ•ด๋ณด๊ณ  ์‹ถ์€ ์˜ˆ์ œ

Memory Management

  • ๋ฉ”๋ชจ๋ฆฌ ๋œฏ์–ด๋ณด๋Š” ๋ช‡๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์†Œ๊ฐœ, ์ฑ„์™„๋‹˜ ๋ธ”๋กœ๊ทธ
  • ์„ค๋ช…์ด ๋””ํ…Œ์ผํ•จ, ํ•ด๋‹น ๊ธ€์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ์กฐํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ „๋žต์„ ์งค ์˜ˆ์ •
  • Heap, Stack์˜ Swift์—์„œ์˜ ์šด์˜ ๋ฐฉ๋ฒ•
  • Value Type, Reference Type
  • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ SIL๊ณผ Xcode Build Level๋ถ€ํ„ฐ ์ดํ•ดํ•˜์ž
  • ๋‘ ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ฐ•ํ•œ ์˜์กด์„ฑ ๊ณ ๋ฆฌ๋ฅผ ๋Š๊ธฐ ์œ„ํ•ด์„œ ์˜์กด์„ฑ์„ ์—ญ์ „ํ•˜๋Š” ๋ฐฉ์‹
  • ๋ ˆ์ธ ์Šค์œ„ํ”„ํŠธ ๋‰ด์Šค๋ ˆํ„ฐ 8ํ˜ธ ์†Œ๊ฐœ ํ•ด์™ธ๊ธ€
  • ์˜์กด์„ฑ ์ œ๊ฑฐ๋ฅผ ๋งค๋‹ˆ์ง•ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์Šคํƒ ๋‹ค๋“œ๊ฐ€ ์—†๋Š”๋ฐ, ํ•œ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณต๋ถ€ํ•˜๋ฉด ์ข‹์„๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ
  • WKWebView ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฃผ์š” ์›์ธ๊ณผ ํ•ด๊ฒฐ์ฑ…
  • ๊ผญ WebView์—์„œ์˜ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋”๋ผ๋„ 'add()' ํ•จ์ˆ˜๊ฐ€ strong ์ผ ๋•Œ์—, ํŠธ๋žจํด๋ฆฐ ํŒจํ„ด์„ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํƒ€์–ธ์–ด์˜ ๊ฐˆ๋น„์ง€์ฝœ๋ ‰์…˜๊ณผ Swift์˜ ARC๋ฅผ ๋น„๊ตํ•œ ๊ธ€
  • ์Šค์œ„ํ”„ํŠธ์˜ ์•ˆ์ •์„ฑ์— ๋Œ€ํ•ด ์†Œ๊ฐœ
  • Swift์—์„œ pointer ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์„œ์ˆ  ๋ฐ ์‚ฌ์šฉ ์˜ˆ์ œ ๊ณต์œ 
  • Swift ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„๊ณผ Type์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋‹ค๋ณด๋ฉด ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜์— ํƒ€์ž…๋“ค์ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์— ์ €์žฅ๋˜๋Š”์ง€ ์˜๋ฌธ์ด ๋“ค ๋•Œ๊ฐ€ ์žˆ๋‹ค.
  • ์ด์— ๊ด€ํ•œ ๋ถ€๋ถ„๋“ค์„ ๊ฐœ๊ด„์ ์œผ๋กœ๋‚˜๋งˆ ์„œ์ˆ ์ด ๋˜์–ด์žˆ๋Š” ๊ธ€

CPU Processing

  • AppLifeCycle์„ ๊ตฌ์กฐ์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ
  • mainํ•จ์ˆ˜, applicatinMainํ•จ์ˆ˜, UIApplication, UIApplicationDelegate์— ๋Œ€ํ•œ ์ •์˜
  • MainRunLoop์˜ ๋™์ž‘ ๊ณผ์ •์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ

Compilier

  • Swift Intermediate Language GitHub Swift Documentation.
  • ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
  • Swift Lintermediate Language ์— ๋Œ€ํ•ด์„œ ๋Œ€๋žต์ ์œผ๋กœ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ํฌ์ŠคํŒ…
  • ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
  • Swift ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋“ค์„ SIL๋กœ ๋นŒ๋“œํ•ด๋ณด๋Š” ์˜ˆ์ œ

ETC

Realm

  • Concurrency ๊ด€๋ จํ•ด์„œ Realm์€ ์ด์Šˆ๊ฐ€ ๋งŽ์€๋ฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ์ •๋ฆฌํ•ด๋†“์€ ํฌ์ŠคํŒ…
  • ์ด ์™ธ์—๋„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฐ€์ด๋“œ๋ผ์ธ ๋˜ํ•œ ์„œ์ˆ ๋˜์–ด ์žˆ์Œ

Opensource Developement

  • ์˜คํ”ˆ์†Œ์Šค ๋ฐฐํฌ์— ๊ดธํ•ด ํ•œ๊ตญ์–ด๋กœ ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด๋†“์€ ๋ธ”๋กœ๊ทธ.
  • CocoaPod

Accessability

  • VoiceOver ๊ธฐ๋Šฅ์˜ ์ œ์Šค์ณ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ช…์‹œํ•ด๋†“์€ ์• ํ”Œ ๊ณต์‹ ๋ฌธ์„œ
  • ์ฒ˜์Œ VoiceOver๋ฅผ ์“ฐ๋Š” ์ƒํ™ฉ์—์„œ ์ต์ˆ™ํ•˜์ง€ ์•Š์€๋ฐ, ๊ฐ ์ œ์Šค์ณ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ •์˜๋˜์–ด ์žˆ์Œ.