Hodie - IOS Time Scheduler App
제작 인원: 1명 (개인 프로젝트)
제작 기간: 2021.02.10 ~ 2021.03.05
사용 기술: SwiftUI, Core Data
앱스토어 링크: https://apps.apple.com/kr/app/hodie/id1558327474
프로젝트 개요
겨울방학에 새롭게 IOS 개발을 시작하였다. 시작 당시 SwiftUI와 UIkit의 차이를 모르고 가장 최신 기술인 SwifUI로 IOS개발을 시작하게 되었다. 스탠퍼드의 공개 강의인 2020 IOS 개발 강의 (CS193p) 수업을 열심히 들으며 과제들을 수행하였고(물론 채점을 받지 못하지만) 아래 링크는 과제를 저장한 깃 허브 링크이다.
Final 과제는 그동안 배웠던 내용을 바탕으로 자신만의 앱을 만들어 보는 것이었다. 그동안의 배웠던 내용을 정리할 겸 앱을 하나 만들어보자 마음먹고 시간계획표 앱을 만들기로 결심했다. 기존의 앱스토어 Todo앱들을 살펴보면 모두 리스트 형식의 앱들 뿐이었고 원형으로 된 시간 계획표는 찾아보기 어려웠으며 그나마 있는 하나마저 유료 앱이었다. 이것저것 일이 다양하게 많은 사람들 (대학생, 회사원..?)들은 리스트 형식이 편하겠지만 비슷한 하루가 반복되는 사람들 (학생들)의 경우는 한눈에 파악할 수 있는 원형 계획표가 편할 것이라고 생각해서 만들어보았다.
초기 컨셉
과거 어릴 적 방학 계획표를 참고하여 아이패드를 사용하여 간단한 러프를 만들어보았다.(발로 그린 거 아닙니다..) 상단에는 날짜를 고를 수 있으며 하단의 +버튼을 누르면 할 일을 등록한다. 등록된 일정은 원형으로 표시된다.
개발 세부 내용
모델은 정말 간단하다. 각 날짜별로 Scheduler가 존재하며 각 Scheduler들은 여러 개의 TodoTask(일정)들을 가지고 있다. TodoTask의 내부에서는 시간을 radian으로 변환하여 일정들을 원형으로 나타낼 수 있도록 한다.
대부분 큰 문제없이 구현하였지만 드래그하여 시간을 변경하는 부분을 구현할 때 문제가 발생하였다. 아래의 그림과 같이 유저가 TodoTaskView를 길게 누를 시에 터치 지점의 CGPoint를 얻을 수 있다. 이 CGPoint를 radian을 변환하기 위해 arctan2를 사용하였는데 -180~ 180도를 표현하는데 180도를 더함으로써 0~360도를 표현할 수 있다. 이때 문제가 발생한 부분은 오른쪽 그림의 화살표처럼 View를 드래그하여 0도와 360도 사이를 지나면 radian의 값이 급격하게 튀게 된다. 또한 드래그 제스처의 핸들링 함수는 비동기적으로 여러 번 호출되기 때문에 정확하게 바뀌는 지점을 파악하기 어렵다.
해결방안으로 값이 크게 튈 때 드래그 방향을 파악하는 방법으로 해결하였다. 제스처 객체를 통해서 얻을 수 있는 정보로는 방향을 알 수 없기 때문에 원을 4개의 분면으로 나누어 스택 구조를 활용하였다. 값이 크게 튈 때 스택을 확인하여 지나온 분면을 확인, 어느 방향에서 드래그되어온 것인지 알 수 있게 되었다.
해결방안으로 값이 크게 튈 때 드래그 방향을 파악하는 방법으로 해결하였다. 제스처 객체를 통해서 얻을 수 있는 정보로는 방향을 알 수 없기 때문에 원을 4개의 분면으로 나누어 스택 구조를 활용하였다. 값이 크게 튈 때 스택을 확인하여 지나온 분면을 확인, 어느 방향에서 드래그되어온 것인지 알 수 있게 되었다.
구현한 기능 리스트:
- 일정들을 추가, 삭제, 수정 가능, 각 일정마다 색깔 지정, 원형으로 표시
- SwiftUI에서 CalendarUI를 제공하지 않기 때문에 상단의 날짜를 표시하는 CustomView제작
- 드래그하여 시간 변경 가능
- 일정별 로컬 푸시 알림 기능
- 자주 사용하는 일정들은 저장하고 불러올 수 있음.
- 영어 한국어 지원
앱스토어 출시
원래 앱스토어의 출시할 생각이 없었지만(아무도 안 쓸 거 같아서..) 선배의 권유로 앱스토어에 출시하게 되었다. 앱 스토어 심사가 매우 힘들다고 들었지만 SwiftUI로 제작해서 그런지 아무런 문제 없이 심사를 패스하였다. 큰 기대를 하지 않아 광고도 달지 않고 출시하였는데..
글을 작성하는 8월 14일 기준 1만 다운로드가 넘었다.. (광고 넣을 걸..) 해당 수치는 AppStoreConnect에서 제공하는 분석 페이지의 앱 판매량 수치이다.
후기
간단하게 만들어 앱스토어에 출시해놓고 방치하고 있는 중이지만 다운로드 수는 꾸준히 증가하고 있다. 하지만 내부적으로는 문제가 많았다. 충돌 같은 문제가 아닌 시스템의 구조에서의 문제이다.
SwiftUI를 사용했지만 SwiftUI 스럽지 않다.. SwiftUI는 MVVM패턴을 기반으로 만들어진 프레임워크이다. Model, ViewModel, View가 독립적으로 분리되어 있어야 하지만 처음 만들어보다 보니 뒤죽박죽이다. Single Source of Truth를 제대로 지키지 못하고 중복되는 데이터들도 존재하며 property 사용이 매끄럽지 않았다.
처음으로 제작해본 IOS 앱의 결과가 나쁘지 않았다. 기회가 된다면 훗날 업데이트를 하지 않을까 싶다.
'프로젝트 > IOS 앱' 카테고리의 다른 글
[IOS 앱] Youchu - 유튜브 추천 서비스 앱 (0) | 2021.08.15 |
---|