프로젝트를 하면서 가장 많이 사용하는 라이브러리를 정리 및 추천해볼까 합니다.
어디까지나 주관적인 생각이며, 이 글은 개발하는데 어느정도 참고로만 보시면 좋을 것 같습니다.
(2020.08.06 내용 보충 하였습니다.)
Framework
- ReactorKit (https://github.com/ReactorKit/ReactorKit)
ReactorKit은 전수열님이라는 유명한 개발자님이 만드신 프레임워크입니다.
MVP와 MVVM에서 혼란을 겪다가 (무엇보다 개발자마다 각자 철학으로 인해 여러가지 스타일이 있었고, State 관리가 싶지 않았음), RxSwift 오픈체팅 방에서 알게 되었습니다.
- 정해진 템플릿이 있다는 점
- State 관리가 굉장히 편하다는 점
- RxSwift랑 잘 어울리는점 (RxSwift를 자연스럽게 배울 수 있음),
- 또한 여러 예제가 있어 MVVM / MVP보다 좀 더 쉽게 접근할 수 있다는 장점이 있습니다.
추가로 최근 프로젝트를 ReactorKit를 사용했는데, 현재까지 Crash 발생이 굉장이 낮았습니다.
물론 ReactorKit 를 사용해서 100% 말할 수는 없지만, UI단과 로직단을 적절히 분리할 수 있어 안정성있고, 유지보수도 용이합니다.
Rx
- RxSwift (https://github.com/ReactiveX/RxSwift)
처음에는 배우기 어려울지 몰라도 어느정도 감을 잡으면 스트림을 통한 비동기 처리를 굉장히 편하게 구현할 수 있습니다.
한 예로, 예전에 서버와 동기화 할 때(여러 API를 한번에 처리하는 경우)에는 Sync / Async 오퍼레이션 큐를 직접 구현해서 사용했지만 RxSwift를 사용하면 merge / concat 으로 API를 한번에 처리할수 있었습니다.
RxSwift를 입문하고자 한다면 유투브 곰튀김님 강의를 추천합니다.(https://www.youtube.com/channel/UCsrPur3UrxuwGmT1Jq6tkQw)
- RxCocoa (https://github.com/ReactiveX/RxSwift/tree/master/RxCocoa)
버튼이나, 테이블뷰 등 UI를 Rx로 처리할 수 있게 해주는 라이브러리입니다. 가장 Rx를 기본적으로 사용해 볼 수 있지 않을까 싶습니다.
처음에는 저도 버튼 이벤트나, 테이블뷰 구현된 것을 RxCocoa 형태로 바꾸는 것 부터 시작하였습니다.
RxCocoa 말고도 RxSwift 커뮤니티에서는 다양한 Rx 라이브러리를 제공해주고 있습니다. (https://github.com/RxSwiftCommunity)
- Moya/RxSwift (https://github.com/Moya/Moya)
Alamofire를 사용하여 network 처리를 굉장히 편하게 해주는 라이브러리입니다. API 들을 Enum으로 편하기 관리 할 수 있고, Rx로 기본적으로 지원을 해주기 때문에 편리하게 사용할 수 있습니다. 또한 ReactorKit과 잘 사용할 수 있습니다. ReactorKit과의 조합은 전수열님의 Dribble 예제를 참고하시면 많은 도움이 되실겁니다.
Local Database
- GRDB (SQLite) (https://github.com/groue/GRDB.swift)
Realm를 사용하기 전에 SQLite를 사용했는데, SQLite를 굉장히 편하게 사용할 수 있다는 장점이있습니다.
문서화도 잘되어 있고, Rx도 역시 지원하고 있습니다.
- Realm (https://realm.io/kr/docs/swift/latest)
이제는 많은 분들이 사용하는 Realm입니다. 개인적으로는 속도가 정말 빠르다는 생각이 듭니다. 데이터 모델을 생성하면서 구현할 수 있어서 생산성에도 좋은 것 같습니다. 다만 사용하는 쓰레드를 주의해서 사용해야합니다. Realm 역시 Rx를 지원합니다.
- Magic Record (https://github.com/magicalpanda/MagicalRecord)
Coredata를 사용하시는 분들에게 추천합니다. Coredata를 좀더 쉽게 사용할 수 있습니다.
UI
- SnapKit (https://github.com/SnapKit/SnapKit)
AutoLayout 같은 UI를 코드로 구현한 때 편리한 라이브러리입니다.
최근, 프로젝트를 협업하면서 StoryBoard를 같이 사용하는 것이 좀 어려웠습니다.
개인적으로 저는 StoryBoard를 더 선호하고 생산성에도 도움이 된다고 생각하지만,
코드보다 느리고, 협업을 할 때 다른 사람이 고친 부분을 확인하기 어렵고, Git 를 사용하다가 충돌하는 경우가 많아 굉장히 불편했습니다.
이러한 단점을 대안으로 AutoLayout를 코드로 보기 쉽게 구현 할 수 있습니다.
- Hero (https://github.com/HeroTransitions/Hero)
뷰컨트롤러 간 이동을 할 때 굉장히 세련된 애니메이션를 설정할 수 있습니다. (ex: 앱스토어 투데이)
사용하기도 굉장히 쉽고, (Hero ID로 지정만 해주면 됩니다.) 앱을 좀 더 세련되게 만들 수 있습니다.
- lottie-ios (https://github.com/airbnb/lottie-ios)
GIF같은 에니메이션 효과를 낼 수 있는 라이브러리입니다. JSON를 이용하기 때문에 리소스 용량 부담도 크지 않고 이것 역시 잘 사용하면 세련된 앱을 만들 수 있습니다.
하지만..파일을 생성하는데는 디자이너의 도움(+설득)이 필요합니다. (물론.. 개발자도 배워서 할 수 있지만...)
ETC
- SwiftLint (https://github.com/realm/SwiftLint)
코딩 스타일을 가이드 해주는 라이브러리입니다. 코드를 좀 더 Swift 스럽게 사용하도록 도움을 줘서 몰랐던 코딩 스타일 발견할 때도 있습니다. 또한 설정을 통해 코드 스타일을 제한 강도를 조절할 수 있어 굉장히 유용한 라이브러리입니다.
협업을 하신다면 이 라이브러리는 필수라고 생각합니다.
- R.swift (https://github.com/mac-cain13/R.swift)
Image, String 리소스를 마치 안드로이드의 R처럼 사용할 수 있게 해주는 라이브러리입니다.
보안이 필요한 앱인 경우 한글을 소스코드에 넣는 것은 위험합니다. 따로 Strings 파일에 보관하여 편리하게 사용할 수 있십니다.
"Azsha Blog" = 아즈샤 블로그; 로 작성해 두면 R.string.azshaBlog() 로 해달 문자열을 사용할 수 있습니다.
- Fastlane (https://fastlane.tools/)
빌드 / 앱스토어 업로드 / 배포 등을 자동화 시킬 수 있는 라이브러리입니다.
커맨드 라인으로 귀찮은 아카이브.. 앱스토어 업로드.. Test Flight 설정.. 을 한번에 끝낼수 있습니다!
기본 설정은 제 블로그 글을 참고해주세요
또한 Circle CI나 Bitrise 를 통해 연동도 가능한데.. 이부분은 아직 저도 테스트를 해보진 못했습니다.
마치며..
회사 프로젝트는 보안 때문에 이제 소스를 재활용 할 수 없어서, 개인 Github에 예제 프로젝트를 생성하여 정리하고 있습니다.
업무때문에 언제 업데이트 할지는 모르나 참고하실수 있도록 링크를 남겨두겠습니다. :)
https://github.com/azsha/AppStore
'Programer > iOS' 카테고리의 다른 글
[Let's Swift] 렛츠 스위프트 판교 후기 (0) | 2019.12.07 |
---|---|
[Swift] Realm 사용할 때 Crash 오류 관련 (0) | 2019.11.25 |
[Fastlane] iOS App 자동 배포 해보기 (0) | 2019.04.10 |
[UI] TableView에서 이미지 크기에 따라 Cell 크기 조정하기 (0) | 2019.01.18 |
[Swift] StoryBoard 로컬라이즈(지역화) 쉽게하기 (0) | 2018.08.24 |