어플리케이션의 종료 시나리오 작성
다양한 종료 환경
밀꼭앱은 다양한 종료 환경이 존재했습니다. 어떻게 종료할지에 대해서 분기를 나누고 분기에 관한 로직을 처리해야 했습니다.
종료 환경에 관해서 고민할 때 크게 셋으로 나눴습니다. 그리고 이 나눠진 분기를 통해서 각각 다른 로직이 실행되게 만들었습니다.
- 앱이 포그라운드에서 작동할 경우
- 앱이 백그라운드에서 작동할 경우
- 앱이 kill 된 경우
앱이 포그라운드에서 작동할 경우
앱이 포그라운드에서 작동할 경우, 시스템 메모리에서 밀꼭 앱이 제거되지 않았기 때문에 특별한 분기처리가 없었습니다.
앱이 백그라운드에서 작동할 경우
notification을 통한 기록 저장 remind
앱이 백그라운드에서 작동할 경우, 기본적으로 notification이 사용자에게 전달됩니다. 사용자는 notification을 통해 들어올 경우 로직을 통해 종료화면으로 넘어갈 수 있게 만들었습니다.
notification 클릭 안하고 들어온다면?
notification의 delegate을 활용하여 특정로직을 실행하도록 만들었다면, 노티를 클릭하지 않는 경우도 존재했습니다. 그럴 경우 사실 delegate을 통한 로직의 처리 보다는, 기록을 시작했을 때 발생한 cache값을 통해서 로직을 만드는 것이 자연스럽다고 생각했습니다. 그러니까 notiifcation을 deeplink처럼 활용하지 않는 방식이 맞다고 생각했습니다. 따라서 notification의 로직을 분기할 수 있는 cache값을 어디다가 저장했어야 했습니다.
그래서 결론은? UserDefaults + realm + fileManager
notification의 로직을 분기할 수 있는 cache값을 UserDefaults에 저장 했습니다. 이로서 밀꼭 챌린지의 가장 최근의 정보인 시작시간과 URL주소 등 다양한 최근의 변수들이 UserDefaults에 저장 됩니다. 그리고 앱의 첫 화면에 들어오자 마자 이 최근의 UserDefaults에 대한 정보들을 읽어드리고 로직을 실행하게 하였습니다.
내부적으로는 realm을 통한 과거 기록의 db화, fileManager를 통한 URL주소 읽고 쓰기, UserDefaults를 통한 과거 기록 들을 archive등 다양한 툴을 활용하여 짜임세 있는 코드를 작성했습니다.
아래는 고민했던 흔적의 flowChart입니다.
'프로젝트 > 밀꼭-당신을 위한 식사 타이머' 카테고리의 다른 글
[밀꼭] 사용자 피드백 반영하기 (Tuist + Carthage + RealmSwift 트러블 슈팅) (4) | 2024.11.01 |
---|---|
[MealGok_개인 앱] 특정 고객에게만 일어나는 버그를 잡기 위해서, 고객의 기기로 디버깅 해보기 (트러블 슈팅) (0) | 2024.06.06 |