docs(banner): 페이지 배지 요구사항과 검증을 기록한다

This commit is contained in:
Yu Sung
2026-10-26 10:17:58 +09:00
parent c562597537
commit cb4ce577ba
2 changed files with 44 additions and 0 deletions
@@ -563,6 +563,22 @@
- [x] 첫·마지막 경계의 빠른 양방향 연속 스와이프, 자동 스크롤, 페이지 표시를 수동 확인하고 `git diff --check`와 `SodaLive-dev` Debug 빌드를 실행한다.
- [x] 수정 결과와 실제 명령을 이 문서와 Phase 9 리뷰 리포트에 누적한다.
- [x] **Task 9.6: 공통 페이지 배지의 가변 너비와 한 줄 표시**
- Goal 실행 `P9-T6`: 홈·콘텐츠 Carousel의 페이지 숫자가 글자 크기에 맞춰 한 줄로 표시되고 패딩은 일정하게 유지된다.
- 시작 조건: PRD 8.6 및 2026-10-26 인터뷰 확정.
- 대상 파일:
- 수정: `SodaLive/Sources/V2/Component/Banner/BannerCarousel.swift`
- 확인: `SodaLive/Sources/Extensions/FontModifier.swift`
- 확인: `SodaLive/Sources/V2/Main/Home/Recommendation/Components/MainHomeBannerSection.swift`
- 확인: `SodaLive/Sources/V2/Main/Content/Recommendation/Components/MainContentAudioBannerSection.swift`
- TDD 예외 사유: 프로젝트에 테스트 번들이 없고 시각 레이아웃 변경이므로 테스트 타깃을 신설하지 않고 실제 SwiftUI 렌더링의 수정 전/후 비교로 검증한다.
- [x] **RED 확인:** 번들 Pretendard `08`/`20`을 18pt, 20pt 고정 칸에 렌더링하면 두 줄 높이가 되는 현상을 확인했다. 초기 확인은 macOS SwiftUI이며 iOS 검증과 구분한다.
- [x] **GREEN:** 숫자의 고정 프레임을 제거하고 배지 내용의 한 줄·고유 너비를 확보한다. 기존 패딩/폰트/서식/캐러셀 동작은 유지한다.
- [x] **GREEN 확인:** 기본·확대·접근성 글자 크기와 좁은 컨테이너에서 숫자의 줄바꿈/말줄임/잘림이 없고 자연스러운 너비 변화와 가로 6pt/세로 4pt 패딩이 유지됨을 렌더링으로 확인한다.
- [x] **REFACTOR:** 추가 구조 변경 없이 diff, Swift 컴파일, 앱 빌드를 확인하고 환경상 불가 항목은 명시한다.
- 완료 증거: 실제 실행 명령·렌더링 결과·검증 한계를 아래 검증 기록에 누적하고 소유 임시 QA 리소스를 정리한다.
- 범위 밖: API, 상태, 라우팅, 이미지, 자동 스크롤, 전역 typography 변경.
### Phase 10: 최근 활동 크리에이터 섹션 UI
- [x] **Task 10.1: 최근 활동 크리에이터 섹션 작성/보완**
@@ -1188,6 +1204,21 @@
## 검증 기록
### 2026-10-26 Task 9.6 공통 페이지 배지 가변 너비
- 무엇을: 현재/전체 숫자의 `frame(width: 20)` 두 곳을 제거하고 HStack에 `lineLimit(1)`, `fixedSize(horizontal: true, vertical: false)`를 적용했다. 내부 패딩, font, 서식, 배너 동작은 변경하지 않았다.
- 왜: 확대되는 글자에 비해 고정 숫자 칸이 좁아지는 문제를 해결하고, 인터뷰에서 확정한 숫자별 자연스러운 배지 너비를 반영한다.
- 렌더링 검증: iOS 18.3 / iPhone SE 3세대의 격리된 임시 앱에 수정 전 HEAD와 수정 후 `pageIndicator` 본문을 그대로 추출했다. 실제 `FontModifier`, 색상, spacing 및 번들 Pretendard/Noto Sans JP를 사용했다.
- 시나리오: ko/ja × `.large`/`.xxxLarge`/`.accessibility5` × 320/375pt × `01/01`, `01/20`, `08/20`, `20/20`의 48개 조합. 수정 후 모두 원래 글자 너비 합 + 간격 2pt + 가로 패딩 12pt, 한 줄 높이 + 세로 패딩 8pt와 일치했다. 글자 축소 없이 한 줄 표시와 배너 내부 수용을 통과했다.
- 기본 ko 320pt에서 `01/20` 너비 55.5pt, `08/20` 너비 58pt로 자연스러운 너비 변화를 확인했다. 확대 설정에서 수정 전 줄바꿈과 수정 후 한 줄 표시를 이미지로 비교했다.
- `xcrun swiftc -frontend -parse SodaLive/Sources/V2/Component/Banner/BannerCarousel.swift` 및 `git diff --check`: 성공.
- `xcodebuild -quiet -workspace SodaLive.xcworkspace -scheme SodaLive-dev -configuration Debug -destination 'generic/platform=iOS Simulator' -derivedDataPath "$RUN_TMP/DerivedData" CODE_SIGNING_ALLOWED=NO build`: 첫 전체 architecture 빌드는 600초 제한으로 중단. 동일 명령에 `ARCHS=x86_64 ONLY_ACTIVE_ARCH=YES`를 추가한 재실행은 exit 0으로 성공했다. 기존 Pods 경고 및 AppDelegate/LiveRoomViewModel의 미사용 변수 경고는 수정하지 않았다.
- `xcodebuild ... -scheme SodaLive-dev ... test`: exit 66, `Scheme SodaLive-dev is not currently configured for the test action.` 프로젝트에 테스트 번들이 없어 전체 테스트 성공으로 보고하지 않는다.
- 검증 한계: 제공 도구에 `lsp_diagnostics`가 없어 Swift 컴파일/앱 빌드로 대체했다. 홈·콘텐츠의 공통 호출 경로는 소스에서 확인했으며, 로그인된 두 화면의 API·스와이프까지 E2E 실행한 결과는 아니다. 제품 코드 변경은 표시 영역에 한정된다.
- 후속: 독립 리뷰와 QA 리소스 정리 후 Task를 닫는다.
- 최종 판정: 독립 리뷰 PASS, 수정 차단 사항 없음. [리뷰](reviews/phase9-carousel-badge-width.md)와 [증거](reviews/phase9-carousel-badge-width-evidence/README.md)에 결과를 보존했다.
- 정리: 소유 시뮬레이터 `C102DFF3-7DDB-4748-BE36-0F6A8EFB86BA`의 종료·shutdown·delete exit 0 및 삭제 후 부재를 확인했다. 소유 run root(임시 앱·컴파일 캐시·DerivedData 포함), notepad, test 오류 xcresult를 삭제하고 세 경로 모두 부재를 확인했다. 기존 사용자 시뮬레이터와 공유 캐시는 변경하지 않았다.
### 2026-07-31 Task 5.4 독립 수정 확인
- 코드 확인:
@@ -327,6 +327,13 @@ MainHomeView
- 라이브 스크롤 목록의 왼쪽 20pt 여백은 유지하고, `전체` 버튼에는 별도 오른쪽 여백을 적용하지 않는다.
- 라이브 목록이 비어 있으면 기존처럼 현재 라이브 섹션과 `전체` 버튼을 표시하지 않는다.
### 8.6 공통 배너 페이지 배지 가변 너비
- 홈과 콘텐츠 추천 탭이 공유하는 `BannerCarousel`의 현재/전체 페이지 숫자는 한 줄로 온전히 표시한다.
- 숫자별 20pt 고정 너비를 없애고 실제 문자열과 Dynamic Type 글자 크기에 따라 배지 너비가 자연스럽게 변하게 한다.
- 내부 가로 6pt/세로 4pt 패딩, 숫자 사이 간격 1pt, 기존 폰트·색상·두 자리 표기·우측 상단 배치를 유지한다.
- 배지 너비와 `/` 위치가 페이지 숫자에 따라 달라지는 것은 허용한다. 고정폭 숫자 폰트, 글자 축소, Dynamic Type 제한은 추가하지 않는다.
- 배너 크기, 자동 전환, 스와이프, 탭 동작, API는 변경하지 않는다. 검증은 `plan-task.md`의 `P9-T6`에서 추적한다.
## 9. Technical Constraints
- 앱 소스 변경은 `SodaLive/Sources/**`에서 수행한다.
- `Pods/**`, `generated/**`, `build/**`는 직접 수정하지 않는다.
@@ -405,3 +412,9 @@ MainHomeView
- `전체` 버튼 자체 프레임에 좌우 간격이 포함되어 있으므로 별도 trailing padding을 제거한다.
- 라이브 스크롤 목록의 왼쪽 `SodaSpacing.s20`과 목록·버튼 사이 `SodaSpacing.s12`는 유지한다.
### 2026-10-26 공통 배너 페이지 배지 인터뷰
- 사용자는 숫자에 따라 배지 너비가 달라져도 되며, 내부 패딩이 일정한 가변 너비가 원하는 UX임을 확정했다.
- 현재 브랜치에서 공통 컴포넌트만 최소 수정한다. 별도 페이지별 구현이나 신규 의존성을 추가하지 않는다.
- 이번 수정 범위의 열린 질문은 없다.