2021년 5월 21일, 단디 1.03 버전을 제출했고 2021년 5월 22일인 현재 업데이트가 완료되었다. 이제 어느 정도 큰 버그는 잡은 듯해서 단디 개발 후기에 대해 작성해보려고 한다.
운영 후기 같은 경우는 런칭 후 운영 기간이 아직까지는 짧은 탓에 약 3개월~6개월 후에도 작성할 예정.

처음엔 단순한 계기로 시작했다. 진행 중이었던 슬기로운 독서 생활 프로젝트의 UI 개선 및 새로운 기능(북캘린더) 추가로 예상보다 프로젝트 기간이 길어져버렸고 리프레시를 위해서라도 사이드 프로젝트의 진행이 절실한 상황이었다.

개인 프로젝트를 여러 번 진행하다보니 일정 관리가 제대로 되지 않았다는 생각에서 발전해 사용하기 쉽고, 매우 심플한 디데이 위젯 애플리케이션을 만들자는 결론에 도달하게 되었다. 기왕 하는 거 앱스토어 런칭까지를 목표로 했다.

주요 이슈 - 데이터 셰어링


애플리케이션을 개발하면서 크고 작은 문제들이 많았지만, 그 중에서 가장 큰 문제를 꼽으라면 단연 앱과 위젯 간 데이터 셰어링 이슈를 꼽을 수 있을 것 같다.
프로젝트를 진행할 때마다 내가 다뤄보지 않은 기능을 구현해보는 것을 나만의 철칙으로 세웠는데, 이번엔 편집 가능한 위젯 구현을 목표로 했다. 그래서인지 당연히 문제도 거기서 발생했다.

편집 가능한 위젯의 경우 편집 불가 위젯과 달리 ConfigurationIntent가 사용된다. 추상 클래스 INIntent 를 상속받으며, 이 추상 클래스는 애플리케이션 또는 Intents Extension에서 채우도록 요구받는 요소들을 의미한다. 이번 편집 가능한 위젯의 경우, 위젯 표시의 매개체가 되는 요소가 ConfigurationIntent가 된다. (구현에 대한 자세한 내용은 Making a Configurable Widget 에서 확인 가능하다.)

유저가 애플리케이션에 저장한 모든 디데이 정보를 선택할 수 있어야 하고, 선택한 디데이의 정보를 가져와 위젯에 표시해야 하므로 초기 구현에서는 App, Widget Extensions, Intent Extensions의 공유 컨테이너에 모든 디데이 정보만 저장하도록 했다.

초기 구현 모습을 간단히 도식화하면 위와 같다. App Group Container를 사용해 공유 데이터를 사용한 이유는 유저가 디데이를 등록하거나 수정, 삭제할 때 네트워크의 제약을 받지 않는 것이 편리할 것이라는 생각 때문이었는데, 이로 인해 발생하는 이슈가 많아 다른 방법을 찾아봐야할 것 같다.

위에서 언급한 부분은 남은 숙제 파트에서 다루도록 하고, 이슈가 발생한 것은 도식화한 그림에서 표시한 App Group Container에서 Intent Handling에 모든 디데이 정보를 제공하는 부분에서였다. 애플리케이션에서 분명 디데이 정보를 추가/수정/삭제 했음에도 불구하고 위젯 편집 목록에서 이것이 반영되지 않았다.(해당 이슈 참조) 결론부터 말하자면 저장되어 있는 데이터 용량 중에서도 이미지 데이터의 용량이 Extensions에서 다루기 매우 큰 것이 원인이었다. UIImage 는 모든 이미지 데이터를 포함하고 있는 객체이므로, 데이터의 용량을 키우는데 크게 일조할 수 밖에 없었던 것 같다.

원인 해결을 위해 UIImage 데이터는 공유 컨테이너에서 따로 빼서 관리했다!!…라고 하고 싶지만 아직 능력 부족으로 UIImage를 공유 컨테이너에서 제외하고 어떻게 이미지를 공유하는지에 대해 로직 구성을 못 할 것 같아 임시 방편을 세웠다. 저장된 모든 디데이 정보에서 제목과 디데이 정보 생성 시간을 identifier로 가공해서 그 정보를 Intent Handling에 넘겨 주는 방식으로 로직을 구현했다. 이것 역시 간단히 도식화 하면 아래와 같다.

위와 같이 구현하고 나니 문제가 말끔히 해결되었다. 사실 런칭 이후의 이슈를 생각하면 말끔히라는 말은 좀 양심 없는 것 같지만 일단 그땐 그렇게 생각했다…

런칭 이후의 주요 이슈와 서비스 운영 후기, 남은 숙제에 관해서는 다음 포스트에서 다루어야겠다. 너무 길어진 듯..


Dandi.(단디) 애플리케이션은 아래의 링크로 다운 받을 수 있다.