DotoryCount는 날짜를 계산해 보여주는 앱이 아니라, 함께한 하루가 도토리 한 알로 쌓이는 모습을 매일 확인하는 감성 기록 앱을 목표로 한다.
- 매일 병 안에 도토리 한 알이 실제로 떨어지고 쌓이는 즐거움을 준다.
- 100일 단위와 매년 주년에는 황금도토리로 특별한 날을 기억하게 한다.
- 날짜 계산과 데이터 보존은 믿을 수 있어야 한다.
- 장식보다 도토리 병이 중심이 되는 단순하고 완성도 높은 화면을 유지한다.
- 한 개의 기념일을 SwiftData에 저장하고 D-day를 계산할 수 있다.
- 현재 연도의 도토리를
Canvas에 정적인 격자로 그린다. - 다음 100일 또는 주년을 안내한다.
- 병 속 낙하 애니메이션과 황금도토리는 아직 없다.
- 여러 기념일 관리, 기록 탐색, 알림, 위젯, 백업과 동기화가 없다.
- 기본 단위 테스트와 생성·삭제 UI 테스트만 갖춘 초기 프로토타입이다.
- 기준일을 0일째로 보고, 하루가 지날 때마다 현재 병에 도토리 한 알을 추가한다.
- 병 하나는 해당 주년부터 다음 주년 전날까지를 담는다.
- 윤년과 사용자의 달력·시간대에서도 날짜 경계가 정확해야 한다.
- 100일, 200일, 300일처럼 100일마다 황금도토리로 표시한다.
- 1주년, 2주년처럼 매년 주년에도 황금도토리로 표시한다.
- 100일 단위와 주년이 같은 날짜라면 한 알의 특별한 황금도토리로 합친다.
- 황금도토리를 선택하면 어떤 기념일인지 날짜와 의미를 확인할 수 있다.
- 앱을 열었을 때 오늘 추가된 도토리만 병 입구에서 자연스럽게 떨어진다.
- 이미 쌓인 도토리는 매번 재배치되지 않고 동일한 위치를 유지한다.
- 황금도토리는 짧은 빛 효과와 절제된 햅틱으로 특별함을 표현한다.
동작 줄이기가 활성화되면 낙하 대신 짧은 페이드 전환을 사용한다.- 효과음과 햅틱은 설정에서 끌 수 있어야 한다.
상태: 완료 (2026-09-14)
목표: 앱을 여는 순간 제품의 핵심 가치가 바로 느껴지게 한다.
- 현재 격자 렌더링을 안정적인 자연 적층 형태로 교체한다.
- 오늘의 도토리가 병 안으로 떨어져 자리 잡는 애니메이션을 구현한다.
- 앱을 다시 열어도 기존 도토리 위치가 바뀌지 않는 결정적 배치를 사용한다.
- 도토리, 유리, 빛, 그림자를 앱 아이콘과 같은 시각 언어로 통일한다.
- 빈 병, 적은 수량, 반쯤 찬 병, 365/366개 병의 Preview를 만든다.
- VoiceOver 설명과
동작 줄이기대체 표현을 추가한다.
완료 기준:
- 0~366개 모든 상태에서 병 밖으로 도토리가 새지 않는다.
- 최근 지원 기기에서 애니메이션 중 눈에 띄는 끊김이 없다.
- 날짜가 바뀐 뒤 최초 한 번만 새 도토리 애니메이션이 실행된다.
- 일반·다크 모드와 큰 글자 크기에서 핵심 정보가 읽힌다.
상태: 완료 (2026-09-19)
목표: 특별한 날짜가 병 안에 시각적으로 남게 한다.
- 100일 단위와 매년 주년을 계산하는 단일 마일스톤 모델을 만든다.
- 황금 재질, 은은한 광택과 짧은 축하 애니메이션을 구현한다.
- 황금도토리를 선택하면 기념일 이름, 날짜, 경과 일수를 표시한다.
- 오늘이 특별한 날이면 홈 상단에 축하 메시지를 보여준다.
- 중복 마일스톤, 윤년, 시간대 변경, 미래 기준일 테스트를 추가한다.
- 화면의 사실감을 위해 처음 14일은 하루 단위, 이후에는 7일 단위로 표현해 한 병에 최대 약 64개의 큰 도토리를 사용한다. 실제 날짜 계산은 축약하지 않는다.
완료 기준:
- 황금도토리의 위치와 의미가 날짜 계산 결과와 항상 일치한다.
- 같은 날짜의 중복 이벤트는 한 알로 표시되고 의미는 모두 확인할 수 있다.
- 축하 효과가 반복 실행되거나 사용자를 방해하지 않는다.
상태: 완료 (2026-09-20)
- 화면 탭, 앱 실행과 포그라운드 복귀 때 도토리 낙하를 재생한다.
- 편집 및 기념일 상세 화면에서 홈으로 돌아올 때 낙하를 재생한다.
- Canvas 렌더링에서 도토리 원본 비율을 유지해 찌그러짐을 제거한다.
- 간격, 회전과 겹침을 조정해 병 안의 적층을 더 자연스럽게 만든다.
- 반복 애니메이션과 화면 복귀 흐름을 UI 테스트로 검증한다.
상태: v0.4.0 출시 (36단계 병, 가변 낙하 모션, 기준일 선택 개선)
목표: 앱 아이콘의 유리병·도토리 품질을 홈 화면의 움직이는 장면으로 옮긴다.
- 아이콘을 시각 기준으로 한 영상 또는 오프라인 3D 렌더를 먼저 확정한다.
- 도토리가 병 입구를 지나 유리 뒤로 들어가고 실제 더미에 닿아 자리 잡게 한다.
- 날짜 구간별 채움 상태와 100일·주년 황금도토리 변형을 준비한다.
- 병을 첫 화면의 주인공으로 두고 D-day와 다음 기념일은 보조 정보로 배치한다.
- 빈 상태, 오류 상태, 미래 기념일 상태를 같은 품질로 다듬는다.
- 앱 실행·탭·화면 복귀 때 재생하고 동작 줄이기용 정지 화면을 제공한다.
완료 기준:
- 앱 아이콘과 실제 홈 장면의 유리·도토리 스타일 차이가 크지 않다.
- 실제 날짜와 표시된 병의 채움 단계가 일치하며 시안 고정 이미지를 사용하지 않는다.
- 작은 화면, 큰 화면, 가로·세로 글자 확대에서 정보가 잘리지 않는다.
- 대비, VoiceOver 순서, 터치 영역이 접근성 기준을 충족한다.
상태: 출시 준비 중. iOS 26의 시스템 유리 소재를 조작부에 적용하고 앱을 열지 않아도 날짜를 볼 수 있게 한다.
- 잠금화면에는 작은 가로형 날짜 카운터를 제공한다.
- 홈 화면에는 사진형 유리병과 날짜를 보여주는 작은 위젯을 제공한다.
- 기념일 수정·삭제와 날짜 변경이 위젯에 반영되게 한다.
- iOS 17–25에서도 기존 소재로 화면을 유지한다.
완료 기준:
- 위젯이 앱과 같은 기준일을 사용하고 날짜가 바뀌면 갱신된다.
- 잠금화면 위젯의 문자 대비와 홈 화면 위젯의 병이 읽기 쉽다.
목표: 앱을 열지 않아도 중요한 날짜를 놓치지 않게 한다.
- 여러 기념일 관리와 지난 주년 병 보관함을 검토한다.
- 100일 단위와 주년 전에 선택적으로 알림을 받을 수 있게 한다.
- 알림 시각, 햅틱, 효과음 설정을 제공한다.
- 알림 권한을 기능 설명 이후에 요청하고 거절 상태도 자연스럽게 처리한다.
완료 기준:
- 여러 기념일을 도입하면 위젯의 기념일 선택 방법을 함께 마련한다.
- 중복 알림이 발생하지 않고 설정 변경이 즉시 반영된다.
- 권한을 허용하지 않아도 핵심 앱 기능을 모두 사용할 수 있다.
목표: 사용자의 소중한 날짜를 잃지 않게 한다.
- SwiftData 스키마 버전과 마이그레이션 정책을 도입한다.
- 기념일 데이터를 파일로 내보내고 다시 가져오는 기능을 제공한다.
- 손상·중복·실패 상황에서 복구 가능한 오류 처리를 구현한다.
- Apple Developer Program 가입 이후 iCloud 동기화를 선택 기능으로 검토한다.
- 개인정보 수집 최소화 원칙과 데이터 처리 문서를 작성한다.
완료 기준:
- 이전 버전 데이터가 업데이트 후 유지된다.
- 내보내기와 가져오기 왕복 후 날짜와 설정이 동일하다.
- 오프라인에서도 핵심 기능이 정상 동작한다.
목표: 외부 사용자가 설치하고 피드백을 줄 수 있는 품질에 도달한다.
- 첫 실행 온보딩과 핵심 기능 설명을 완성한다.
- 설정, 버전 정보, 개인정보 처리방침, 문의 경로를 추가한다.
- 한국어 문구를 정리하고 영어 현지화를 준비한다.
- 크래시, 메모리, 배터리, 애니메이션 성능을 점검한다.
- TestFlight 내부 테스트 후 외부 베타를 순차 진행한다.
완료 기준:
- 치명적 버그와 데이터 손실 문제가 없다.
- 주요 사용자 흐름의 자동 테스트와 실기기 테스트가 통과한다.
- 베타 피드백의 심각도 높은 문제를 모두 분류하고 처리한다.
목표: 기능 추가를 멈추고 1.0 출시 품질을 확정한다.
- 접근성, 현지화, 다크 모드, 다양한 화면 크기를 최종 점검한다.
- 개인정보 매니페스트, 권한 문구, 지원·개인정보 페이지를 준비한다.
- 앱 이름, 부제, 설명, 키워드, 스크린샷과 미리보기를 제작한다.
- 회귀 테스트, 마이그레이션 테스트와 실제 배포 빌드를 검증한다.
- 알려진 문제와 출시 후 대응 기준을 문서화한다.
완료 기준:
- 출시 차단 등급의 버그가 0개다.
- App Store Connect 필수 항목과 심사 자료가 모두 준비되어 있다.
- 릴리즈 후보 빌드를 TestFlight에서 실제 사용자 흐름으로 승인한다.
목표: 도토리가 쌓이는 핵심 경험을 신뢰할 수 있는 제품으로 출시한다.
- 승인된 릴리즈 후보를 App Store 심사에 제출한다.
- 지원 및 개인정보 페이지를 공개한다.
- 출시 태그, 변경 이력과 운영 체크리스트를 확정한다.
- 심사 피드백과 출시 후 치명적 문제에 대응할 수 있는 패치 절차를 준비한다.
출시 기준:
- 애니메이션 도토리 병과 황금도토리가 제품의 핵심 경험으로 완성되어 있다.
- 날짜 계산, 데이터 보존, 위젯과 알림이 신뢰성 기준을 충족한다.
- 접근성·개인정보·스토어 메타데이터·지원 경로가 준비되어 있다.
- TestFlight에서 승인한 빌드와 App Store 제출 빌드가 동일하다.
- 각 버전은 기능 구현, 단위 테스트, 핵심 UI 테스트, 실기기 확인을 함께 완료한다.
- 계산 로직과 화면 렌더링을 분리해 날짜 규칙을 독립적으로 테스트한다.
- 도토리 전체를 매 프레임 다시 계산하지 않고, 움직이는 도토리만 갱신한다.
- 접근성,
동작 줄이기, 다크 모드와 큰 글자 크기를 나중으로 미루지 않는다. - 릴리즈마다 브랜치, PR, CI, 변경 이력과 GitHub 릴리즈를 유지한다.
- 사용자 데이터 형식이 바뀌면 반드시 마이그레이션과 복구 경로를 먼저 만든다.
v0.5.0은 Liquid Glass 조작부와 잠금·홈 화면 위젯을 제공한다. 다음에는 여러 기념일, 작은 화면, 큰 글자 및 VoiceOver 접근성 검증을 다듬는다.