1주차 iOS - 2021.08.19 ~ 2021.08.28

2022. 4. 26. 14:38오늘하루 개발 일지

 

INIT) iOS 앱의 아키텍처


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

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

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

 

ADD) 캘린더 추가


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

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

 

❗️도달한 문제

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

ADD) 스플래시 뷰 추가


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

 

ADD) 로그인 뷰 추가


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

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

 

ADD) R.swift 추가


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