mycode/myApp/HaruDanim/CLAUDE.md
2026-07-10 03:02:15 +09:00

18 KiB
Raw Blame History

하루 다님 (HaruDanim) — 앱 스펙 문서

한 줄 소개: 하루의 습관과 시간을 추적하는 iOS 앱. 사용자가 등록한 "행동"의 소요 시간을 측정하거나 횟수를 기록하고, 이를 바탕으로 목표(Goal)와 다짐(Quest) 을 세워 달성 여부를 관리한다.

문서 버전: v1.0 (2026-07-06) / 이 문서는 개발자·AI에게 전달하기 위한 기획 명세서입니다.


1. 앱 개요

항목 내용
앱 이름 하루 다님 — 하루 습관 및 시간 추적
플랫폼 iOS (추후 iPadOS 동기화, watchOS 앱 — 유료 기능)
기본 언어 한국어 (설정에서 영어 / 일본어 전환 가능)
핵심 콘셉트 시간 추적형 타임 트래커 + 습관 카운터/스트릭 관리를 하나로 합친 앱. 행동을 버튼 한 번으로 기록하고, 그 기록들이 모여 목표 달성률로 이어지는 구조
수익 모델 부분 유료화 (무료 사용 + 프리미엄 결제 시 제한 해제 및 확장 기능)

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)을 등록한다.
  • 추적 방식은 생성 시 둘 중 하나로 지정:
    1. 시간 추적형: 시작/종료 토글로 소요 시간을 측정. 앱이 백그라운드로 가도 측정이 계속 유지되어야 함 (Live Activity로 표시)
    2. 횟수 추적형: 탭할 때마다 카운트 +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:0006: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 목표 탭

  • 목표 생성: 내용(텍스트) + 아이콘 + 색 + 시작일(필수, 과거 가능) + 종료일(선택)
  • 목표 상태 표시 (각각 다른 시각 상태 필요):
    1. 진행 중 (종료일 있으면 진행률 함께 표시)
    2. 달성 완료
    3. 미달성 종료
    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 공통 — 위젯 테마 옵션

위젯 설정에서 선택:

  1. 앱 테마와 일치
  2. 라이트 고정 / 다크 고정
  3. 리퀴드 글라스(Liquid Glass) 스타일 — 유리 질감 배경 위에서 잘 보이도록 별도 디자인 변형 필요

8.2 행동 실행 위젯 (홈 화면)

크기 구성
소형 A 행동 1개의 실행 버튼. 시간 추적형은 탭으로 시작/종료 토글 + 누적 시간 표시, 횟수 추적형은 누적 횟수 표시. 표시 기간을 옵션에서 선택: 오늘 / 이번 주 / 이번 달
소형 B 소형 A를 축소·간소화한 셀을 2×2로 배치 → 행동 4개
중형 A 소형 A 스타일 셀 3개
중형 B 소형 B 스타일 셀 8개
대형 중형 기준으로 동일한 방식으로 확장 (중형 A 확장형 / 중형 B 확장형)

8.3 목표/다짐 통계 위젯 (홈 화면)

  • 옵션에서 어떤 목표를 표시할지 선택 가능. 목표 전체 또는 그 목표의 특정 다짐만 표시하는 것도 가능
  • 진행 정보는 하루 / 주간 / 월간 진행률 등으로 표기
크기 구성
소형 목표 1개의 달성률/통계
중형 ① 목표 1개를 소형보다 상세하게, 또는 ② 목표 2개를 소형처럼 간단하게
대형 ① 목표 2개를 중형 수준으로 상세하게, 또는 ② 목표 4개를 간단하게

8.4 잠금화면 위젯

  • 소형(1칸) 위주로 최소한만 구성
  • 종류: 특정 목표 1개의 달성률 / 해당 목표에 속한 다짐들의 달성 여부 표시 등 간단한 정보 위주

9. 애플워치 앱 (프리미엄)

9.1 워치 앱 본체

  • 진입 시 꼬리표(태그) 목록이 나열됨 → 태그를 탭하면 그 태그에 속한 행동 목록 표시
  • 행동을 탭하면: 횟수 추적형 → 카운트 +1 / 시간 추적형 → 측정 시작·정지 토글
  • iPhone 앱과 실시간 데이터 연동 필수 (워치에서 시작한 측정이 폰에도 반영, 그 반대도 동일)

9.2 컴플리케이션 (워치 페이스 요소)

  1. 현재 현황 컴플리케이션
    • 시간 측정 중이면 어떤 행동이 실행 중인지 표시
    • 표시 기준은 다이나믹 아일랜드/잠금화면과 동일한 설정을 따름 (여러 개면 설정된 기준의 대표 1개 + 추가 실행 개수 별도 표시, 추가 개수가 없으면 개수 표시 생략)
    • 실행 중인 것이 없으면 "실행 중 아님" 상태로 표시
  2. 목표 달성률 컴플리케이션
    • 지정한 특정 목표의 달성률 표시
    • "넘기면 안 되는" 목표(시간/횟수 상한형)의 경우 일반 달성형과 다른 시각 표현 사용 (예: 한도 대비 사용량으로 표시)

10. 데이터 모델 (SwiftData 설계 제안)

사용자가 기술한 기능을 구현하기 위한 권장 모델 구조. 세부 필드는 구현 시 조정 가능.

  • Tag: id, 이름, 색상, 생성일
  • Action: id, 이름, SF Symbol 이름, 추적방식(time | count), 태그들(다대다), 메인 화면 정렬 순서
  • TimeSession (시간 기록): id, action 참조, 시작 시각, 종료 시각(진행 중이면 nil)
  • CountEntry (횟수 기록): id, action 참조, 기록 시각, 수량(기본 1)
  • Goal: id, 내용 텍스트, 아이콘, 색, 시작일, 종료일(옵션), 상태(진행중 | 달성 | 미달성 | 확인필요)
  • Quest: id, goal 참조, 대상(행동 또는 태그), 주기 유형(일/주/월/기간), 주기 상세(요일 배열, 날짜 배열, 몇째주+요일 등), 목표값(시간 또는 횟수), 방향(이상 | 이하)
  • AppSettings: 테마, 언어, 주 시작 요일, 하루 시작 시간, Live Activity 대표 시간 기준, 프리미엄 여부

11. 문서에서 확정한 기본값 (원문에 명시되지 않아 합리적으로 정한 것)

항목 확정값 근거
하루 시작 시간 기본값 00:00 설정에서 변경 가능하므로 표준값으로 시작
주 시작 요일 기본값 월요일 한국 사용 관행, 설정에서 변경 가능
다이나믹 아일랜드 대표 시간 기본값 가장 나중에 시작한 행동 워치 컴플리케이션 설명에서 "여러 개면 가장 나중 것"이라 언급된 것에 맞춤
하루 경계 걸침 세션 처리 저장은 1개 세션, 집계 시 경계 기준 분할 원문 데이터 보존 + 일간 통계 정확성 양립
테마 컬러 값 §5.2의 제안 팔레트 "흔하지 않은 초록/노랑" 요구 반영, 조정 가능
동시 추적 개수 제한 없음 원문에 제한 언급 없음