๋ ์ข์ ์ฑ์ ๋ง๋ค์ด ๊ฐ๊ธฐ ์ํ ์คํฐ๋๋ฅผ ํ๋ ๋์ค ๊ตญ๋ด์ธ ๊พธ์คํ ๋ณด๋ ๊ธ๋ค์ ๋ฐ-์ -ํฉ๋๋ค๐ฉ๐ปโ๐ป
์ฃผ๋์ด ๊ฐ๋ฐ์์ ํ์ต๋ชฉ๋ก
- ์ด๋๊ฑด๋ ๋ธ๋ก๊ทธ
- Cell์ ๋์ด๋ฅผ ๋์ ์ผ๋ก ์ง์ ํ๋ ๊ฒ์ ๋ํ ์ฌ๋ฌ ๋ฐฉ๋ฒ๊ณผ ์ฐจ์ด์ ์ด ์์ ๋์ด ์์
- ์ฌ๋ฌ๊ฐ์ง ์ํฉ์์์ ํ ์ด๋ธ๋ทฐ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ์, ํ๊ตญ์ด ๋ธ๋ก๊ทธ
- ํ ์ฝ์ , ํ ์ญ์ , ํ ์์
- ์ ๊ณตํด์ฃผ๋ ํจ์๋ก ํ ์ด๋ํ๊ธฐ
- ์ปค์คํ ํ์ฌ ํ ์ด๋ ๋์ ๊ตฌํํ๊ธฐ
- UIKit์์ SwiftUI์ Preview ์ฌ์ฉ๋ฐฉ๋ฒ
- SwiftUI ์ฌ์ฉ ์ฅ์ ์ค์ ํ๋๋ก view์ Hot reload ๊ธฐ๋ฅ์ ํ๋๋ก ๊ผฝ๋๋ฐ ์ด๋ฅผ UIKit์์๋ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๋ฐฉ๋ฒ
- Raywenderlich ์์
- UICollectionView Drag and Drop์ ๊ตฌํํ๋ ์์
- ๋์ผ CollectionView, ๋ค๋ฅธ CollectionView, ๋ค๋ฅธ ์ฑ ๋ชจ๋๊ฐ ๋์ ๊ฐ๋ฅํ๋ค.
- IndexPath๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๊ธฐ ๋๋ฌธ์ ViewModel ๊ธฐ์ค์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ๊ฒฝ์ฐ์ ๋ํด์ ์ถ๊ฐ ๊ณ ๋ฏผ์ด ํ์ํ๋ค.
- ๋น๋ํจํด์ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์ง๋ง, ํจ์ํ์ผ๋ก ๊ตฌํํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ฐ๋ฉ๋๋ค.
- ํ๋ผ๋ฏธํฐ๋ฅผ ๋์ผํ ํ์์ผ๋ก ์ง๊ด์ ์ผ๋ก ๊ฐ์ ธ๊ฐ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
- MVVM Templete Repository
- Domain, Data, Presentation Layer์ ๋ํ ์์ธํ ๊ทธ๋ฆผ ๋ฐ ํ๋ก์ ํธ ์ ๊ณต
- MVVM + RxSwift (including Domain Layer, Data Layer)
- MVVM์ Presenter Layer ~ Data Layer๋ฅผ RxSwift๋ฅผ ํ์ฉํด ์ฐ๋ ์์ ๋ฅผ ์ ๊ตฌ์ฑํ์์
- ์ ์์ด๋์ ReactorKit์ ํ์ฉํ ์์ ํ๋ก์ ํธ
- ReactorKit์ ์ด์ฉํ Clean Architecture์ ์ด๋ป๊ฒ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ์ข์์ง ์ฐธ๊ณ ํ ์ ์๋ค.
- Realm ๋ฐ Local Data Repository ์์ฑ๋ฐฉ๋ฒ
- ์ฐ๋ฒ์์ ๋ง๋ ์ํคํ ์ณ์ธ ribs official tutorial 1-4
- RIBs ์คํฐ๋๋ ํํ ๋ฆฌ์ผ์ด ์์ธํด์ ์ ๋ ํ๊ณ ์ค์ตํ๋ค๋ฉด ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ์ง๋ง ์ถฉ๋ถํ๋ค.
- ์ ๋ฃ๊ฐ์, RIBs ์ํคํ ์ณ๋ฅผ ์ด์ฉํ ์ค์ต์ ํ๊ณ ํ์ฅ์ฑ ๋์ ์ฑ ์ํคํ ์ณ ๊ตฌ์ถ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ์์ด๋ค.
- ํผ์ ํํ ๋ฆฌ์ผ์ ๋ณด๊ณ ๊ณต๋ถํ๋๋ฐ ์ด๋ ค์์ ๋ง์ด ๋๋๋ค๋ฉด, ์ด ์ ๋ฃ๊ฐ์๋ฅผ ํ๋ํ๋ ๋ฐ๋ผํ๋ฉด ๋ฌ๋์ปค๋ธ๊ฐ ์ค์ด๋ค๊ฒ์ด๋ผ ์๊ฐํ๋ค.
- 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 ์์ ๋ ์๋ค๊ณ ํ๋จ๋๋ค.
- ํ๊ตญ์ด ํฌ์คํ
- 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ํ ๋ ์๋ฑํ๊ฒ ๋ง์ด ํด๋งค๋๋ฐ ์ด๋ฅผ ๋ง๋ํ๊ฒ ํด๊ฒฐํด์ค ํฌ์คํ
- ๋ฏผ์๋ค๋ ํฌ์คํ
- ๊ธฐ์ ๊ท๋ชจ ์ฑ์ Layer ๋๋๊ธฐ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ์ ๊ฑฐ, ๋ถํ์ํ ํ๋กํ ์ฝ ์ ๊ฑฐ, ๋น๋ ํ์ ๊ฐ์
Framework Part 2 : ํ๋ก์ ํธ, ์๋ธ ํ๋ก์ ํธ, Dependencies, ๊ทธ๋ฆฌ๊ณ Static, Dynamic Framework
- ๋ฏผ์๋ค๋ ํฌ์คํ
- Framework๋ฅผ ํ์ฉํ์ฌ ๋ชจ๋ํ๋ฅผ ์ ํ๋ ๋ฐฉ๋ฒ์ ์ธ์ธํ๊ฒ ์ค๋ช ํ ํฌ์คํ
- Library Link, Dependency์ ๋ํ ์ดํด๋ฅผ ์ํด ๊ณต๋ถ๊ฐ ํ์
- ๊ฐ์๋, Let us go ๋ฐํ์๋ฃ
- ๋น๋ ํ์์ด ์ค๋ ๊ฑธ๋ฆฌ ํ๋ก์ ํธ์์ ๋ถํ์ํ ๋น๋๋ฅผ ์ค์ด๊ธฐ ์ํ ๋๋ฒ๊น
- LLDB์ ์นํด์ง๊ธฐ
- ๋ฏผ์๋ค๋ ํฌ์คํ
- ์ ๊ฐ์๋์ ๋ฐํ์๋ฃ๊ฐ ๊ธฐ๋ฅ์ ๋ฐ๋ผ ์ฌ์ฉ๋ฒ์ ๋ฐํ๋ฅผ ํ์๋ค๋ฉด, ๋ฏผ์๋ค๋์ LLDB ๋ช ๋ น์ด๋ฅผ ์ค์ฌ์ผ๋ก ๊ธฐ์ ํจ
- ์ค์ ์์ ๋ฅผ ํตํด์ ์์ ์ด ๋์ด ๋ฐ๋ผํด๋ณผ ์ ์์
- ์์กด์ฑ ๊ด๋ฆฌ์ ํ์ ์ด์ ์ ๋ํด ํ๊ตญ์ด๋ก ๊ฐ์ฅ ์ ์ค๋ช ๋ ๊ธ
- ์์กด์ฑ ์ญ์ ์ด ํ์ํ ์ด์ , ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ์ ์ดํดํ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ๋ ๊ธ์.
- ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ํ ๋์ Swinject๋ฅผ ์ฐ๋ ์ด์ ๊ฐ ์ค๋ช ์ด ๋
- ์ํ ์ข ์์ฑ์ ์ํฉ์ ๋ํ ์ดํด๋ฅผ ํ ์ ์์
- Xcode + Jenkins ์ค์ ์ ํตํด ๊ฐ ์๋ฒ๋ณ๋ก ์๋๋ฐฐํฌ ๊ฐ๋ฅํ๋๋ก ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ
- ์ฝ๋ ์์ ์์ด ๊ฐ ์๋ฒ ๋ฐ ์กฐ๊ฑด ๋ณ๋ก ๋ฐฐํฌ๊ฐ๋ฅ ํ๋๋ก ํ๊ฒฝ์ค์ ํ๋ ๋ฐฉ๋ฒ
- ๋ผ์ธ ๊ธฐ์ ๋ธ๋ก๊ทธ
- Bazel + XcodeGen์ ํ์ฉํ ๋น๋ ์๋ ๊ฐ์ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ์ด์ ๊ฐ์
- Fastlane ๊ณต์๋ฌธ์
- ํ๊ตญ์ด ๋ฆฌ์์ค
- ๊ฐ๊ฐ์ lane๋ค์ ์ญํ ๊ณผ ์ด๋ฅผ ์์ฉํ์ฌ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ด๋์์
- ์ด๋ฅผ ๋จ์ํ ์ฝ๋ ํ๋๋ก ์คํํ๋ ๊ฒ์ ๋์ด์์ ๋ค๋ฅธ ํด๊ณผ ์ฐ๋ํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด์ผํ๋ค.
- ํด์ธ ์ ํ๋ฒ, ์ฒ์ํ๋ ์ฌ๋๋ค์ด ์์๋๋ก ์ ๋ฐ๋ผํ ์ ์๋๋ก ๋จ๊ณ๋ณ๋ก ๋์์์ผ๋ก ์ค๋ช ํด์ค
- 2020.04.27 ๋ด ์์ผ์ ์ฌ๋ผ์จ ์์..
- Zedd๋ ๋ธ๋ก๊ทธ
- Github Action์์ ๋ฐฐํฌ๋ฅผ ํ ๋์ ๋น๋๊ฐ ์ ํ๋์ด์ผ ํจ.
- ๋น๋๋ฅผ ํ๊ธฐ ์ํด์ Github Server์ ๊ฐ๋ฐ์ ์ธ์ฆ์๊ฐ ์์ด์ผํ๋๋ฐ, ์ํธํ์์ ์ฌ๋ฆฌ๊ณ Action์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ๋ฒ์ ์์ ํจ
- SwiftUI+Combine์ผ๋ก MVVM ์ํคํ ์ณ ๊ตฌ์ฑ
- ์ผ๋ณธ ๋ถ์ด ๋ง๋์ ๋ฆฌํฌ์งํ ๋ฆฌ, ์คํ๊ฐ 350๊ฐ ๋์
- UI ๋ฐ Unit Test ๋ํ ์์ฑ๋์ด ์๋ค.
- ํด๋ฆฐ์ํคํ ์ณ๋ฅผ SwiftUI์์ ์ด๋ป๊ฒ ๋ค๋ฃฐ์ง์ ๋ํด ๊ฒ์์ด ์์ฃผ๋๋ ์๊ธ์์ "๋ผ์ฐํ ์ SwiftUI์์ ์ถ์ถํ๊ธฐ ํ๋ค๋ค.", "๊ธฐ์กด ํด๋ฆฐ์ํคํ ์ณ์์์ ๋ผ์ฐํ , ๋๋ RIBs๋ ์ ํฉํ์ง ์๋ค."๋ ์ฃผ์ฅ์ ๋ํด์ ๋์ํ๊ณ ์ถ์ง ์์.. ์ฐพ์๋ณด๋ ๊ธ.
- SwuftUI์์ Router๋ฅผ ๋ง๋ ์์
- Moya Library์ ๋ํ ์ดํด
- Alamofire์์ ๊ด๊ณ
- ์ฌ์ฉ๋ฐฉ๋ฒ ๋ฐ ์ฅ์
- Moya+RxSwift Service Layer์์ ๊ฐ์ธ์ ์ผ๋ก ๊น๋ํ๊ฒ ๊ตฌ์ฑํ ์์ ๋ผ๊ณ ์๊ฐํจ
- Network Error, Mapping Error Handling์ ํ ์คํธ๋ฆผ ๋ด์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํจ
- JWT Token Refresh ๋ํ Retry๋ก ์ํ์ ํด๊ฒฐํ ์ ์์์ง ์๋ํด๋ณด๊ณ ์ถ์ ์์
- ๋ฉ๋ชจ๋ฆฌ ๋ฏ์ด๋ณด๋ ๋ช๊ฐ์ง ๋ฐฉ๋ฒ ์๊ฐ, ์ฑ์๋ ๋ธ๋ก๊ทธ
- ์ค๋ช ์ด ๋ํ ์ผํจ, ํด๋น ๊ธ์ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ์กฐํด์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต์ ์งค ์์
- Heap, Stack์ Swift์์์ ์ด์ ๋ฐฉ๋ฒ
- Value Type, Reference Type
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ SIL๊ณผ Xcode Build Level๋ถํฐ ์ดํดํ์
- ๋ ๊ฐ์ฒด ์ฌ์ด์ ๊ฐํ ์์กด์ฑ ๊ณ ๋ฆฌ๋ฅผ ๋๊ธฐ ์ํด์ ์์กด์ฑ์ ์ญ์ ํ๋ ๋ฐฉ์
- ๋ ์ธ ์ค์ํํธ ๋ด์ค๋ ํฐ 8ํธ ์๊ฐ ํด์ธ๊ธ
- ์์กด์ฑ ์ ๊ฑฐ๋ฅผ ๋งค๋์งํ๋ ๊ฒ์ ๋ํด ์คํ ๋ค๋๊ฐ ์๋๋ฐ, ํ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ณต๋ถํ๋ฉด ์ข์๊ฒ ๊ฐ๋ค๋ ์๊ฐ
- WKWebView ์์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๋ ์ฃผ์ ์์ธ๊ณผ ํด๊ฒฐ์ฑ
- ๊ผญ WebView์์์ ์ํฉ์ด ์๋๋๋ผ๋ 'add()' ํจ์๊ฐ strong ์ผ ๋์, ํธ๋จํด๋ฆฐ ํจํด์ ํ์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
- ํ์ธ์ด์ ๊ฐ๋น์ง์ฝ๋ ์ ๊ณผ Swift์ ARC๋ฅผ ๋น๊ตํ ๊ธ
- ์ค์ํํธ์ ์์ ์ฑ์ ๋ํด ์๊ฐ
- Swift์์ pointer ์ ๊ทผ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ ๋ฐ ์ฌ์ฉ ์์ ๊ณต์
- Swift ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ๊ณผ Type์ ๋ํด ์ดํดํ๋ค๋ณด๋ฉด ๋ค์ํ ๊ฒฝ์ฐ์ ์์ ํ์ ๋ค์ด ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ์ ์ฅ๋๋์ง ์๋ฌธ์ด ๋ค ๋๊ฐ ์๋ค.
- ์ด์ ๊ดํ ๋ถ๋ถ๋ค์ ๊ฐ๊ด์ ์ผ๋ก๋๋ง ์์ ์ด ๋์ด์๋ ๊ธ
- AppLifeCycle์ ๊ตฌ์กฐ์ ์ผ๋ก ์ดํดํ๊ธฐ
- mainํจ์, applicatinMainํจ์, UIApplication, UIApplicationDelegate์ ๋ํ ์ ์
- MainRunLoop์ ๋์ ๊ณผ์ ์ ์ดํดํ ์ ์์
- Swift Intermediate Language GitHub Swift Documentation.
- ์ฐ์ํํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ
- Swift Lintermediate Language ์ ๋ํด์ ๋๋ต์ ์ผ๋ก ์์๋ณผ ์ ์๋ ํฌ์คํ
- ์ฐ์ํํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ
- Swift ๊ฐ๋จํ ์ฝ๋๋ค์ SIL๋ก ๋น๋ํด๋ณด๋ ์์
- Concurrency ๊ด๋ จํด์ Realm์ ์ด์๊ฐ ๋ง์๋ฐ ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ์ ๋ฆฌํด๋์ ํฌ์คํ
- ์ด ์ธ์๋ ์ฑ๋ฅ ํฅ์์ ์ํ ๊ธฐ๋ณธ์ ์ธ ๊ฐ์ด๋๋ผ์ธ ๋ํ ์์ ๋์ด ์์
- ์คํ์์ค ๋ฐฐํฌ์ ๊ดธํด ํ๊ตญ์ด๋ก ๊ฐ๋จํ๊ณ ์ฝ๊ฒ ์ค๋ช ํด๋์ ๋ธ๋ก๊ทธ.
- CocoaPod
- VoiceOver ๊ธฐ๋ฅ์ ์ ์ค์ณ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๋ช ์ํด๋์ ์ ํ ๊ณต์ ๋ฌธ์
- ์ฒ์ VoiceOver๋ฅผ ์ฐ๋ ์ํฉ์์ ์ต์ํ์ง ์์๋ฐ, ๊ฐ ์ ์ค์ณ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ ์๋์ด ์์.