Skip to content

Latest commit

 

History

History
222 lines (154 loc) · 11.2 KB

ROADMAP.md

File metadata and controls

222 lines (154 loc) · 11.2 KB

DotoryCount 1.0 개발 로드맵

제품 방향

DotoryCount는 날짜를 계산해 보여주는 앱이 아니라, 함께한 하루가 도토리 한 알로 쌓이는 모습을 매일 확인하는 감성 기록 앱을 목표로 한다.

  1. 매일 병 안에 도토리 한 알이 실제로 떨어지고 쌓이는 즐거움을 준다.
  2. 100일 단위와 매년 주년에는 황금도토리로 특별한 날을 기억하게 한다.
  3. 날짜 계산과 데이터 보존은 믿을 수 있어야 한다.
  4. 장식보다 도토리 병이 중심이 되는 단순하고 완성도 높은 화면을 유지한다.

현재 기준선 — v0.1.1

  • 한 개의 기념일을 SwiftData에 저장하고 D-day를 계산할 수 있다.
  • 현재 연도의 도토리를 Canvas에 정적인 격자로 그린다.
  • 다음 100일 또는 주년을 안내한다.
  • 병 속 낙하 애니메이션과 황금도토리는 아직 없다.
  • 여러 기념일 관리, 기록 탐색, 알림, 위젯, 백업과 동기화가 없다.
  • 기본 단위 테스트와 생성·삭제 UI 테스트만 갖춘 초기 프로토타입이다.

핵심 규칙

일반 도토리

  • 기준일을 0일째로 보고, 하루가 지날 때마다 현재 병에 도토리 한 알을 추가한다.
  • 병 하나는 해당 주년부터 다음 주년 전날까지를 담는다.
  • 윤년과 사용자의 달력·시간대에서도 날짜 경계가 정확해야 한다.

황금도토리

  • 100일, 200일, 300일처럼 100일마다 황금도토리로 표시한다.
  • 1주년, 2주년처럼 매년 주년에도 황금도토리로 표시한다.
  • 100일 단위와 주년이 같은 날짜라면 한 알의 특별한 황금도토리로 합친다.
  • 황금도토리를 선택하면 어떤 기념일인지 날짜와 의미를 확인할 수 있다.

움직임

  • 앱을 열었을 때 오늘 추가된 도토리만 병 입구에서 자연스럽게 떨어진다.
  • 이미 쌓인 도토리는 매번 재배치되지 않고 동일한 위치를 유지한다.
  • 황금도토리는 짧은 빛 효과와 절제된 햅틱으로 특별함을 표현한다.
  • 동작 줄이기가 활성화되면 낙하 대신 짧은 페이드 전환을 사용한다.
  • 효과음과 햅틱은 설정에서 끌 수 있어야 한다.

버전별 계획

v0.2.0 — 살아 있는 도토리 병

상태: 완료 (2026-09-14)

목표: 앱을 여는 순간 제품의 핵심 가치가 바로 느껴지게 한다.

  • 현재 격자 렌더링을 안정적인 자연 적층 형태로 교체한다.
  • 오늘의 도토리가 병 안으로 떨어져 자리 잡는 애니메이션을 구현한다.
  • 앱을 다시 열어도 기존 도토리 위치가 바뀌지 않는 결정적 배치를 사용한다.
  • 도토리, 유리, 빛, 그림자를 앱 아이콘과 같은 시각 언어로 통일한다.
  • 빈 병, 적은 수량, 반쯤 찬 병, 365/366개 병의 Preview를 만든다.
  • VoiceOver 설명과 동작 줄이기 대체 표현을 추가한다.

완료 기준:

  • 0~366개 모든 상태에서 병 밖으로 도토리가 새지 않는다.
  • 최근 지원 기기에서 애니메이션 중 눈에 띄는 끊김이 없다.
  • 날짜가 바뀐 뒤 최초 한 번만 새 도토리 애니메이션이 실행된다.
  • 일반·다크 모드와 큰 글자 크기에서 핵심 정보가 읽힌다.

v0.3.0 — 황금도토리와 축하 경험

상태: 완료 (2026-09-19)

목표: 특별한 날짜가 병 안에 시각적으로 남게 한다.

  • 100일 단위와 매년 주년을 계산하는 단일 마일스톤 모델을 만든다.
  • 황금 재질, 은은한 광택과 짧은 축하 애니메이션을 구현한다.
  • 황금도토리를 선택하면 기념일 이름, 날짜, 경과 일수를 표시한다.
  • 오늘이 특별한 날이면 홈 상단에 축하 메시지를 보여준다.
  • 중복 마일스톤, 윤년, 시간대 변경, 미래 기준일 테스트를 추가한다.
  • 화면의 사실감을 위해 처음 14일은 하루 단위, 이후에는 7일 단위로 표현해 한 병에 최대 약 64개의 큰 도토리를 사용한다. 실제 날짜 계산은 축약하지 않는다.

완료 기준:

  • 황금도토리의 위치와 의미가 날짜 계산 결과와 항상 일치한다.
  • 같은 날짜의 중복 이벤트는 한 알로 표시되고 의미는 모두 확인할 수 있다.
  • 축하 효과가 반복 실행되거나 사용자를 방해하지 않는다.

v0.3.1 — 도토리 낙하와 적층 보정

상태: 완료 (2026-09-20)

  • 화면 탭, 앱 실행과 포그라운드 복귀 때 도토리 낙하를 재생한다.
  • 편집 및 기념일 상세 화면에서 홈으로 돌아올 때 낙하를 재생한다.
  • Canvas 렌더링에서 도토리 원본 비율을 유지해 찌그러짐을 제거한다.
  • 간격, 회전과 겹침을 조정해 병 안의 적층을 더 자연스럽게 만든다.
  • 반복 애니메이션과 화면 복귀 흐름을 UI 테스트로 검증한다.

v0.4.0 — 홈 화면 전면 개선

상태: v0.4.0 출시 (36단계 병, 가변 낙하 모션, 기준일 선택 개선)

목표: 앱 아이콘의 유리병·도토리 품질을 홈 화면의 움직이는 장면으로 옮긴다.

  • 아이콘을 시각 기준으로 한 영상 또는 오프라인 3D 렌더를 먼저 확정한다.
  • 도토리가 병 입구를 지나 유리 뒤로 들어가고 실제 더미에 닿아 자리 잡게 한다.
  • 날짜 구간별 채움 상태와 100일·주년 황금도토리 변형을 준비한다.
  • 병을 첫 화면의 주인공으로 두고 D-day와 다음 기념일은 보조 정보로 배치한다.
  • 빈 상태, 오류 상태, 미래 기념일 상태를 같은 품질로 다듬는다.
  • 앱 실행·탭·화면 복귀 때 재생하고 동작 줄이기용 정지 화면을 제공한다.

완료 기준:

  • 앱 아이콘과 실제 홈 장면의 유리·도토리 스타일 차이가 크지 않다.
  • 실제 날짜와 표시된 병의 채움 단계가 일치하며 시안 고정 이미지를 사용하지 않는다.
  • 작은 화면, 큰 화면, 가로·세로 글자 확대에서 정보가 잘리지 않는다.
  • 대비, VoiceOver 순서, 터치 영역이 접근성 기준을 충족한다.

v0.5.0 — Liquid Glass와 위젯

상태: 출시 준비 중. iOS 26의 시스템 유리 소재를 조작부에 적용하고 앱을 열지 않아도 날짜를 볼 수 있게 한다.

  • 잠금화면에는 작은 가로형 날짜 카운터를 제공한다.
  • 홈 화면에는 사진형 유리병과 날짜를 보여주는 작은 위젯을 제공한다.
  • 기념일 수정·삭제와 날짜 변경이 위젯에 반영되게 한다.
  • iOS 17–25에서도 기존 소재로 화면을 유지한다.

완료 기준:

  • 위젯이 앱과 같은 기준일을 사용하고 날짜가 바뀌면 갱신된다.
  • 잠금화면 위젯의 문자 대비와 홈 화면 위젯의 병이 읽기 쉽다.

v0.6.0 — 매일 다시 찾게 하는 기능

목표: 앱을 열지 않아도 중요한 날짜를 놓치지 않게 한다.

  • 여러 기념일 관리와 지난 주년 병 보관함을 검토한다.
  • 100일 단위와 주년 전에 선택적으로 알림을 받을 수 있게 한다.
  • 알림 시각, 햅틱, 효과음 설정을 제공한다.
  • 알림 권한을 기능 설명 이후에 요청하고 거절 상태도 자연스럽게 처리한다.

완료 기준:

  • 여러 기념일을 도입하면 위젯의 기념일 선택 방법을 함께 마련한다.
  • 중복 알림이 발생하지 않고 설정 변경이 즉시 반영된다.
  • 권한을 허용하지 않아도 핵심 앱 기능을 모두 사용할 수 있다.

v0.7.0 — 데이터 신뢰성과 복구

목표: 사용자의 소중한 날짜를 잃지 않게 한다.

  • SwiftData 스키마 버전과 마이그레이션 정책을 도입한다.
  • 기념일 데이터를 파일로 내보내고 다시 가져오는 기능을 제공한다.
  • 손상·중복·실패 상황에서 복구 가능한 오류 처리를 구현한다.
  • Apple Developer Program 가입 이후 iCloud 동기화를 선택 기능으로 검토한다.
  • 개인정보 수집 최소화 원칙과 데이터 처리 문서를 작성한다.

완료 기준:

  • 이전 버전 데이터가 업데이트 후 유지된다.
  • 내보내기와 가져오기 왕복 후 날짜와 설정이 동일하다.
  • 오프라인에서도 핵심 기능이 정상 동작한다.

v0.8.0 — TestFlight 베타

목표: 외부 사용자가 설치하고 피드백을 줄 수 있는 품질에 도달한다.

  • 첫 실행 온보딩과 핵심 기능 설명을 완성한다.
  • 설정, 버전 정보, 개인정보 처리방침, 문의 경로를 추가한다.
  • 한국어 문구를 정리하고 영어 현지화를 준비한다.
  • 크래시, 메모리, 배터리, 애니메이션 성능을 점검한다.
  • TestFlight 내부 테스트 후 외부 베타를 순차 진행한다.

완료 기준:

  • 치명적 버그와 데이터 손실 문제가 없다.
  • 주요 사용자 흐름의 자동 테스트와 실기기 테스트가 통과한다.
  • 베타 피드백의 심각도 높은 문제를 모두 분류하고 처리한다.

v0.9.0 — App Store 출시 후보

목표: 기능 추가를 멈추고 1.0 출시 품질을 확정한다.

  • 접근성, 현지화, 다크 모드, 다양한 화면 크기를 최종 점검한다.
  • 개인정보 매니페스트, 권한 문구, 지원·개인정보 페이지를 준비한다.
  • 앱 이름, 부제, 설명, 키워드, 스크린샷과 미리보기를 제작한다.
  • 회귀 테스트, 마이그레이션 테스트와 실제 배포 빌드를 검증한다.
  • 알려진 문제와 출시 후 대응 기준을 문서화한다.

완료 기준:

  • 출시 차단 등급의 버그가 0개다.
  • App Store Connect 필수 항목과 심사 자료가 모두 준비되어 있다.
  • 릴리즈 후보 빌드를 TestFlight에서 실제 사용자 흐름으로 승인한다.

v1.0.0 — 첫 App Store 출시

목표: 도토리가 쌓이는 핵심 경험을 신뢰할 수 있는 제품으로 출시한다.

  • 승인된 릴리즈 후보를 App Store 심사에 제출한다.
  • 지원 및 개인정보 페이지를 공개한다.
  • 출시 태그, 변경 이력과 운영 체크리스트를 확정한다.
  • 심사 피드백과 출시 후 치명적 문제에 대응할 수 있는 패치 절차를 준비한다.

출시 기준:

  • 애니메이션 도토리 병과 황금도토리가 제품의 핵심 경험으로 완성되어 있다.
  • 날짜 계산, 데이터 보존, 위젯과 알림이 신뢰성 기준을 충족한다.
  • 접근성·개인정보·스토어 메타데이터·지원 경로가 준비되어 있다.
  • TestFlight에서 승인한 빌드와 App Store 제출 빌드가 동일하다.

모든 버전에 적용할 품질 원칙

  • 각 버전은 기능 구현, 단위 테스트, 핵심 UI 테스트, 실기기 확인을 함께 완료한다.
  • 계산 로직과 화면 렌더링을 분리해 날짜 규칙을 독립적으로 테스트한다.
  • 도토리 전체를 매 프레임 다시 계산하지 않고, 움직이는 도토리만 갱신한다.
  • 접근성, 동작 줄이기, 다크 모드와 큰 글자 크기를 나중으로 미루지 않는다.
  • 릴리즈마다 브랜치, PR, CI, 변경 이력과 GitHub 릴리즈를 유지한다.
  • 사용자 데이터 형식이 바뀌면 반드시 마이그레이션과 복구 경로를 먼저 만든다.

당장 다음 작업

v0.5.0은 Liquid Glass 조작부와 잠금·홈 화면 위젯을 제공한다. 다음에는 여러 기념일, 작은 화면, 큰 글자 및 VoiceOver 접근성 검증을 다듬는다.