Skip to content

1.4.0 — 영어·일본어 지원, 달력 홈, 스토어 미리보기 - #27

Merged
dongglehada merged 11 commits into
mainfrom
chore/release-1.4.0
Oct 2, 2026
Merged

dongglehada merged 11 commits into
mainfrom
chore/release-1.4.0

Conversation

@dongglehada

Copy link
Copy Markdown
Contributor

브랜치가 셋으로 갈려 헷갈려서 하나로 모았습니다. #25, #26은 닫았어요.

들어간 것

달력 홈 (1.4.0 구조) — 탭을 없애고 달력을 홈으로, 아래에 늘 보이는 입력창. 튜토리얼 시작 카드 제거. 로깅 바로잡기.

영어·일본어 지원 — 화면 문구 210개를 문자열 카탈로그로. 번역만으로 안 되는 자리가 둘 있었습니다: 한 줄에서 시간을 읽는 것(7pm, 午後7時, 19時30分, 전각 숫자, 14時〜17時)과 날짜·시각 표기("오후 7시" → "7 PM"). 둘 다 조립이라 코드가 만듭니다.

다른 언어로 띄워보고서야 보인 버그 둘 — 지원하지 않는 언어의 기기에서 한국어로 떴고(개발 언어가 한국어), 월요일부터 주를 세는 지역에서 달력이 한 칸 밀렸습니다.

리뷰 요청 문턱 — 9월에 요청이 0건이었습니다. 둘째 날 + 완료 3개(오늘을 다 끝냈으면 1개)로 낮췄습니다.

스토어 미리보기 — 노출 4,990 → 페이지 조회 404(8%)라 새는 곳이 검색 결과입니다. 첫 장을 "한 줄을 치면 시간이 붙는 순간"으로, 이름·부제를 언어마다 따로. 촬영은 디버그 실행 인자로 자동화했습니다.

AI 워크플로우 제거 — 에이전트·스킬·하네스·사용 보고서와 그걸 가리키던 문서들.

CI 수정 — 위젯 스킴 빌드가 CI에서만 타입 검사 시간 초과로 터졌습니다. body의 .task 안에 있던 시작 로직을 메서드로 뺐습니다.

확인

  • 테스트 192개 통과, App·MoscoWidget 두 스킴 모두 클린 빌드 통과
  • 한·영·일·프랑스어 기기로 시뮬레이터 확인
  • 설정·튜토리얼·위젯의 영어·일본어 화면은 눈으로 못 봤습니다
  • 영어·일본어 번역은 원어민 검수 전입니다

🤖 Generated with Claude Code

서준영 and others added 11 commits October 1, 2026 16:08
- 달력이 홈: 탭 바를 없애고 아래에 늘 보이는 입력창을 둔다
- '10월 ⌄'를 누르면 달 고르기 시트, '오늘'·'이번 달'은 필요할 때만 떠오르는 버튼으로
- 오늘 페이지가 오늘 탭을 대신한다(디데이·지난 할 일·날짜 없는 할 일·많을 때 안내)
- 검색을 달력 머리로, '오늘 할 일' 위젯·라이브 액티비티는 오늘 페이지로 연다
- 달력 칸 안 순서: 시간 있는 일 먼저, 끝낸 일은 맨 뒤
- 튜토리얼을 새 순서로(적기 → 오늘 열기 → 끝내기 → 정리), 예시는 '러닝 오후 7시'
- 예전 사용자에게 한 번 '오늘 할 일은 여기로 옮겼어요'
- 디자인 규범 문서 갱신

함께 들어간 수정:
- 기간 할 일이 지난 할 일과 오늘에 두 번 나오고, 가져오면 시작일이 바뀌던 것
- 수정할 때 분류기가 카테고리를 덮어쓰던 것
- 리뷰 요청 기회를 실제로 요청한 뒤에만 쓴 것으로 적기
- 분석: category_suggested는 저장할 때 한 번, 내부 사용자 표시, 규모는 사용자 속성으로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
튜토리얼
- 시작 카드를 없애고 달력이 잠깐 보인 뒤 바로 첫 지시로 시작한다
  (9월 데이터: 시작 56명 중 첫 지시를 넘긴 사람 16명)
- 끝맺음 카드에서 위젯을 권한다 — '위젯 추가하는 법'을 접어서
- 한 판에서 같은 단계는 한 번만 '해냈다'로 센다

로깅
- '오늘을 다 끝낸 순간'을 앱 뿌리에서 감지 — 시간표 모드·검색·위젯에서도 잡힌다
- 입력 출처를 today_page · tutorial로 나눈다
- day_opened(from, is_today), search_closed(opened_result) 추가
- 리뷰 요청: 기다린 뒤 깃발과 앱 상태를 다시 확인해 두 번·헛요청을 막는다
- 위젯 이벤트를 앞으로 나올 때마다 보내고, 규모 속성은 개수가 바뀌면 다시 적는다

홈
- 입력창 키보드: 달력 크기는 그대로, 달력을 누르거나 아래로 쓸면 키보드만 내린다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
이벤트마다 무엇을 정하려는지, 2026년 9월 GA4 데이터에서 본 것(첫날 이탈,
튜토리얼 입구, 위젯), 진단과 1.4.0에서 바꾼 것, 출시 뒤 비교할 지표와
GA4에서 등록할 맞춤 측정기준을 정리했다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
화면 문구 210개를 문자열 카탈로그로 옮기고 세 언어를 채웠다. 위젯, 알림,
위치 권한 안내까지 포함한다.

번역만으로는 안 되는 자리가 둘 있었다. 하나는 **시각 입력**이다. 한 줄에서
시간을 읽어내는 것이 이 앱의 핵심인데 한국어 표현만 알아들었다. 이제
`7pm`·`7:30 PM`·`noon`·`午後7時`·`19時30分`·전각 숫자·`14時〜17時`를 읽는다.
앱 언어로 갈라 읽지 않는다 — 한국어로 쓰는 사람도 `7pm`이라고 치기 때문이다.

다른 하나는 **날짜·시각 표기**다. "오후 7시"를 "7 PM"으로 바꾸는 건 번역이
아니라 조립이라, `DateText`가 세 언어의 표기를 직접 만든다. 정각이면 분을
빼는 이 앱의 규칙도 거기서 지킨다.

분류기는 한국어·영어·일본어 임베딩을 각각 돌려 유사도가 가장 높은 쪽을
고른다. 언어마다 벡터 공간이 달라 섞어 비교할 수 없어서다.

한국 공휴일은 한국어로 쓰거나 지역이 한국일 때만 칠한다. 영어 사용자의
달력에 삼일절이 빨갛게 찍히면 틀린 달력이다.

**다른 언어로 띄워보고서야 보인 버그 둘을 같이 고쳤다.**

- 지원하지 않는 언어의 기기(프랑스어 등)에서 한국어로 떴다. 개발 언어가
  한국어였기 때문인데, `Info.plist`만 고쳐서는 안 되고 `project.pbxproj`의
  `developmentRegion`이 그 값을 덮어쓴다. 둘 다 `en`으로 바꿨다.
- 월요일부터 주를 세는 지역(영국·프랑스)에서 달력이 한 칸 밀렸다. 요일
  머리는 일~토 고정인데 주의 시작을 기기에 물었던 탓이다. 주의 경계를
  구하는 곳은 전부 `calendar.startingSunday`를 거친다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
9월 한 달 동안 `review_prompt_requested`가 한 건도 없었다. 설치 후 2일 ·
쓴 날 2일 · 완료 5개를 다 채우는 사람이 없었던 것이다. 다섯 중 넷이 첫날로
끝나는 앱에서 그 조건은 사실상 "묻지 않는다"였다.

같은 달 숫자에서 **다음 날 다시 연 사람은 대체로 남았다**(1일째 21%, 그 뒤
첫 주 내내 16~19%로 평평). 그래서 "둘째 날에 다시 열었다"를 좋게 쓰고 있다는
증거로 삼는다. 그날 완료 3개, 오늘을 다 끝냈으면 1개면 묻는다.

"설치 후 며칠"은 아예 뺐다. 실행한 날만 세는 조건이 이미 있어서 같은 것을
두 번 보고 있었고, 깔아두고 안 쓴 사람은 그 조건에서 어차피 걸린다.

첫날에는 여전히 묻지 않는다. 같은 버전에서 한 번, 90일 간격도 그대로다 —
시스템이 연 3회만 띄우므로 기회를 아끼는 쪽은 바꾸지 않았다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
9월 스토어 숫자를 보면 노출 4,990에서 제품 페이지로 넘어온 건 404(8%)였다.
페이지에 들어온 사람은 여섯 중 하나가 받았으니, 새는 곳은 페이지 안이 아니라
검색 결과에서 눌러보게 만드는 단계다. 거기 보이는 건 아이콘, 이름, 부제,
그리고 미리보기 앞쪽 몇 장뿐이다.

예전 첫 장은 "한 줄이면 충분합니다"와 기울어진 달력이었다. 무엇이 한 줄인지는
둘째 장을 봐야 알았다. 첫 장을 그 장면(한 줄을 치면 시간 칩이 뜨는 순간)으로
바꾸고, 이름·부제도 같은 말을 하게 맞췄다.

**이름을 언어마다 따로 둔다.** 지금은 세 언어 모두 "Mosco - 할 일, 캘린더,
계획"이 나가는데, 한국어를 못 읽는 사람에게는 글자가 깨진 것처럼 보이고
검색에도 안 잡힌다.

촬영은 손으로 하지 않는다. 디버그 빌드에서만 켜지는 실행 인자가 그 언어의
예시 할 일을 채우고 찍을 화면까지 연다(`App/ScreenshotDemo.swift`). 언어가
늘거나 화면이 바뀌어도 명령 한 줄로 다시 찍는다.

`store/screenshots/`에 1242×2688로 열두 장(한·영·일 네 장씩) 들어 있다.
Canva 캔버스는 6.9형이라 비율이 0.4% 달라서, 내보낸 뒤 좌우를 배경색으로
채워 규격을 맞춘다(`tools/pad_screenshots.swift`).

위젯 장은 아직 없다 — 홈 화면을 손으로 꾸며야 찍을 수 있다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
영어·일본어 지원이 들어간 첫 버전이다. MINOR를 올린 것은 지원 언어가 느는
것이 기존 사용자에게 보이는 변화는 아니지만, 쓰는 사람의 범위 자체가 달라지기
때문이다. 같은 릴리스에 탭 없는 달력 홈과 튜토리얼 개편도 들어 있어
어느 쪽으로 보나 PATCH는 아니다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
에이전트 정의, 스킬, 검증 하네스, 버전별 AI 사용 보고서와 그 집계 도구를
전부 걷어냈다. 이것들을 가리키던 문서(CLAUDE.md, CONTRIBUTING.md, RELEASING.md,
README.md, PR 템플릿, CI, 아키텍처 문서)도 같이 고쳤다.

규칙마다 담당 지표를 붙여 버전마다 채점하는 구조였는데, 유지하는 비용이
얻는 것보다 커졌다. 지키는 사람이 하나뿐인 규범을 문서로 관리할 이유가 없다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
위젯 스킴 빌드가 CI에서만 "unable to type-check this expression in
reasonable time"으로 터졌다. 긴 수식어 사슬 끝에 붙은 긴 비동기 클로저라
타입 검사가 폭발하는데, 맥북에서는 통과하고 더 느린 CI 머신에서만 걸린다.
로컬에서 App 스킴만 돌려서는 안 잡힌다 — 위젯 스킴도 App 타깃을 빌드한다.

`.task { }` 안에 있던 시작 로직을 `runStartup()`으로 빼서 `body`가 보는
것을 한 줄로 줄였다. 동작은 그대로다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
한국어는 기존 사용자가 읽으므로 규칙 1대로 "오늘 탭이 어디 갔지"가 첫 줄이다.
영어·일본어는 그 언어로는 첫 출시라 당황할 기존 사용자가 없어서, 없는 변화를
알리는 대신 앱이 무엇인지로 시작한다. 왜 셋이 다른지도 같이 적어뒀다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
앞선 커밋에서 `.task { }` 하나를 메서드로 뺐는데도 CI가 같은 이유로 터졌다.
이번엔 다른 줄이었다 — 한 군데를 빼면 다음으로 긴 곳이 대신 터진다. 원인은
특정 줄이 아니라 `body` 전체다. 수식어가 스무 개 넘게 이어지고 그 안에 긴
클로저가 들어 있어 타입 검사가 지수적으로 불어난다.

`home`(화면과 저장소) · `homeWatchingData`(값이 바뀌면 반응) ·
`homeWithLifecycle`(앱이 뜨고 앞뒤로 오가는 것) 셋으로 나눴다. 프로퍼티마다
타입 검사 단위가 따로 생겨서 폭발하지 않는다. scenePhase 처리와 권한 요청은
메서드로 뺐다.

왜 한 덩어리로 되돌리면 안 되는지 그 자리에 적어뒀다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@dongglehada
dongglehada merged commit 4a3b71a into main Oct 2, 2026
1 check passed
@dongglehada
dongglehada deleted the chore/release-1.4.0 branch October 2, 2026 05:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant