천원의 개발

앱 개발 출시 회고 본문

SeSAC🌱

앱 개발 출시 회고

천 원 2022. 10. 5. 03:01

안녕하세요! 이번에 앱 스토어에 앱을 출시하게 되면서 느낀 점, 고민했던 부분을 한번 회고하려고 합니다.

 

먼저 앱 소개부터 해보자면

 

‎Plain ToDo - 플레인 투두

‎기본에 충실한 투두리스트 'Plain ToDo' 사용자가 복잡하다는 생각이 들지 않도록 깔끔하고 핵심적인 기능만을 추구합니다! [주요기능] - 캘린더 - 체크 리스트 - 포스트잇 - 알림 - 아이패드 지원

apps.apple.com

 

한번 사용해 보시고 리뷰해 주시면 감사하겠습니다🥺

 

개발 동기

처음 시작은 Realm local DB의 사용을 목적으로 공부해 보고자 어떤 앱을 만들지 구상하면서 시작하게 되었습니다.

최대한 기능을 분리하고, 가독성 좋은 코드를 짜기 위해 MVC, Singleton, Repository, MVVM patten 과 Extension, BaseView ,접근 제어 자를 활용하고자 하였습니다.  

 

그렇지만...🥲 앱의 기능에 대한 고민이나 특히 코드를 수정 하는 부분에서 생각하는 것만큼 좋은 코드를 못 짠 거 같습니다. 수정하기 급급해서 패턴이나 구조를 신경 쓸 여유가 없는 느낌? 확실히 새로운 코드를 짜는 것만큼 기존의 코드를 수정하기도 쉬운 일은 아니라고 종종 생각합니다. 그래도 새로운 코드를 작성 할 때는 의식적으로 코드를 분리하려고 노력하는데 수정할 시에는 혹시 수정 시에 오류가 나는 부분이 걱정되어 코드를 분리하기 망설여지는 느낌.. 다음번 프로젝트는 이러한 실수를 반복하지 않도록.. 아자아자🔥

 

 

오픈소스 라이브러리 사용법 터득!?

이번에 앱을 출시할 때 사용한 오픈소스는 Fscalendar, SnapKit, IQKeyBoard, Hero, Then, PanModal 등 총 10개의 라이브러리를 사용해 보았습니다. 역시 Calendar를 많이 사용하는 앱이라 Fscalendar를 좀 더 깊게 사용하고 공부했습니다. 대부분의 라이브러리가 SPM을 지원하여 쉽게 설치가 가능하였고, Github 페이지에 친절히 사용법 및 예제 코드가 있어 어렵지 않게 사용하였으나 확실히 커스텀 적인 부분에서 내가 직접 짠 코드가 아니다 보니 적용하기 힘든 부분이 있었습니다. 예를 하나 들자면 아이패드 대응 시에 orientation을 변경하면 Fscalendar의 Layout이 깨지는 현상이 있었습니다. 이런 부분들을 해결하기 위해 고민을 많이 했었는데... 역시 개발자 선배님들 또한 제가 고민한 부분들을 Github issue부분에서 심심치 않게 찾아볼 수 있었습니다. 이렇게 여러 라이브러리를 접해 보니 새로운 라이브러리를 사용할 때도 적용시간이 확실히 단축되었던 것 같습니다. 

 

 

Notifiaction값 전달

프로퍼티를 활용한 값 전달이나 Closure, Delegate를 활용한 값 전달은 확실히 어떤 부분에서 사용해야 하는지 감이 있었는데 Notification을 통한 값 전달은 어떤 부분에서 사용하면 좋을까 라는 생각을 가지고 있었습니다. 이번에 tabBar를 통하여 설정 화면과 메인 화면을 분리하였는데 설정 화면 구현 도중 값을 전달 하거나 tableView를 reload해줘야 하는 부분에서 서로 계층 구조가 아니니 Closure나 프로퍼티를 활용한 값 전달은 사용 못 한다고 생각하니 남은 부분이 Notification이었고 사용해보면서 🤓!! 이럴 때 사용하면 유용하겠구나! 라고 생각하였습니다. 

 

 

TableViewCell 이동

처음에는 LongPressGesture를 통하여 SnapShot을 찍어 움직이는 방식으로 동작을 구현하였으나 LongPressGesture를 사용중에 화면 밖으로 가면 LongPressGesture가 정상적으로 종료가 완 되는 버그가 발생하여 고민 하던 중 TableViewDrag & DropDelegate를 활용여 금방 해결 할 수 있었습니다. 

 

Gesture간의 우선순위!?

최대한 심플한 디자인을 목표로 개발을 하다 보니 하나의 화면에 여러가지 Gesture가 동작하여 TableView의 Trailing Swipe를 하려고 할때 PanGesture가 작동하여 고민하였습니다. 처음에는 Coordinating multiple gesture recognizers를 통해서 Gesture에 우선 순위를 주는 방식으로 해결 하고자 하였으나 TableView의 Gesture에 어떤 식으로 접근 해야 할지 몰라 고민하던 중 해결한 방법이 PanGesture의 프로퍼티에 속도였습니다!! TableView Trailing Swipe를 사용 시에 PanGesture의 특정 속도를 넘지 않는 부분을 이용하여 Gestrue간의 동작을 분리해주었습니다.

 

 

모듈화의 중요성!?

개발 중 태그 기능 정도의 간단한 저장은 UserDefaults를 통해서 해도 괜찮을 거 같다는 생각에 UserDefaults를 활용하여 태그 기능을 완성 하였는데..(왜 그랬을까..🥲) 백업, 복구, 마이그레이션 부분에서 문제가 생긴다는 피드백을 듣고 태그 기능 또한 Realm DB에 새로운 스키마에 저장하였는데, 처음 생각했을 때는 이미 UserDefaults에 맞게 개발했는데 Realm으로 변경하면 많은 시간을 투자해야 할 것 같다고 생각하였지만! 처음 개발 시 기능별로 분리하여 구현하였더니 생각보다 짧은 시간에 수정을 할 수 있었습니다. 🤓!! 확실히 코드를 분리하는 것에 중요함을 느꼈던 경험인 것 같습니다.

 

 

아이패드 대응

처음 xcode에서 iPad 시뮬레이터를 통해 실행해보니 🧐오.. 생각보다 괜찮아서 몇 가지의 수정만 으로 대응할 수 있었던 거 같습니다.  iPhone과 가장 큰 차이점은 역시 화면 회전 부분을 지원 해야 했는데 viewWillTransition 메소드를 활용하여 Fscalendar의 layout이 깨지는 부분을 수정 해주었습니다. 또한 색상 선택 화면을 collectionView로 구성 했는데 Cell의 크기를 화면의 비율로 지정 하다보니 하나의 색상 Cell이 너무 크게 보여 어색한 부분이 있어서 iPad일때 layout을 다르게 잡아 주었습니다.

UIDevice.current.userInterfaceIdiom == .pad

 

 

버전 업데이트 계획!

지인들이나 앱 사용자 분들의 공통 피드백 중에서 위젯을 요청하는 분들이 많으셔서 우선 사항으로 위젯을 만들어 볼 생각입니다. 또한 현재 테마 변경 기능을 구현 해둔 상태여서 다음 버전에 위젯과 함께 업로드 예정입니다!!!

 

 

마지막으로..

앱 개발하는 동안 힘들었지만 재미있었고 꾸준히 업데이트하여 많은 사용자분을 보유하고 싶습니다.
출시하고 다른 분들 앱들도 보면서 많은 자극을 받았습니다. 정말 많이 성장 하고 싶다고 꾸준히 공부하고 더 많은 프로젝트를 경험하고 성장해서 좋은 개발자가 되고 싶습니다.

 

 

'SeSAC🌱' 카테고리의 다른 글

🌱SeSAC iOS 2기 수료 후기  (11) 2023.06.01
Service Level Project 회고  (4) 2022.12.24