songyc macbook 081c388f00 fix: 워치-라이브 액티비티 동기화, 앱 이름 띄어쓰기, 차트 라벨 겹침, 위젯 '선택 안 함' 옵션
라이브 액티비티(다이내믹 아일랜드) 워치 연동:
- 워치 실행 명령이 세션 활성화 전이거나 sendMessage 실패 시 유실되던 문제를
  transferUserInfo 큐 폴백으로 보강 (iPhone didReceiveUserInfo 수신 처리 추가)
- 큐로 지연 도착한 실행 명령이 엉뚱한 토글을 일으키지 않도록 5분 유효 시간 부여
- 백그라운드에서 Live Activity 시작이 거부되면 pendingStartRetry로 기억했다가
  앱 포그라운드 복귀(scenePhase active) 시 재시도 + DB 상태 재동기화
- WatchSync 진단용 os_log(notice) 추가, DEBUG -autoRunFirstAction 검증 훅 추가
- 시뮬레이터 검증: 워치 시작 → 아이폰 세션 시작 + 다이내믹 아일랜드 생성,
  워치 종료 → 세션 종료 + 아일랜드 소멸 확인 (큐 폴백 채널은 시뮬레이터
  transferUserInfo 한계로 실기기 확인 필요)

앱 이름 전역 띄어쓰기 ('하루다님' → '하루 다님'):
- pbxproj CFBundleDisplayName 6곳, InfoPlist.xcstrings 3개(ko), 스플래시(ContentView),
  워치 내비게이션 타이틀, 컴플리케이션 문구, 문자열 카탈로그 키 일괄 변경
- 워치 카탈로그 영문 값 HaruDanim → Haru Danim 통일

통계 위젯 X축 라벨 겹침 방지:
- 날짜 축 포인트가 7개를 초과하면(한 달·일별 등) 라벨을 숨기고 눈금만 표시

위젯 설정 '선택 안 함' 옵션:
- Action/Goal/Quest 엔티티에 zero-UUID 센티널 추가, 제안 목록 최상단 노출
- 2·3번째 슬롯 선택을 되돌릴 수 있고, 위젯 조회 단계에서 자연스럽게 걸러짐
- ko/en/ja 번역 추가 (None / 選択しない)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013yKDMhuF39GVYy3FMcGHh7
2026-07-10 21:47:42 +09:00

538 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"sourceLanguage" : "ko",
"strings" : {
"%@" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@"
}
}
}
},
"%@ %@" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ %@"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ %@"
}
},
"ko" : {
"stringUnit" : {
"state" : "new",
"value" : "%1$@ %2$@"
}
}
}
},
"%@ %lld%%" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ %lld%%"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ %lld%%"
}
},
"ko" : {
"stringUnit" : {
"state" : "new",
"value" : "%1$@ %2$lld%%"
}
}
}
},
"%@ +%lld" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ +%lld"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@ +%lld"
}
},
"ko" : {
"stringUnit" : {
"state" : "new",
"value" : "%1$@ +%2$lld"
}
}
}
},
"%lld" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%lld"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "%lld"
}
}
}
},
"%lld%%" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "%lld%%"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "%lld%%"
}
}
}
},
"+%lld" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "+%lld"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "+%lld"
}
}
}
},
"기간" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Period"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "期間"
}
}
}
},
"다짐" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Quest"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "クエスト"
}
}
}
},
"다짐 달성률" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Quest Progress"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "クエスト達成率"
}
}
}
},
"다짐 달성률 (%@)" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Quest progress (%@)"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "クエスト達成率(%@"
}
}
}
},
"목표" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Goals"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "目標"
}
}
}
},
"목표 달성률" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Goal Progress"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "目標達成率"
}
}
}
},
"목표 달성률 (%@)" : {
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Goal progress (%@)"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "目標達成率(%@"
}
}
}
},
"선택한 다짐의 달성률을 표시해요. 한도형 다짐은 상태로 표시돼요. (프리미엄)" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Shows the selected quest's progress. Limit quests show their status. (Premium)"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "選択したクエストの達成率を表示します。上限型はステータス表示になります。(プレミアム)"
}
}
}
},
"선택한 목표의 하루/주간/월간 달성률을 표시해요. (프리미엄)" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Shows the selected goal's daily/weekly/monthly progress. (Premium)"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "選択した目標の日/週/月の達成率を表示します。(プレミアム)"
}
}
}
},
"실행 중 아님" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Not running"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "実行中なし"
}
}
}
},
"없음" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "None"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "なし"
}
}
}
},
"월간" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Monthly"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "月間"
}
}
}
},
"주간" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Weekly"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "週間"
}
}
}
},
"초과" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Over"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "超過"
}
}
}
},
"측정 중" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Tracking"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "計測中"
}
}
}
},
"측정 중인 행동과 경과 시간을 표시해요. (프리미엄)" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Shows the running action and elapsed time. (Premium)"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "計測中のアクションと経過時間を表示します。(プレミアム)"
}
}
}
},
"표시할 다짐과 기간을 선택하세요." : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Choose a quest and period to display."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "表示するクエストと期間を選んでください。"
}
}
}
},
"표시할 목표와 기간을 선택하세요." : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Choose a goal and period to display."
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "表示する目標と期間を選んでください。"
}
}
}
},
"프리미엄" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Premium"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "プレミアム"
}
}
}
},
"하루" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Daily"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "1日"
}
}
}
},
"하루 다님" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Haru Danim"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "ハルダニム"
}
}
}
},
"한도" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Limit"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "上限"
}
}
}
},
"한도 안" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Within"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "上限内"
}
}
}
},
"한도 초과" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Over limit"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "上限超過"
}
}
}
},
"현재 현황" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Current Status"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "現在の状況"
}
}
}
}
},
"version" : "1.0"
}