라이브 액티비티(다이내믹 아일랜드) 워치 연동:
- 워치 실행 명령이 세션 활성화 전이거나 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
538 lines
12 KiB
Plaintext
538 lines
12 KiB
Plaintext
{
|
||
"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"
|
||
} |