fix(main): 새로고침 버튼을 프리미엄 전용으로 — 무료에선 숨김 + 도움말 중복 정리

새로고침의 쓰임새(iCloud 동기화 반영·위젯/워치 갱신)가 전부 프리미엄
기능이라 무료 사용자에겐 누를 이유가 없는 버튼 — 모음 탭 툴바에서
프리미엄일 때만 표시한다(실사용 피드백 2026-07-23).

- 도움말 '새로고침 버튼' 항목이 모음 탭 그룹에 2개 중복돼 있던 것을
  하나로 합치고, 프리미엄에서만 표시된다는 문구 추가
- 신규 문구 en/ja 완역, 구 문구 stale 2건 정리 (missing/stale 0)
- CLAUDE.md §6.1 툴바 규칙 갱신
- 검증: Debug/Store 빌드, 무료(-premium NO) 버튼 숨김·프리미엄 표시
  스크린샷

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
songyc macbook 2026-07-23 02:25:30 +09:00
parent aaace2ed23
commit 0b2bb9c55f
5 changed files with 8504 additions and 8520 deletions

View File

@ -183,7 +183,7 @@ xcrun xcstringstool sync Widgets/Localizable.xcstrings --stringsdata "${widget_f
- **행동이 많아질 때의 혼잡도 문제**(2026-07-21 실사용 피드백): 22개 시드로 iPhone(3열·6열)·iPad·맥 4가지를 직접 시뮬레이션해 6가지 대안(A~F)을 검토 — 구현된 즐겨찾기 모아 보기(A, 현재는 v2 섹션형+나머지 접기)에 더해, 향후 후보로 ⓑ꼬리표별 접기(출시 후), ⓒ검색/필터(출시 후), ⓓ한 줄 개수 늘릴 때 경고 문구(미착수, 저위험)가 있음. **명시적으로 기각**: 즐겨찾기 등을 전체 그리드에서 숨기는 옵트인 방식(행동이 눌러도 안 보이게 될 위험 > 이득) — 다시 제안하지 말 것
- 배치 편집: **편집 모드도 즐겨찾기/나머지 섹션 구조 그대로**(항상 펼침·접기 버튼 없음 — "편집이 즐겨찾기 없다고 가정한다"는 2026-07-22 후속 피드백 해소). 섹션 안 드래그=순서 변경(실시간, 전역 `local.actionOrder` 하나에 반영 — CloudKit 모델에 쓰지 않음), **섹션 사이 드래그=즐겨찾기 지정·해제**(`commitDrop` — 드롭 확정 시점에만 처리. 호버 중 교차 이동은 소속이 안 바뀐 채 전역 순서만 바뀌어 자기 섹션 안에서 점프해 보이므로 `moveDragging`이 무시). **빈 섹션은 점선 드롭 존**(`favoriteDropZone`+`FavoriteZoneDropDelegate`, 호버 하이라이트)이 받아 즐겨찾기 0개여도 끌어서 지정 가능. 지글 애니메이션 유지, isFavorite 변경은 모델 필드라 `DataChange.commit` 경유(워치 즐겨찾기·위젯 갱신)
- "짧은 기록 무시"(minSessionSeconds): 설정보다 짧은 세션은 종료 시 삭제. 메모 창 옵션 켠 행동은 종료/+1 시 메모 시트(건너뛰기 가능)
- 툴바: 새로고침(좌) / 배치 편집(우)
- 툴바: 새로고침(좌**프리미엄일 때만 표시**: 쓰임새인 iCloud 반영·위젯/워치 갱신이 전부 프리미엄이라 무료에선 숨김, 도움말에도 명시. 2026-07-23) / 배치 편집(우)
- 빈 상태(행동 0개): 개념 한 줄 소개 + '첫 행동 만들기'(추가 시트 직행) + '예시 행동으로 시작해 보기'(꼬리표 생활·건강 + 독서/운동/물 마시기 생성)
### 6.2 행동 탭 (`ActionViews`)

View File

@ -48,7 +48,9 @@ final class AppRefresh {
import SwiftUI
///
/// .
/// (iCloud ·/ )
///
struct RefreshButton: View {
private let refresh = AppRefresh.shared

File diff suppressed because it is too large Load Diff

View File

@ -194,7 +194,7 @@ struct HelpView: View {
HelpTopic(
symbol: "arrow.clockwise",
title: "새로고침 버튼",
body: "모음 탭 왼쪽 위의 새로고침 버튼은 화면을 처음부터 다시 불러오고, 홈 화면 위젯과 애플워치도 함께 갱신해요. iCloud 동기화로 다른 기기에서 바꾼 내용이 아직 안 보이거나 위젯이 갱신되지 않은 것 같을 때 눌러 보세요."
body: "모음 탭 왼쪽 위의 새로고침 버튼은 화면을 앱을 껐다 켠 것처럼 처음부터 다시 불러오고, 홈 화면 위젯과 애플워치도 함께 갱신해요. iCloud 동기화로 다른 기기에서 바꾼 내용이 아직 안 보이거나 위젯이 늦게 갱신되는 것 같을 때 눌러 보세요. iCloud 동기화·위젯이 프리미엄 기능이라 이 버튼은 프리미엄을 사용 중일 때만 표시돼요."
),
HelpTopic(
symbol: "hand.tap.fill",
@ -211,11 +211,6 @@ struct HelpView: View {
title: "배치 편집",
body: "오른쪽 위 '배치 편집'을 누르면 버튼이 흔들리며 드래그로 순서를 바꿀 수 있어요. 한 줄에 몇 개를 놓을지도 고를 수 있어요. '완료'를 누르면 저장되고, 이 순서는 위젯의 기본 표시 순서에도 쓰여요."
),
HelpTopic(
symbol: "arrow.clockwise",
title: "새로고침 버튼",
body: "왼쪽 위 새로고침 버튼은 화면을 앱을 껐다 켠 것처럼 다시 불러와요. 다른 기기(아이패드·아이폰·워치)에서 기록했는데 이 기기 화면에 아직 안 보일 때 눌러 주세요. iCloud 동기화가 도착해 있다면 바로 반영돼요."
),
])
}

View File

@ -103,9 +103,12 @@ struct MainView: View {
.background(AppTheme.background)
.navigationTitle("모음")
.toolbar {
ToolbarItem(placement: .topBarLeading) {
//
RefreshButton()
if PremiumManager.shared.isPremium {
ToolbarItem(placement: .topBarLeading) {
// .
// iCloud ··
RefreshButton()
}
}
ToolbarItem(placement: .topBarTrailing) {
Button(isEditing ? String(localized: "완료") : String(localized: "배치 편집")) {