Skip to content

주간 스트립 · 시간표 현재 시각 줄 · 스와이프 삭제 제거 - #16

Merged
dongglehada merged 6 commits into
mainfrom
feat/week-strip-now-line
Aug 21, 2026
Merged

dongglehada merged 6 commits into
mainfrom
feat/week-strip-now-line

Conversation

@dongglehada

@dongglehada dongglehada commented Aug 21, 2026 •

Copy link
Copy Markdown
Contributor

변경 사항

세 가지 요청에서 출발해, 도중에 드러난 것 둘을 같이 고쳤습니다.

1. 하루치 페이지 머리에 주간 스트립 — 77d0649에서 걷어냈던 WeekStripView·WeekPagerView를 되살렸습니다. 그때는 이게 달력 화면이 접힌 모습이라 지금 보는 게 달인지 하루인지 헷갈렸는데, 지금은 달력이 뒤에 그대로 남아 있고 이 줄은 하루치 페이지의 머리일 뿐입니다. 좌우 스와이프는 스트립 한 줄에서만 받습니다 — 본문에 걸면 목록 셀의 손짓과 방향이 겹칩니다.

2. 시간표에 현재 시각 줄 — 오늘을 볼 때만 축에 빨간 줄이 서고, 열 때 그 위치로 스크롤하고 1분마다 갱신합니다. 축이 현재 시각을 못 품는 경우(일정이 없으면 기본 8~22시인데 새벽에 열기)를 위해 TimelineLayout.visibleHourRange에 including:을 뒀습니다.

3. Mac 지원 — 이 PR에 없습니다. "Mac에서 iPhone 앱 그대로"를 켰다가 되돌렸고, Mac Catalyst로 따로 만들기로 정해 docs/BACKLOG.md에 남겼습니다. 별도 브랜치로 갑니다.

4. 스와이프 삭제 전면 제거 — 여섯 곳(하루치 목록·오늘 할 일·지난 할 일·백로그·카테고리 목록·캘린더 목록)에서 뺐습니다. 시간표에는 List가 없어 같은 손짓을 손으로 만들어야 했는데 시스템 것과 끝내 같아지지 않았습니다(버튼 모양·뒤로 가기 겹침·전체 스와이프 판정). 지우는 길은 꾹 눌러 나오는 메뉴와 편집 시트의 삭제 둘입니다. 편집 모드의 빨간 빼기 버튼도 같이 사라집니다 — onDelete가 만드는 것이라 스와이프와 한 몸입니다.

6. 그 entitlement가 시뮬레이터 실행을 막던 것 — 스크린샷을 찍으려다 발견했습니다. $(TeamIdentifierPrefix)는 프로비저닝 프로파일에서 나오는 값이라 프로파일이 없는 시뮬레이터 빌드에서는 빈 값이 되고, 그러면 앱이 아예 안 뜹니다(denied by service delegate (SBMainWorkspace)). 실기기는 멀쩡했고 CI도 초록이었습니다 — CI는 빌드·테스트만 하지 앱을 띄우지 않습니다. 팀 접두사를 직접 적어 고쳤습니다.

5. iCloud 키-값 저장소 entitlement 누락 — 실행 로그에서 나왔습니다. AnalyticsIdentity가 NSUbiquitousKeyValueStore를 쓰는데 entitlement가 없어서 origin이 늘 created였습니다. 재설치를 건너오지 못하고 있었습니다.

스크린샷 / 영상

하루치 페이지 (목록) 시간표 + 현재 시각 줄 스트립에서 날짜 고르기

왼쪽: 페이지 머리에 주간 스트립(1622)이 서고 22일이 선택돼 있습니다.
가운데: 새벽 2시에 열어서 축이 2시부터 시작합니다 — 일정이 없으면 기본 8
22시인데
including:이 현재 시각을 품도록 넓힌 결과입니다. 빨간 줄과 왼쪽 점이 지금입니다.
오른쪽: 스트립에서 21일을 누르면 제목·본문·입력창이 그 날 것으로 바뀝니다.

주 넘기기(좌우 스와이프)는 이 세 장에 없습니다. 시뮬레이터의 합성 터치로는 UIKit
제스처 중재가 재현되지 않아 스와이프가 탭으로 잡힙니다(CellTouchBridge 주석에
적혀 있는 그대로입니다). 실기기에서 확인했습니다.

이미지는 assets/pr-16 고아 브랜치에 있습니다 — main에는 안 들어갑니다.

체크리스트

  • 빌드 통과 (App / MoscoWidget)
  • 관련 테스트 통과 — 112건. 새로 4건(TimelineLayoutTests: 축이 현재 시각을 품는 규칙). 스와이프 제거·주간 스트립은 제스처라 이 테스트 타깃으로 못 덮습니다(호스트 앱이 없어 XCUITest 불가) — 검증 카드로 넘겼고 백로그에 적었습니다
  • 화면 확인이 필요하면 검증 카드를 본문에 넣었다
  • 불필요한 로그/주석 제거 — 진단용 ListGestureProbe는 파일째 지웠습니다

확인한 것

  • 편집은 전부 스크립트로 했고 각 단계마다 grep으로 되읽었습니다. 커밋 1은 한 파일의 훅 일부만 인덱스에 올려 나눴고, 남은 훅이 스와이프 제거분만인지 git diff로 확인했습니다.
  • 튜토리얼이 스와이프 삭제를 가르치는지 코드로 확인했습니다 — TutorialStep은 처음부터 "꾹 누르세요 → 메뉴에서 '삭제'"였고, didDelete 감지도 메뉴 경로에서 불립니다. 그래서 손대지 않았습니다.
  • "Mac 지원"은 SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD를 되돌려 project.pbxproj에 diff가 없는 것을 확인했습니다.
  • KVS는 문구가 아니라 실기기 로그로 확인했습니다(origin: restoredFromCloud).

못 한 것 / 확인 필요

검증 카드입니다.

■ 주간 스트립

  • 어디: 캘린더 → 날짜 탭 → 페이지 맨 위
  • 하기: 좌우로 민다. 다른 날짜를 누른다
  • 통과: 주가 페이지 단위로 넘어가고, 날짜를 누르면 본문·제목·입력창이 그 날 것이 된다
  • 실패: 세로로 미끄러지거나, 눌러도 본문이 안 바뀌거나, 스트립 위에서 가장자리 뒤로 가기가 안 먹힌다

■ 시간표 현재 시각 줄

  • 어디: 하루치 → 시간표 모드. 오늘과 어제 각각
  • 통과: 오늘은 빨간 줄이 화면 안에 있고, 어제는 줄이 없다
  • 실패: 줄이 화면 밖이거나, 다른 날짜에도 있거나, 위치가 시각과 안 맞는다

■ 스와이프가 정말 없는지

  • 어디: 여섯 곳(하루치 목록·오늘 할 일·지난 할 일·백로그·설정 카테고리·설정 캘린더)
  • 통과: 밀어도 아무 일이 없다. 꾹 눌러 메뉴로는 지워진다
  • 실패: 한 곳이라도 빨간 게 나온다

위임했으면 쌌을 곳

없었습니다. 걷어낸 뷰의 위치는 git log --diff-filter=D 한 번, 나머지는 grep 두세 번이라 서브에이전트에 맥락을 설명하는 비용이 더 컸습니다.

다만 위임과 별개로 이번에 비쌌던 자리를 적어둡니다. "스와이프 삭제가 안 된다"를 코드만 보고 세 번 추측해 세 번 헛짚었고(원인은 시간표 모드라 List가 화면에 없던 것), 그 세 번이 로그 한 줄보다 비쌌습니다. 그 자리는 위임이 아니라 탐침을 심어 사람에게 실행을 부탁하는 것이 답이었습니다. docs/TRAPS.md에 적었습니다.

관련 이슈

없음

🤖 Generated with Claude Code

dongglehada and others added 6 commits August 22, 2026 01:11
77d0649에서 걷어냈던 WeekStripView·WeekPagerView를 되살렸다. 그때는 이게 달력
화면이 접힌 모습이라 지금 보는 게 달인지 하루인지 헷갈렸는데, 지금은 달력이 뒤에
그대로 남아 있고 이 줄은 하루치 페이지의 머리일 뿐이다.

날짜는 페이지가 자기 상태로 들고 있다(shownDate). 뒤에 남은 달 격자는 들어온
자리를 그대로 지킨다 — CalendarScreen.select에 이미 있던 원칙이다.

좌우 스와이프는 스트립 한 줄에서만 받는다. 본문에 걸면 목록 셀의 스와이프 삭제와
방향이 겹쳐 서로 먹힌다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
오늘을 볼 때만 축에 빨간 줄이 선다. 왼쪽 끝에 점을 찍는다 — 헤어라인만 그으면
눈금선과 굵기가 비슷해 어느 게 지금인지 안 잡힌다. 색은 팔레트의 must를 쓰고
새로 만들지 않았다.

축이 현재 시각을 못 품는 경우가 있어(일정이 없으면 기본 8~22시인데 새벽 3시에
열기) TimelineLayout.visibleHourRange에 including: 파라미터를 뒀다. 순수 로직이라
테스트 4건으로 덮었다.

화면을 열면 그 시각으로 스크롤하고 1분마다 위치를 갱신한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
여섯 곳에서 뺐다 — 하루치 목록, 오늘 할 일, 지난 할 일, 백로그, 카테고리 목록,
캘린더 목록. 쓰이지 않게 된 인덱스 기반 delete(at:) 헬퍼 3개도 지웠다.

시간표에는 List가 없어서 같은 손짓을 손으로 만들어야 했는데, 만들고 보니 시스템
것과 끝내 같아지지 않았다 — 버튼 모양이 다르고, 오른쪽으로 밀어 닫을 때 시스템
뒤로 가기와 겹치고, 전체 스와이프 판정이 어긋났다. 하나를 맞추면 다른 하나가
어긋나서, 같은 동작이 화면마다 다르게 구는 것보다 모든 화면에서 없애는 쪽을
택했다.

지우는 길은 둘이다 — 할 일은 꾹 눌러 나오는 메뉴(확인 대화 포함), 카테고리·
캘린더는 행을 눌러 들어가는 편집 시트의 삭제. 튜토리얼은 처음부터 메뉴 쪽을
가르치고 있어서 손대지 않았다.

편집 모드의 빨간 빼기 버튼도 같이 사라진다. onDelete가 만들어주는 것이라
스와이프와 한 몸이고, 둘을 떼어낼 방법이 없다. 편집 모드는 순서 바꾸기만 한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
AnalyticsIdentity가 NSUbiquitousKeyValueStore를 쓰는데
com.apple.developer.ubiquity-kvstore-identifier가 없었다. 실행 로그에
"BUG IN CLIENT OF KVS ... without a store identifier"가 찍히고
analytics_identity origin이 늘 created였다 — 재설치를 건너오지 못했다.

AnalyticsIdentityTests는 통과하고 있었다. 순수 로직만 보고 entitlement는 안 본다.

실기기에서 재설치 후 origin: restoredFromCloud 확인했다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
DesignSystem/README.md — 삭제는 꾹 눌러 나오는 메뉴 하나라는 것, 시간표의 현재
시각 줄, 주간 스트립을 되살렸는데 예전과 뜻이 어떻게 다른지.

TRAPS.md — 고친 뒤 증상이 똑같으면 그건 고칠 곳을 못 찾은 게 아니라 그 코드가 안
돌고 있다는 신호다. 스와이프 삭제를 세 번 헛짚었는데 원인은 시간표 모드였다.
DayViewMode는 하루치 페이지와 오늘 할 일 탭이 AppStorage 하나를 공유한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
$(TeamIdentifierPrefix)는 프로비저닝 프로파일에서 나오는 값이라, 프로파일이 없는
시뮬레이터 빌드(ad-hoc 서명)에서는 빈 값이 된다. 그러면 entitlement가 유효하지
않아 앱이 아예 안 뜬다 — "denied by service delegate (SBMainWorkspace)".

실기기는 프로파일이 있어서 멀쩡했고, CI는 빌드와 테스트만 돌리지 앱을 띄우지
않아서 초록이었다. 시뮬레이터에서 실행해보고 나서야 드러났다.

팀 접두사를 직접 적는다. 기기에서 프로파일이 넣어주는 값과 같은 값이다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@dongglehada
dongglehada merged commit 4f66c14 into main Aug 21, 2026
1 check passed
@dongglehada
dongglehada deleted the feat/week-strip-now-line branch August 21, 2026 17:12
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