오늘하루 개발 일지

1주차 iOS - 2021.08.19 ~ 2021.08.28

iOS 앱의 아키텍처


그렇기에 소프트웨어 아키텍처를 많이 생각해보았고 Clean Swift(VIP)나 VIPER, RIBs를 사용하기에는 화면 구성이 그렇게 많지 않아 오버헤드가 아닌가 싶어서 가볍게 구성하기 위해 MVVM-C 구조를 채택하기로 하였다.

ViewModel은 개발자마다 구현하는 방법이 다르기에 큰 틀을 잡아주고 User의 Action에 따른 State가 변경되어 업데이트 시점을 정확히 할 수 있다는 장점이 있는 라이브러리인 ReactorKit을 채택하였다.

또한 Coordinator Pattern을 조금 더 쉽게 사용하기 위해 RxFlow를 사용하기로 결정하였고, 앱에 바로 적용시켰다.

캘린더 추가


iOS앱의 가장 유명한 캘린더 라이브러리인 FSCalendar를 사용하기로 하였고, RxSwift와 같이 사용하기 위해 DelegateProxy를 직접 만들어 기존의 Delegate 함수를 Rx적으로 사용할 수 있게 바꾸었다.

또한 캘린더를 사용하며 일어날 수 있는 다양한 버그들을 수정하였고, 디자인에 맞게 커스텀하여 사용할 수 있도록 하였다.

❗️도달한 문제

기존 DelegateProxy를 사용할 경우 FSCalendar와 RxCocoa가 둘 다 selector가 nil인지 체크하지 않는 오류가 있었다. 이는 라이브러리 자체의 버그였기 때문에 혼자 힘으로 해결하긴 어려울 것 같았다. 그렇기에 Stack Overflow에 현재 내가 겪고있는 상황과 도달한 문제, 이유가 무엇인지 알고싶어 질문을 올렸고, 하루도 지나지 않아 답변을 받을 수 있었고, RxCocoa의 에러를 찾아낼 수 있었다. 비록 직접 기여하진 못했지만 버그를 수정했다는 것에 의미를 두었다.

스플래시 뷰 추가


디자인에 맞추어 스플래시 뷰를 Snapkit을 이용하여 제작하였다. Storyboard 대신 code로 UI를 제작할 시 깃에서의 충돌가능성이 적어지고 IBOutlet에서 일어나는 문제들을 피할 수 있다. 뷰의 계층구조도 원하는대로 편하게 작성할 수 있는 장점이 있는 것 같았다.

로그인 뷰 추가


디자인에 맞추어 로그인 뷰를 추가했으며 RxKeyboard 라이브러리를 사용해 키보드가 UI를 망치는 일이 없도록 변경해주었다. 버튼을 눌렀을 때 Animation 효과를 사용자들이 볼 수 있도록 UIView.animate 함수를 사용하였다.

RxSwift를 활용해 조금 더 쉽게 Validation을 사용하여 서버로 보내기 전 1차로 값을 필터링 할 수 있었다.

R.swift 추가


에셋들을 조금 더 자유롭게 활용하기 위해 R.swift를 추가하였다. 안드로이드의 R 시스템을 Swift로 가져온 거라고 봐도 무방할 것 같다. 조금 더 편하게 사용이 가능하나 빌드를 할 때마다 파일이 변경되어 나중에 깃 협업에서 문제가 생길 소지가 있어보였다. 나중에 협업을 할 때는 생성된 R 파일을 지우고 gitignore에 추가를 해야겠다.