Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013yKDMhuF39GVYy3FMcGHh7
18 KiB
18 KiB
하루 다님 (HaruDanim) — 앱 스펙 문서
한 줄 소개: 하루의 습관과 시간을 추적하는 iOS 앱. 사용자가 등록한 "행동"의 소요 시간을 측정하거나 횟수를 기록하고, 이를 바탕으로 목표(Goal)와 다짐(Quest) 을 세워 달성 여부를 관리한다.
문서 버전: v1.0 (2026-07-06) / 이 문서는 개발자·AI에게 전달하기 위한 기획 명세서입니다.
1. 앱 개요
| 항목 | 내용 |
|---|---|
| 앱 이름 | 하루 다님 — 하루 습관 및 시간 추적 |
| 플랫폼 | iOS (추후 iPadOS 동기화, watchOS 앱 — 유료 기능) |
| 기본 언어 | 한국어 (설정에서 영어 / 일본어 전환 가능) |
| 핵심 콘셉트 | 시간 추적형 타임 트래커 + 습관 카운터/스트릭 관리를 하나로 합친 앱. 행동을 버튼 한 번으로 기록하고, 그 기록들이 모여 목표 달성률로 이어지는 구조 |
| 수익 모델 | 부분 유료화 (무료 사용 + 프리미엄 결제 시 제한 해제 및 확장 기능) |
| 결제 형태 | 월구독, 년구독, 일회성 결제이며 확정된 가격은 아니고 임시 가격으로는 월 구독은 월 5000원, 년 구독은 월 50000원, 일회성 결제는 80000원 이다. 금액은 추후 수정될 예정 |
2. 개발 환경 및 기술 스택
2.1 개발 환경
- 장비/도구: MacBook + Xcode
- Apple Developer Program: 현재 미가입 상태.
- 1단계: 미가입 상태로 구현 가능한 기능을 모두 먼저 구현
- 2단계: 구현 완료 후 가입하여 유료 계정이 필요한 기능(인앱결제, iCloud 동기화, 앱 배포 등) 추가 구현
- 프로젝트 구조: Xcode 프로젝트 생성 완료. 최상위 폴더명
HaruDanim, 그 하위의 앱 타깃 폴더명은iOS로 변경했으며 관련 설정(빌드 세팅, 경로 등)도 모두 반영된 상태
2.2 기술 스택
| 영역 | 기술 | 비고 |
|---|---|---|
| UI | SwiftUI | |
| 데이터 저장 | SwiftData | 프로젝트 생성 시 Storage는 None으로 선택했으나 실제 구현은 SwiftData 사용 |
| 시간 추적 (백그라운드/다이나믹 아일랜드/잠금화면) | ActivityKit — Live Activities | 앱을 나가도 추적 중인 시간 표시 |
| 위젯 | WidgetKit | 홈 화면 / 잠금 화면 위젯 (유료) |
| 워치 앱 | watchOS App + WidgetKit 기반 컴플리케이션 | 유료 |
| 통계 그래프 | Swift Charts | |
| 아이콘 | SF Symbols | 가능한 전체 심볼을 선택할 수 있도록 제공 |
| 결제 | StoreKit 2 | 개발자 프로그램 가입 후 |
| 기기 간 동기화 | CloudKit (SwiftData + CloudKit 연동) | 개발자 프로그램 가입 후, 유료 기능 |
| 다국어 | String Catalog (ko 기본, en / ja) |
2.3 개발 단계 구분 (개발자 프로그램 가입 기준)
- 가입 전 구현: 앱 본체 전체(행동/목표/다짐/꼬리표/기록/설정), SwiftData 저장, Live Activity·다이나믹 아일랜드, 위젯·워치 앱의 로직/UI (실기기 테스트는 무료 프로비저닝 범위 내)
- 가입 후 구현: 인앱결제(StoreKit), iCloud(CloudKit) 기기 간 동기화, App Store 배포
3. 핵심 용어 (도메인 개념)
3.1 행동 (Action)
- 추적·기록의 최소 단위. 습관(habit) 또는 할 일(task)을 등록한다.
- 추적 방식은 생성 시 둘 중 하나로 지정:
- 시간 추적형: 시작/종료 토글로 소요 시간을 측정. 앱이 백그라운드로 가도 측정이 계속 유지되어야 함 (Live Activity로 표시)
- 횟수 추적형: 탭할 때마다 카운트 +1
- 구성 요소: 이름, 아이콘(SF Symbols), 꼬리표(복수 지정 가능), 추적 방식(시간/횟수)
- 행동 버튼의 색은 지정된 꼬리표의 색을 따른다.
3.2 목표 (Goal)
- 상위 개념의 큰 목표. 사용자가 직접 텍스트로 작성 (예: "토익 700점 이상 받기")
- 구성 요소: 목표 내용(텍스트), 아이콘, 색, 시작일(필수, 과거 날짜 가능), 종료일(선택)
- 종료일 미지정 시 → 수동 완료 처리 가능해야 함. 이때 달성 여부는 하위 다짐들의 전체 달성 여부에 따라 결정
- 종료일 지정 시 → 목표 탭에 진행률 표시
3.3 다짐 (Quest)
- 목표의 하위 단위. 목표를 먼저 만들고, 그 목표 안에 다짐을 하나씩 추가하는 흐름
- 대상: 특정 행동 또는 특정 꼬리표를 선택
- 반복 주기 옵션:
- 하루 단위 / 일주일 단위 / 한 달 단위 / 특정 기간 단위
- 요일 지정: "매주 월·수·금" 등 복수 요일
- 날짜 지정: "매달 15일, 20일, 25일" 등 복수 날짜
- 주차+요일 지정: "매달 셋째 주 화요일" 등
- 목표량과 방향:
- 시간 추적형 행동 → 해당 기간 동안 특정 시간을 초과 달성(이상) 이 목표인지 / 초과하지 않음(이하) 이 목표인지 선택
- 횟수 추적형 행동 → 특정 횟수 이상이 목표인지 / 넘지 않음이 목표인지 선택
3.4 꼬리표 (Tag)
- 행동을 분류하는 태그. 고유의 색을 가지며 생성 시 색을 지정
- 생성 위치: 꼬리표 탭, 또는 행동 추가 화면의 꼬리표 지정 단계에서 즉석 추가
- 하나의 행동은 여러 개의 꼬리표를 가질 수 있음 (다대다 관계)
4. 시간 추적 시스템 (핵심 동작 명세)
4.1 기본 동작
- 시간 추적형 행동 버튼을 탭 → 측정 시작 / 다시 탭 → 측정 종료 (토글)
- 앱을 나가도 측정은 계속되며, 다이나믹 아일랜드와 잠금화면 실시간 현황(Live Activity) 에 추적 중인 시간이 표시됨
4.2 동시(멀티) 추적
- 한 행동을 측정 중인 상태에서, 종료하지 않고 다른 행동을 탭하면 그 행동도 함께 추적 시작 (동시 추적 개수 제한 없음)
- 다이나믹 아일랜드/잠금화면에 표시할 대표 시간은 설정에서 선택:
- 가장 먼저 시작한 행동 표시 / 가장 나중에 시작한 행동 표시 (기본값 제안: 가장 나중에 시작한 것)
- 여러 개를 동시에 추적 중이면 대표 시간 옆에
+1,+2형식으로 추가 추적 중인 개수를 표시
4.3 하루 경계(하루 시작 시간) 예외 처리
- 설정에서 "하루 시작 시간"을 지정 가능 (예: 오전 6시)
- 세션이 하루 경계를 걸치는 경우 (예: 하루 시작이 06:00일 때, 05:00 시작 → 07:00 종료):
- 저장: 세션 자체는 실제 시작~종료 시각 그대로 하나의 기록으로 저장
- 집계/통계: 하루 시작 시간을 기준으로 자동 분할하여 각 날짜에 귀속 (위 예시에서는 05:00
06:00은 전날, 06:0007:00은 당일 실적으로 계산) - 기록 탭 표시/다짐 진행률 계산에도 동일한 분할 규칙 적용
5. 화면 구성
5.1 로딩(스플래시) 화면
- 앱 실행 시 앱 로고 + 앱 이름이 표시되는 로딩 화면 필요 (로고는 아직 미제작 → 플레이스홀더로 진행 후 교체)
5.2 테마
- 라이트 / 다크 두 가지 모드
- 컬러 팔레트: 두 모드 모두 초록 + 노랑 + 배경색(라이트=흰색 계열 / 다크=검정 계열) 구성
- 모드별로 초록·노랑의 컬러 값을 다르게 하여 각 배경에 어울리게 조정. 흔한 원색 계열 초록/노랑은 배제
- 제안 컬러 값 (구현 시 조정 가능):
| 역할 | 라이트 모드 | 다크 모드 |
|---|---|---|
| Primary Green | #2F6B4F (딥 모스 그린) |
#7FBF9E (세이지 민트) |
| Accent Yellow | #D9A621 (머스터드 골드) |
#E8C558 (소프트 앰버) |
| Background | #FAFAF6 (웜 화이트) |
#111512 (그린 틴트 블랙) |
5.3 탭 구조 (총 6개, 순서 고정)
메인 → 행동 → 꼬리표 → 목표 → 기록 → 설정
6. 탭별 상세 명세
6.1 메인 탭
- 행동 버튼 그리드: 등록된 행동들이 스마트폰 홈 화면의 앱 아이콘처럼 나열됨
- 각 버튼: 라운드가 있는 직사각형 / 꼬리표 색 배경 + SF Symbols 아이콘 + 행동 이름
- 시간 추적형: 탭 → 측정 시작, 다시 탭 → 종료. 측정 중/아닐 때 시각적으로 구분 필수
- 횟수 추적형: 탭 → 카운트 +1
- 진행 중 영역: 측정 중인 행동은 메인 탭 상단의 "현재 진행 중" 영역에 표시. 옆의 종료 버튼으로 종료 가능 (아래 그리드의 버튼을 다시 탭해도 동일하게 종료)
- 길게 누르기(롱프레스) 메뉴:
- 횟수 추적형: ① 횟수 직접 입력/수정 (증가 취소 포함. 횟수를 여러 개 추가할 경우 각 건마다 "지금 시각"으로 기록할지 특정 시각을 지정할지 선택 가능) ② 행동 설정 수정 ③ 행동 삭제
- 시간 추적형: ① 시작/종료 시각 수동 입력·수정 ② 행동 설정 수정 ③ 행동 삭제
- 배치 편집 모드: 배치 수정 버튼 존재(위치는 구현 시 재량). 누르면 iPhone 홈 화면 편집처럼 버튼들이 흔들리며(지글 애니메이션) 드래그로 순서 변경 가능. "완료"를 누르면 배치가 저장·유지됨
6.2 행동 탭
- 등록된 모든 행동을 꼬리표별로 그룹화한 리스트로 표시
- 리스트에서 행동을 탭해도 측정이 동작하지 않음 → 대신 설정 내용 상세가 표시되고, 수정 버튼으로 수정 / 삭제 가능
- 행동 추가: 추가 버튼 → 이름, 아이콘, 꼬리표, 추적 방식(시간/횟수) 설정
- 아이콘 선택기는 SF Symbols를 최대한 폭넓게 전부 사용할 수 있도록 구성 (검색/카테고리 탐색 제공 권장)
6.3 꼬리표 탭
- 생성된 태그 목록 확인 / 새 태그 추가 / 기존 태그의 이름·색 수정
- 태그 생성 시 색 지정 필수
6.4 목표 탭
- 목표 생성: 내용(텍스트) + 아이콘 + 색 + 시작일(필수, 과거 가능) + 종료일(선택)
- 목표 상태 표시 (각각 다른 시각 상태 필요):
- 진행 중 (종료일 있으면 진행률 함께 표시)
- 달성 완료
- 미달성 종료
- 확인 필요: 다짐이 하나도 등록되지 않은 채 종료일이 도래한 목표 → "달성했나요?" 질문 상태로 전환, 사용자가 탭하여 달성/미달성 직접 선택 → 선택에 따라 2 또는 3 상태로 변경
- 종료일 없는 목표 → 수동 종료 버튼 제공. 종료 시 달성 여부는 하위 다짐 전체 달성 여부로 판정
- 다짐 추가 플로우: 목표 상세에서 [다짐 추가] → ① 대상 선택(행동 목록 또는 꼬리표 목록에서 선택) → ② 주기 선택(하루/주/월/특정 기간 + 요일·날짜·몇째 주 요일 옵션) → ③ 목표량 입력(시간 또는 횟수) + 방향 선택(이상 달성 / 이하 유지)
- 표시 구조: 목표 리스트 아래에 해당 목표의 다짐들이 하위 리스트로 표시되고, 각 다짐마다 하루 진행률 / 주간 진행률 / 월간 진행률이 표기됨
6.5 기록 탭
- 기본(일간) 뷰: 진입 시 오늘 하루의 기록 표시
- 시간 추적형: 각 행동을 언제부터 언제까지, 총 몇 시간 했는지
- 횟수 추적형: 언제 몇 번을 했는지(시각 포함)
- 각 기록을 탭하면 바로 수정 화면이 떠서 세부 데이터 수정 가능
- 상단 날짜 이동 버튼으로 이전/이후 날짜의 기록도 동일한 형태로 조회
- 타임테이블 뷰 (전환 버튼 제공):
- 24시간 축의 타임테이블. 하루 단위 / 일주일 단위 보기 전환 가능
- 시간 추적형 → 해당 시간 구간만큼 영역(블록)을 차지. 횟수 추적형 → 기록된 그 시점에 점/마커로 표시
- 표시는 행동의 아이콘 + 꼬리표 색 사용
- 통계 영역 (아래로 스크롤):
- 태그별 하루 시간 투자량 / 횟수 달성량
- 일주일별, 한 달별 집계
- 그래프(차트)로 빈도·비율을 한눈에 파악 가능하게 (Swift Charts)
6.6 설정 탭
- 테마: 라이트 / 다크 선택
- 언어: 한국어(기본) / 영어 / 일본어
- 주 시작 요일 설정 (기본값 제안: 월요일)
- 하루 시작 시간 설정 (기본값 제안: 00:00)
- Live Activity/다이나믹 아일랜드 대표 시간 기준: 가장 먼저 시작한 행동 / 가장 나중에 시작한 행동
- 프리미엄 기능 메뉴:
- 미결제 상태 → 유료 기능 소개 + 결제 화면으로 연결
- 결제 완료 상태 → 홈/잠금화면 위젯 사용 가능, 애플워치 앱 사용 가능, 기기 간 동기화 on/off 토글 제공
7. 무료 / 유료(프리미엄) 구분
7.1 무료 사용 제한
| 항목 | 무료 한도 |
|---|---|
| 행동(Action) | 최대 10개 |
| 목표(Goal) | 최대 2개 |
| 다짐(Quest) | 각 목표당 최대 3개 |
7.2 프리미엄 결제 시
- 위 개수 제한 전부 해제 (무제한)
- 홈 화면 및 잠금화면 위젯 사용 가능
- 아이패드, 맥북 앱과의 데이터 동기화 (iCloud)
- 애플워치 앱 + 워치 페이스 컴플리케이션 사용 가능
8. 위젯 명세 (프리미엄)
8.1 공통 — 위젯 테마 옵션
위젯 설정에서 선택:
- 앱 테마와 일치
- 라이트 고정 / 다크 고정
- 리퀴드 글라스(Liquid Glass) 스타일 — 유리 질감 배경 위에서 잘 보이도록 별도 디자인 변형 필요
8.2 행동 실행 및 표기 위젯 (홈 화면)
| 크기 | 구성 |
|---|---|
| 소형 A | 행동 1개의 실행 버튼. 시간 추적형은 탭으로 시작/종료 토글 + 누적 시간 표시, 횟수 추적형은 누적 횟수 표시. 표시 기간을 옵션에서 선택: 오늘 / 이번 주 / 이번 달. 위젯에 기간도 표기되어야함. |
| 소형 B | 특정 목표1개의 하루, 주간, 월별 진행률을 표시. 가로 형태의 진행바 사용. |
| 소형 C | 특정 목표의 특정 다짐 1개를 골라서 소형 A와 동일한 기능을 하도록. 이때 소형 A와 다르게 누적 값을 표기하는게 아닌 진행률을 원형 진행바를 활용해서 표현(진행율을 하루일지, 주간일지, 월간일지 옵션 선택) |
| 소형 D | 특정 목표의 다짐을 4개까지 가운데에 아이콘이 있고 그것을 원형 진행바가 감싸는 형태의 객체를 2 * 2 형태로 배치하고 최상단에 목표 이름이 적혀지게 한 위젯. 추가적인 기능은 없음 |
| 중형 A | 소형 A 스타일 셀 3개, Interactive Widgets 기능으로 3개 영역으로 나뉜(각 영역 명확히 구분되게) 영역별로 누르면 각 실행버튼의 실행동작을 수행. |
| 중형 B | 소형 B 스타일 셀 2개 |
| 중형 C | 소형 C 스타일 셀 2개, Interactive Widgets 기능으로 3개 영역으로 나뉜(각 영역 명확히 구분되게) 영역별로 누르면 각 실행버튼의 실행동작을 수행. |
| 중형 D | 소형 D 스타일인데 각 객체를 좀 더 크게 해서 1 * 4 형태로 나열, 혹 4개 이상일 경우 2줄로 객체 크기를 줄여서 최대 8개까지 표시 |
| 대형 A | 소형 A 스타일 셀 4개(2 by 2) |
| 대형 B | 소형 B 스타일 셀 4개 |
| 대형 C | 소형 C 스타일 셀 4개 |
| 대형 D | 중형 D 스타일 셀 2개 목표 2개를 중형 B 형태로 해서 2줄로 하거나 혹은 목표 1개에 대해 다짐을 크게 8개 혹은 작게 16개까지 표기 가능하도록 |
8.3 통계 위젯 (홈 화면)
- 옵션에서 어떤 행동의 통계를 보여줄지 선택(일주일 통계(가로축이 하루하루인 그래프), 한달 통계(가로축이 각 주인 그래프, 혹은 하루하루인 그래프))
- 선택한 행동의 누적값 꺾은선 그래프를 위젯으로 보여줌.
| 크기 | 구성 |
|---|---|
| 소형 | 선택한 행동들의 통계그래프(앱의 통계탭에 있는 꺾은선 그래프처럼 여러 행동들 각각 다르게 해서 같은 그래프에 그려지게)(이때 한달 통계의 경우 가로축이 하루하루인 그래프는 제외) |
| 중형 | 소형과 동일한데 사이즈를 더 키워서, 그리고 한달 통계를 선택했을 경우 가로축이 하루하루인 그래프 선택 가능) |
| 대형 | 중형에서 사이즈를 더 키운 형태 |
8.4 잠금화면 위젯
- 소형(1칸) 위주로 최소한만 구성
- 종류: 특정 목표 1개의 달성률 / 해당 목표에 속한 다짐들의 달성 여부 표시 등 간단한 정보 위주
- 점박이로 표기하거나 혹은 원형 진행바 사용하거나 아니면 단순하게 숫자만 적혀져있게 하던가 등등 간단하면서도 다양한 옵션 제공
9. 애플워치 앱 (프리미엄)
9.1 워치 앱 본체
- 진입 시 꼬리표(태그) 목록이 나열됨 → 태그를 탭하면 그 태그에 속한 행동 목록 표시
- 행동을 탭하면: 횟수 추적형 → 카운트 +1 / 시간 추적형 → 측정 시작·정지 토글
- iPhone 앱과 실시간 데이터 연동 필수 (워치에서 시작한 측정이 폰에도 반영, 그 반대도 동일)
9.2 컴플리케이션 (워치 페이스 요소)
- 현재 현황 컴플리케이션
- 시간 측정 중이면 어떤 행동이 실행 중인지 표시
- 표시 기준은 다이나믹 아일랜드/잠금화면과 동일한 설정을 따름 (여러 개면 설정된 기준의 대표 1개 + 추가 실행 개수 별도 표시, 추가 개수가 없으면 개수 표시 생략)
- 실행 중인 것이 없으면 "실행 중 아님" 상태로 표시
- 목표 달성률 컴플리케이션
- 지정한 특정 목표의 달성률 표시(이떄 하루 달성일지 주간 달성일지 월간 달성일지 선택가능)
- 다짐 달성률 컴플리케이션
- 특정 목표의 특정 다짐 1개만의 하루 혹은 주간, 혹은 월간 달성 정보 표기(크기에 따라서 3개 모두 표기하는 컴플리케이션도 추가)
- "넘기면 안 되는" 다짐(시간/횟수 상한형)의 경우 일반 달성형과 다른 시각 표현 사용 (예: 한도 대비 사용량으로 표시)
10. 시리 단축어 (프리미엄)
10.1 단축어 앱에서 동작 가능한 기능 나열
- 특정 목표의 하루/주간/월간 진행률 데이터 가져오기
- 특정 목표에 소속된 다짐의 하루/주간/월간 진행률 데이터 가져오기
- 특정 행동의 하루/주간/월간 누적값 데이터 가져오기
- 시간 측정 타입 행동 시작하기, 종료하기
- 횟수 측정 타입 행동의 횟수 바로 추가하기