mycode/myApp/HaruDanim/CLAUDE.md
2026-07-10 09:04:33 +09:00

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)을 등록한다.
  • 추적 방식은 생성 시 둘 중 하나로 지정:
    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 특정 목표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개 + 추가 실행 개수 별도 표시, 추가 개수가 없으면 개수 표시 생략)
    • 실행 중인 것이 없으면 "실행 중 아님" 상태로 표시
  2. 목표 달성률 컴플리케이션
    • 지정한 특정 목표의 달성률 표시(이떄 하루 달성일지 주간 달성일지 월간 달성일지 선택가능)
  3. 다짐 달성률 컴플리케이션
    • 특정 목표의 특정 다짐 1개만의 하루 혹은 주간, 혹은 월간 달성 정보 표기(크기에 따라서 3개 모두 표기하는 컴플리케이션도 추가)
    • "넘기면 안 되는" 다짐(시간/횟수 상한형)의 경우 일반 달성형과 다른 시각 표현 사용 (예: 한도 대비 사용량으로 표시)

10. 시리 단축어 (프리미엄)

10.1 단축어 앱에서 동작 가능한 기능 나열

  • 특정 목표의 하루/주간/월간 진행률 데이터 가져오기
  • 특정 목표에 소속된 다짐의 하루/주간/월간 진행률 데이터 가져오기
  • 특정 행동의 하루/주간/월간 누적값 데이터 가져오기
  • 시간 측정 타입 행동 시작하기, 종료하기
  • 횟수 측정 타입 행동의 횟수 바로 추가하기