docs(plan-1.5): 2차 결정 전부 반영 — 지표 8종+운동 종목 다짐 확정·만료 원칙·스크린샷 전면 신규·신기능 팝업(§11)·스키마 배포 체크·혼합버전 R16
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WtZwRRjbtM9pZJDM4FkTq6
This commit is contained in:
parent
8a5df2233a
commit
2e181dd1e2
File diff suppressed because one or more lines are too long
@ -11,6 +11,7 @@
|
||||
| 1 | 워치 행동 컴플리케이션 (기간 선택·미니 행동 화면 착지) | 프리미엄(워치 자체가 프리미엄) | 중간 |
|
||||
| 2 | 건강 데이터 통합 — 모음 탭 타일(표시) + 건강 다짐 | 타일 **무료** + 건강 다짐 **프리미엄** | 큼 |
|
||||
| 3 | 도움말(HelpView) 전체 문구 한국어 자연화 (2026-08-12 예약분) | — | 중간 |
|
||||
| 4 | 업데이트 신기능 소개 팝업(버전당 1회, 全기기 업데이트 안내 포함) | 무료 | 소 |
|
||||
|
||||
**제외 확정**: 하위 OS 인하(§4 기각 기록), 워치 스마트 스택 인터랙티브 위젯, 모음 탭 스와이프 페이지 배치.
|
||||
|
||||
@ -23,6 +24,7 @@
|
||||
5. (앞선 보고에서) 하위 OS 철회, 스마트 스택 불요, 표시 기간 옵션은 달력 주기+롤링 둘 다, 건강은 표시·다짐을 **한 버전에 통합**(감수사항 3건 §3.1 전제)
|
||||
6. 후속 추가(2026-08-20): ①컴플리케이션 착지 미니 화면은 **뒤로가기로 워치 앱 메인 복귀**(push 구조 필수) ②모음 탭 건강 섹션은 **설정에서 표시 on/off + 즐겨찾기·나머지 행동·건강 3섹션 순서 지정**(목표 카드 선택 설정 아래 배치). 이후 추가 요구는 사용자가 그때그때 전달 예정 — 이 문서에 계속 반영할 것
|
||||
7. 후속 승인·추가(2026-08-22): **§8 세 건 전부 승인**(③ 표시 전용 상속 / 데이터 없는 기기 모수 제외+판정 보류 / 건강 다짐 v1 마감 시각 미지원). 추가 요구: **건강 데이터의 특성(하루 경계·수면 귀속 규칙·값 신선도·기기별 편차)을 도움말에 상세히 설명**하고, **건강 데이터를 보는 화면(모음 탭 타일 영역)에도 해당 안내 가이드 문구를 표기**할 것. 1.5 도움말 작업은 자연화(예약분)+신규 주제+이 안내를 한 묶음으로 진행. **안정성 최우선 지시**: 1.4 기능은 오류 없이 그대로 유지된 채 1.5가 얹혀야 함 — §10 위험 검토가 그 근거 문서
|
||||
8. 2차 답변(2026-08-22): ①지표 8종 확정 + **운동 세부 종목 다짐 추가**(사용자 핵심 니즈 — §3.4) ②프리미엄 만료 처리=기존 원칙(만든 건 유지 — "돈 내고 쓴 기간에 한 건 인정") ③스크린샷=기존 전부 폐기, 아이폰·아이패드 각 10장 신규(스타일 동일·구성 일신 — §6) ④whats-new에 全기기 업데이트 완화 문구 ⑤**업데이트 신기능 소개 팝업 신설**(§11) ⑥CloudKit 스키마 배포=사용자 기억 없음 → 아리나가 구현 중 확인·준비하고 콘솔 작업 필요 시 시점·절차를 사용자에게 안내(§3.5). 이 반영은 "기록 용도 문서 수정만 허용(코드·프로젝트 파일 금지)" 상태에서 수행
|
||||
|
||||
## 2. 기능 1 — 워치 행동 컴플리케이션
|
||||
|
||||
@ -66,16 +68,19 @@
|
||||
|
||||
### 3.4 건강 다짐 (프리미엄)
|
||||
- **모델**: `Quest`에 건강 대상 필드 신설(예: `healthMetricRaw` 기본 "" — §3 CloudKit 규칙 준수: 기본값+스키마 안전). 대상 3유형째(행동/꼬리표/건강 지표). 수면 구간 필드(시작·끝 분, 기본값) 추가.
|
||||
- **v1 지표 세트(제안 8종 — 착수 시 사용자 확인으로 확정)**: 걸음 수(회 표기 계열) · 운동 시간 · 수면(특수) · 활동 에너지(kcal) · 이동 거리(km) · 스탠드 시간 · 마음챙김 분 · 물 섭취(L). 수면 외 7종은 전부 "논리적 하루 창의 누적 수량"으로 구조 동일 — 한 어댑터로 처리.
|
||||
- **v1 지표 세트(확정 2026-08-22)**: 걸음 수 · 운동 시간 · 수면(특수) · 활동 에너지(kcal) · 이동 거리(km) · 스탠드 시간 · 마음챙김 분 · 물 섭취(L) — 8종. 수면 외 7종은 전부 "논리적 하루 창의 누적 수량"으로 구조 동일 — 한 어댑터로 처리.
|
||||
- **운동 세부 종목 다짐(확정 2026-08-22 — 사용자 핵심 니즈)**: '운동'은 전체 합산 외에 **종목별 다짐** 지원(예: 달리기 30분 이상) — HKWorkout의 종목별 duration 합산(기록된 운동 기준). `healthMetricRaw`에 종목 파라미터 인코딩(예: workout.running), HealthCache 키도 지표+종목으로 확장(위험 구조는 8종과 동일 — 누적 수량 패턴). **종목 이름은 API가 현지화를 제공하지 않음 → 자체 큐레이션 목록(20종 내외: 달리기·걷기·사이클·수영·근력 운동·요가·필라테스·등산·축구·야구·농구·테니스·배드민턴·골프·줄넘기·복싱·댄스·스트레칭·HIIT·기타)을 ko/en/ja 직접 명명** — 구현 중 목록을 사용자에게 제시해 실사용 종목 포함 확인(비차단), 이후 추가는 케이스+문자열 3개로 저비용. ⚠️'운동 시간'(엑서사이즈 분, 활동 링 기준)과 종목별(기록된 운동 시간)은 값 기준이 다름 — 가이드 문구·도움말에 차이 설명 필수.
|
||||
- **수면 귀속 규칙(사용자 설계, 2026-08-20)**: 다짐 전용 **수면 구간**(기본 전날 21:00 ~ 당일 09:00, 사용자 지정 가능) 안의 수면 합을 **'깨어난 날' 하루에 통귀속**. ⚠️ 시간 세션의 겹침 분할과 다른 규칙이지만 **의도된 예외**(수면은 깬 날의 것으로 세는 도메인 관습 — deadlineMinutes와 같은 '다짐 전용 측정 창' 계열의 확장). 소스 중복(아이폰+워치 동시 기록)은 '잠듦' 구간 **합집합 병합**. 하루 단위 전용(요일 스케줄 가능), 주간 합산 다짐 v1 제외.
|
||||
- **진행률 의미론 — 기존 §4.2와 완전 동일 유지**: atLeast 게이지 min(값/목표,1)·퍼센트 초과 표기, atMost, 연속 달성(하루 버킷·시작일 하한·400일 상한), 판정 시점 클리핑, 주기 몫 완료, 수행일 아님. 단 **마감 시각 옵션은 건강 다짐 v1 미지원(§8ⓔ 확정 — 캐시가 하루 단위 값이라 부분 창 미지원, 편집기에서 숨김)**. HealthProgress 어댑터가 QuestProgress와 같은 수치 계약을 지키고, 값 공급원만 HealthCache로 다름.
|
||||
- **과금 게이트**: 건강 다짐 생성 = 프리미엄(`PremiumManager` 경유 — canAddQuest에 건강 분기 또는 전용 판정). 만료 정책은 기존 원칙(이미 만든 것은 유지, 추가 생성만 제한)을 따를지 착수 시 확정.
|
||||
- **과금 게이트**: 건강 다짐 생성 = 프리미엄(`PremiumManager` 경유 — canAddQuest에 건강 분기 또는 전용 판정). 만료 정책 **확정(2026-08-22)**: 기존 원칙 그대로 — 이미 만든 건강 다짐은 만료 후에도 유지·표시, 추가 생성만 제한.
|
||||
- **파급 표면(전수)**: QuestEditorView(대상 3유형째+지표 픽커+수면 구간 UI — CollapsibleTimeWheel 재사용) · 목표 탭 행 · 모음 카드 · 일기 '이 날의 목표'(과거 날짜는 캐시/실조회) · 위젯 ②③④(캐시 조회) · 워치(스냅숏 동승) · 시리 다짐 조회 · evaluateIfEnded 판정 · CSV(다짐 CSV에 건강 다짐 행 — 기록 CSV 무영향, 가져오기 비대상 유지 §6.8) · 무료 한도 카운트(목표당 3개에 귀속).
|
||||
- **이중 상태 정규화(혼합 버전 대비 — 2026-08-22 검토)**: 구버전(1.0~1.4) 편집기가 "대상 없음"으로 보이는 건강 다짐에 행동/꼬리표를 지정·저장하면 지표+행동이 공존할 수 있음 → 판독 규칙은 **행동/꼬리표 우선**(사람의 최신 의도 존중), 1.5 편집기는 저장 시 반대편 필드를 정리해 일관 상태 복원.
|
||||
|
||||
### 3.5 심사·문서 체크리스트
|
||||
- HealthKit 엔타이틀먼트 + `NSHealthShareUsageDescription`(ko/en/ja — InfoPlist.xcstrings).
|
||||
- **`Docs/PRIVACY.md`에 건강 데이터 문단 추가 필수**(5.1.3 요구): 읽기 전용·기기 밖 전송 없음·iCloud 저장 없음 명시. 개인정보 라벨 "데이터 수집 안 함" 유지 가능(개발자 서버 전송 없음).
|
||||
- 결제 화면(PremiumView) 기능 목록에 '건강 다짐' 추가, 도움말 신규 주제(§5), Marketing 자료 갱신(§6).
|
||||
- **CloudKit 스키마 배포 체크(2026-08-22 — 사용자 기억 없음, 아리나 주도)**: 착수 첫 단계에서 개발 환경 스키마 생성·CloudKit 콘솔 상태 확인(1.3의 DiaryPageItem 필드 8개가 프로덕션에 있는지도 함께 판독 — 당시 배포 이력 불명). 출시 게이트에서 프로덕션 배포가 필요하면 콘솔 작업은 사용자 계정이 필요 → 아리나가 정확한 절차를 안내하고 사용자가 실행. 배포 없이 1.5를 내보내면 새 필드 동기화가 실패할 수 있으므로 **출시 전 필수 관문**.
|
||||
|
||||
### 3.6 검증
|
||||
- `-progressSelfTest`에 건강 어댑터 시리즈 추가(HealthCache 주입식 인메모리 — 실 HK 비의존): 수면 구간 경계(자정 걸침·구간 밖 수면·하루 시작 시간 05:00 조합), atLeast 캡·초과, 연속, 판정 클리핑.
|
||||
@ -94,8 +99,8 @@
|
||||
|
||||
## 6. 공통 마무리 작업 (출시 전)
|
||||
|
||||
- MARKETING_VERSION 1.5, `Marketing/AppStore/whats-new-1.5.txt`, 프로모션 텍스트 1.5판.
|
||||
- 스크린샷: 모음 탭에 건강 타일이 들어가면 01-main 계열 재촬영 대상 — 착수 시 판단(Marketing/README 절차).
|
||||
- MARKETING_VERSION 1.5, `Marketing/AppStore/whats-new-1.5.txt`(**"여러 기기를 쓰면 모든 기기에서 업데이트" 완화 문구 포함** — 확정 2026-08-22), 프로모션 텍스트 1.5판.
|
||||
- **스크린샷 전면 신규 제작(확정 2026-08-22)**: 기존 세트 전부 폐기, **아이폰 10장·아이패드 10장 × ko/en/ja 신규**(스타일은 현재와 동일, 구성·이미지 일신 — 1.5 기능 반영. 워치 합성 1장 유지 여부는 시안 때 결정). 촬영·합성은 Marketing/README 절차 준용, 장면 구성 시안은 마무리 단계에서 사용자 확인.
|
||||
- 자가 검증 전체 회귀(-progressSelfTest 확장분 포함 4종+신규 인자), Debug/Store/워치 빌드, 26+18.5 심 QA.
|
||||
- CLAUDE.md 현행 명세 갱신(§6.1 모음 탭·§6.4 다짐·§11 워치·§14 인자 등) + 이 문서 완료 표기.
|
||||
|
||||
@ -139,9 +144,16 @@
|
||||
- **[중] R12 컴플리케이션 구성 잔존**: 옵트아웃/삭제 행동이 페이스에 남으면 첫 옵트인 행동 폴백→없으면 빈 상태+해결 안내(§11 목표 폴백 문법). recommendations description은 Text(verbatim:)만(§11 즉사 경고)
|
||||
- **[하] R13 iOS 18 하한**: 신규 API 전부 iOS 18/watchOS 10 이하 확인(HK 통계·옵저버 쿼리는 구식 API라 안전), 18.5 심 **Release 포함** 빌드 확인(플랫폼 행 컴파일러 크래시 전례 — 제네릭 중첩 코디네이터 패턴 회피)
|
||||
- **[하] R14 위젯 규칙**: 건강 셀은 버튼 없음이라 invalidatable/히트 영역 함정 해당 적음, 하루 경계는 기존 타임라인 안전망으로 새 날 0 리셋 자동(§8ⓑ)
|
||||
- **[하] R15 도움말 이미지**: 자연화는 문구 변경이라 예시 이미지 18장 재촬영 원칙 불필요(앱 화면 예시), 모음 탭 이미지만 건강 타일 반영 여부 판단(§9-3)
|
||||
- **[하] R15 도움말 이미지**: 자연화는 문구 변경이라 예시 이미지 18장 재촬영 원칙 불필요(앱 화면 예시), 모음 탭 이미지만 건강 타일 반영 여부 판단(§9-3) — ※스토어 스크린샷은 별개로 전면 신규(§6, 2026-08-22 확정)
|
||||
- **[기록] R16 혼합 버전(1.0~1.4 × 1.5) 검토 결과(2026-08-22)**: 1.0 RC(f05e611) 실코드로 `targetName` "대상 없음"·`targetActions` [] 폴백이 **1.0부터 존재** 확인 — 전 버전 안전 강등, 대상 강제 언래핑 0, KVS 무변경, 워치는 과도기만(R3). 잔여 특이 2건: ⓐ구버전 기기가 건강 포함 목표를 먼저 자동 판정하면 미달성 오판 가능 — 1.5 기기에서 종료일 재저장→재판정으로 회복, 팝업(§11)·whats-new 全기기 업데이트 안내로 완화 ⓑ구버전 편집 시 이중 상태 — §3.4 정규화 규칙으로 해소
|
||||
|
||||
### 10.3 안정성 실행 수칙 (전 단계 공통 — 사용자 지시 2026-08-22 "1.4 무결 보존")
|
||||
1. **격리 원칙**: 신규 코드는 신규 파일 우선(HealthStore/HealthCache/HealthProgress·신규 컴플리케이션·미니 화면), 기존 파일은 가산적 분기만. 금지구역(§6.1 lazy·§6.5 휠 구조·§10 invalidatable·§11 verbatim·§6.6 StatSpan) 진입 전 재확인
|
||||
2. **단계 게이트**: §7 순서의 각 단계 끝마다 자가 검증 전체(기존 49·20·27·10 + 신규) ALL PASS + Debug/Store/워치 빌드 + 26·18.5 심(워치 11.5·26.2) 시각 QA + 커밋. 이전 단계 그린 없이 다음 단계 진입 금지
|
||||
3. **출시 게이트**: 전 단계 완료 후 TestFlight 실기기 소킹(사용자) → PRIVACY.md·심사 체크(§3.5) 동반 제출
|
||||
|
||||
## 11. 기능 4 — 업데이트 신기능 소개 팝업 (2026-08-22 사용자 추가)
|
||||
|
||||
- 업데이트 후 첫 실행 시 스플래시 뒤 **버전당 1회** 표시되는 신기능 소개 시트(통상의 "이번 업데이트" 팝업 관습): 1.5 신기능 카드(행동 컴플리케이션·건강 타일·건강 다짐·도움말 개편) + **"여러 기기를 쓰신다면 모든 기기에서 업데이트해 주세요" 안내 1줄**(혼합 버전 완화 — §10 R16 연계).
|
||||
- 표시 규칙: standard defaults에 마지막 표시 버전 기록(예: `whatsnew.lastShownVersion`) — 저장된 버전과 현재 버전이 다르고 소개 콘텐츠가 있는 버전일 때만 표시, 닫는 즉시 기록(재표시 없음). **신규 설치는 미표시**(첫 실행 안내는 온보딩 담당 — 최초 실행 시 현재 버전을 시드). 온보딩과 동시 표시 금지(온보딩이 우선).
|
||||
- 구조는 OnboardingView 스타일 재사용, 향후 버전에서 콘텐츠만 교체 가능한 구조로. l10n 3언어, 검증 인자(예: `-showWhatsNew`) 신설.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user