포스트

Remindy iOS 홈 위젯 만들기

리마인더를 앱 밖에서도 확인하기 위한 위젯 MVP

Remindy iOS 홈 위젯 만들기

Remindy의 기본 앱 흐름이 만들어진 뒤에는 사용자가 앱을 직접 열지 않아도 리마인더를 확인할 수 있도록 iOS 홈 위젯을 만들기 시작했다. 위젯 MVP를 만들면서 네이티브 타깃과 데이터 공유를 어떻게 다뤘는지 적어본다.

Remindy 실제 구현 화면

1. 위젯 MVP

처음에는 위젯에서 복잡한 기능을 모두 제공하기보다 현재 리마인더를 보여주는 것부터 시작했다.

1
2
3
4
Remindy 앱 데이터
  → 위젯 브리지
  → snapshot 저장
  → iOS 홈 위젯 렌더링

앱과 위젯은 실행 환경이 다르기 때문에 데이터를 공유하는 경계를 명확히 해야 했다. 위젯이 앱의 모든 상태를 직접 읽는 대신 위젯에 필요한 snapshot을 만들어 전달하는 방식으로 접근했다.

2. 네이티브 타깃을 추가하면서 생긴 문제

Expo 프로젝트에 iOS 위젯 extension을 추가하면서 브리지 파일 경로와 native target 설정을 조정했다. 목업과 실제 위젯의 정렬이 다르게 보이는 문제도 있어 디자인과 구현을 함께 맞췄다.

위젯은 작은 화면 안에서 정보의 우선순위를 정해야 한다. Medium과 Small 사이즈에서 같은 내용을 그대로 보여줄 수 없기 때문에 크기별 정보 밀도를 다르게 설계해야 했다.

Small 위젯에서는 가장 가까운 리마인더와 빠른 실행 버튼만 보여주고 Medium 위젯에서는 여러 리마인더와 등록, 목록 바로가기를 함께 보여주는 방향으로 목업을 정리했다. 화면이 작아질수록 기능을 줄이는 것이 아니라 사용자의 우선 행동을 남기는 작업이 필요했다.

3. 앱의 경계를 넓히다

위젯은 새로운 기능 하나를 추가하는 것보다 기존 앱의 데이터를 다른 실행 환경에 전달하는 작업에 가까웠다. 로컬 캐시와 snapshot, 업데이트 주기를 함께 고려해야 했다.

이번 MVP를 바탕으로 빠른 리마인더 등록과 목록 바로가기까지 확장할 계획이다. 사용자가 알림을 기다리는 것뿐 아니라 홈 화면에서 바로 행동을 시작할 수 있는 앱으로 발전시키고 싶다.

위젯은 앱의 부가 기능이 아니라 앱을 다시 열게 만드는 진입점이 될 수 있다. 앞으로 snapshot 갱신 주기와 로컬 캐시 정책을 함께 다듬어 오래된 정보가 보이거나 업데이트가 늦어지는 문제도 줄여볼 계획이다.

4. 데이터 최신성과 위젯의 한계

위젯은 앱 화면처럼 항상 최신 데이터를 요청할 수 없다. 시스템이 위젯 업데이트 시점을 결정하기 때문에 앱에서 변경된 리마인더를 위젯이 언제 반영할지 정책이 필요하다.

그래서 위젯에는 다음 정보를 함께 고려해야 한다.

  • 마지막 snapshot이 생성된 시각
  • 가장 가까운 리마인더의 due date
  • 앱이 마지막으로 동기화된 시각
  • 데이터가 없는 경우의 빈 상태

오래된 데이터를 최신처럼 보여주는 것보다, 마지막 갱신 시점을 구분해 보여주는 편이 사용자에게 더 정직할 수 있다.

5. 네이티브 기능을 다루며 배운 것

Expo를 사용하면 앱 기능을 빠르게 만들 수 있지만 위젯처럼 운영체제의 native target과 연결되는 기능에서는 iOS 프로젝트 구조를 직접 이해해야 했다. 브리지 파일 하나의 경로가 잘못되어도 빌드와 실행이 모두 막힐 수 있었다.

이번에는 앱 안에 기능 하나를 더한 것이 아니라 Remindy를 홈 화면에서도 만날 수 있게 만들었다. 먼저 작은 MVP로 시작하고 실제로 자주 볼 정보와 빠른 동작을 남기는 쪽으로 다듬어볼 계획이다.


위젯은 앱의 데이터를 다른 화면으로 옮기는 작업처럼 보였지만 실제로는 어떤 정보를 가장 자주 보여줄지 다시 고르는 작업이었다. 작은 화면에서도 Remindy의 목적이 잘 드러나도록 조금씩 다듬어볼 예정이다.

끝!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.