다양한 상황(또는 화면)에서 Rx를 통해 비동기 처리를 이해하며 적용해보고, 실시간 통신을 바탕으로 다양한 모듈(또는 기능)을 구조화 하는 것에 중점을 두고 프로젝트 개발하였습니다.
- 프로젝트 주제 : 디스코드 클론!
- 주요 기능 : 실시간 채팅, 실사긴 음성/화상 채팅
RxSwift
: Swift에 Rx 문법을 결합시키기 위해 사용RxCocoa
: Rx와 Cocoa framework를 결합하기 위해 사용RxDataSource
: Observable 객체들을 Table/Collection View에서 유연하게 + 커스템 셀을 사용하기 위해 사용RxGeusture
: UI 컴포넌트에 event control을 추가 하기 위해 사용
Moya
: 네트워크 레이어의 간결성을 위해 사용 (moya를 통한 네트워크 탬플릿화)StompClientLib
: 채팅 통신(Stomp 프로토콜 사용)
Kingfisher
: 이미지 캐싱
Snapkit
: AutoLayout을 쉽게 사용하기 위해 사용 (스토리보드 사용 지양)Then
: UI 가독성 개선PanModal
: modal창을 쉽게 구현하기 위해 사용Toast-Swift
: toast 팝업MessageKit
: message UI
Firebase/Core
,Firebase/Messaging
: 파이어베이스 메시징 구현을 위해 사용
- MVVM+Coordinator
- Concept
- 디자인 패턴에 의해 바탕이 되는 흐름들은
Base
로 미리 정의한다. - View/ViewController는 ViewModel에 의존하며, 값을 변경하거나 전달 해야할 때 Rx를 사용을 지향한다.
- 스토리보드 사용을 지양하여, View 코드가 길어지는 경우 파일을 분리하여 작성한다.
- 화면의 전환은 Coordinator를 이용한다.
- ViewModel은
input
과output
으로 분리하여 관리한다.- 화면에 따라
model
를 별도로 관리한다. input
: 버튼의 탭 이벤트, 텍스트 필드의 입력 이벤트 등- State(UI 상태 값) : Driver/Subject
output
: view에 넘겨 줄 데이터들- 필요한 구독 시점에 따라 : (Publish/Relay) Subject
- 화면에 따라
Coordinator
패턴 : 화면 전환 로직을ViewController
에서부터 분리
smooth-ios
│ ├── Modules : 화면 단위
│ ├── Service : 네트워크 레이어 구현체
│ ├── API : 네트워크 레이어
│ ├── Model : Entity
│ ├── Coordinator : 일종의 라우터
│ ├── Base : MVVM 패턴에 의해 공통적으로 사용하는 파일들
│ ├── Common : 프로젝트 기본 구성파일
└── └── Utils : 자주 사용하는 기능들을 커스텀한 파일
├── UserDefault, Alert ... Utils files
└── Extension : 퍼스트파티 커스텀한 파일들
- 트러블 슈팅 및 설계 고민
- notion daily 일지 (개발 몰입기간에는 일지가 많이 빠져있습니다.)
$ cd ~/src/frontend/ios
$ pod install
$ open smooth-ios.xcworkspace
김두리, doitduri@gmail.com