Files
sodalive-ios/docs/20261006_선물_UI_추가/plan-task.md
T

11 KiB

선물 UI 추가 구현 계획

문서 항목 내용
상태 구현 완료
작성일 2026-10-06
요구사항 기준 docs/20261006_선물_UI_추가/prd.md
API 기준 해당 없음
현재 Phase Phase 1 선물 UI 진입점 추가
현재 활성 Goal 없음

목표

한국 접속 및 한국어 설정 사용자가 크리에이터 상세과 마이 탭에서 선물 관련 진입점을 기존 UI 규칙대로 확인할 수 있게 한다.

현재 상태

Phase 상태 완료 Task 활성/다음 Goal 차단 또는 남은 조건
1 완료 5/5 없음 iOS 실기기/시뮬레이터 화면 캡처 QA는 미수행

범위

포함

  • 크리에이터 상세 헤더 액션 영역의 조건부 선물 보내기 버튼 추가.
  • 마이 탭 카테고리 그리드 첫 항목의 선물함 버튼 추가.
  • I18n 문자열 추가.
  • 후속 구현 연결을 위한 inert tap action 위치만 추가.

제외

  • 선물 보내기 화면, 선물함 화면, AppStep, API, Repository, ViewModel 구현.
  • 기존 UI 리팩터링과 공용 컴포넌트 추출.
  • 신규 의존성 추가와 프로젝트 설정 변경.

기술적 제약

  • 기술 스택: SwiftUI, 기존 I18n, 기존 asset catalog.
  • 아키텍처: 기존 view 파일에 최소 조건부 UI만 추가한다.
  • 데이터·보안: 신규 네트워크 요청과 민감정보 기록 없음.
  • 검증: 테스트 번들 타깃이 확인되지 않는 저장소 상태를 고려해 빌드와 수동 UI 매트릭스를 사용한다.
  • 구현: 자동 테스트가 현실적으로 어려운 SwiftUI 표시 변경이므로 각 구현 Task에 TDD 예외 사유와 대체 검증 방법을 명시한다.

Phase 1

Phase 결과: 크리에이터 상세와 마이 탭에 선물 진입점 UI가 추가되고, 후속 연결 전까지 탭 동작은 inert 상태로 유지된다.

선행조건: PRD 확정.

Phase 완료 조건: P1-T1~P1-T4와 P1-GATE 완료, 검증 기록 누적.

구현 항목

Task 1.1 문서 기준 확정

Goal 실행 P1-T1: 구현 전 PRD와 plan-task에 요구사항, 제외 범위, 검증 기준을 확정한다.

  • 시작 조건: 사용자 승인 완료.
  • 완료 증거: prd.md, plan-task.md 생성.
  • 범위 밖: production code 변경.
  • TDD 예외 사유: 문서 작성 Task로 production 동작을 변경하지 않는다.
  • 대체 검증 방법: 샘플 문서 구조와 경로 규칙을 대조한다.

Files:

  • Create: docs/20261006_선물_UI_추가/prd.md

  • Create: docs/20261006_선물_UI_추가/plan-task.md

  • 요구사항과 성공 기준을 PRD에 기록한다.

  • 구현 대상 파일과 검증 기준을 plan-task에 기록한다.

Task 1.2 I18n 문자열 추가

Goal 실행 P1-T2: 새 버튼 텍스트를 기존 I18n 구조에서 사용할 수 있게 한다.

  • 시작 조건: P1-T1 완료.
  • 완료 증거: I18n.CreatorChannelHome.sendGift, I18n.MyPage.Category.giftBox 추가.
  • 범위 밖: String Catalog 전환.
  • TDD 예외 사유: 정적 문자열 노출 추가로 테스트 타깃이 확인되지 않는다.
  • 대체 검증 방법: 컴파일과 실제 UI 렌더링에서 문자열 참조가 성공하는지 확인한다.

Files:

  • Modify: SodaLive/Sources/I18n/I18n.swift

  • CreatorChannelHome에 선물 보내기 문자열을 추가한다.

  • MyPage.Category에 선물함 문자열을 추가한다.

  • 기존 pick(ko:en:ja:) 패턴을 유지한다.

Task 1.3 크리에이터 상세 선물 버튼 추가

Goal 실행 P1-T3: 크리에이터 상세에서 조건에 맞는 사용자에게 선물 보내기 버튼을 표시한다.

  • 시작 조건: P1-T2 완료.
  • 완료 증거: 조건부 버튼 구현과 수동 표시 매트릭스 통과.
  • 범위 밖: 실제 선물 보내기 action, 라우팅, API.
  • TDD 예외 사유: SwiftUI view의 조건부 표시 변경이며 현재 테스트 번들 타깃이 확인되지 않는다.
  • 대체 검증 방법: 아래 매트릭스를 수동 확인하고 Debug build로 컴파일을 검증한다.

Files:

  • Modify: SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelTalkActionSection.swift

표시 매트릭스:

isOwnCreatorChannel isDmAvailable countryCode LanguageHeaderProvider.current 기대
false true "" "ko" 표시
false true "KR" "ko" 표시
false true "kr" "ko" 표시
true true "KR" "ko" 숨김
false false "KR" "ko" 숨김
false true "JP" "ko" 숨김
false true "KR" "ja" 숨김
  • 기존 DM 보내기 버튼 오른쪽에 같은 스타일의 선물 보내기 버튼을 추가한다.
  • 노출 조건은 isOwnCreatorChannel == false && isDmAvailable && isKoreanCountry && LanguageHeaderProvider.current == "ko"로 제한한다.
  • action은 빈 클로저로 둔다.

Task 1.5 크리에이터 상세 선물 버튼 후속 수정

Goal 실행 P1-T5: 크리에이터 상세 선물 보내기 버튼에서 아이콘을 제거하고 타인 채널에서만 표시한다.

  • 시작 조건: 사용자 추가 요청.
  • 완료 증거: CreatorChannelTalkActionSection의 조건과 버튼 content 수정, 빌드 검증.
  • 범위 밖: 마이 탭 선물함 아이콘 제거, 신규 라우팅/API.
  • TDD 예외 사유: SwiftUI view의 조건부 표시 변경이며 현재 테스트 번들 타깃이 확인되지 않는다.
  • 대체 검증 방법: 코드 조건 확인과 Debug build로 컴파일을 검증한다.

Files:

  • Modify: SodaLive/Sources/V2/CreatorChannel/Home/Components/CreatorChannelTalkActionSection.swift

  • Modify: docs/20261006_선물_UI_추가/prd.md

  • Modify: docs/20261006_선물_UI_추가/plan-task.md

  • 선물 보내기 버튼에서 ic_my_present 이미지를 제거한다.

  • 선물 보내기 버튼 노출 조건에 isOwnCreatorChannel == false를 추가한다.

Task 1.4 마이 탭 선물함 버튼 추가

Goal 실행 P1-T4: 마이 탭 카테고리 그리드 맨 앞에 선물함 버튼을 추가한다.

  • 시작 조건: P1-T2 완료.
  • 완료 증거: CategoryButtonsView 첫 항목 추가와 4열 유지 확인.
  • 범위 밖: 선물함 화면 이동, API, 신규 AppStep.
  • TDD 예외 사유: SwiftUI view의 정적 항목 추가이며 현재 테스트 번들 타깃이 확인되지 않는다.
  • 대체 검증 방법: 코드 순서와 화면 렌더링에서 첫 항목/아이콘/4열을 확인한다.

Files:

  • Modify: SodaLive/Sources/MyPage/MyPageView.swift

  • CategoryButtonsView의 첫 번째 CategoryButtonItem으로 ic_my_present와 I18n.MyPage.Category.giftBox를 추가한다.

  • 기존 4열 LazyVGrid 설정을 변경하지 않는다.

  • action은 빈 클로저로 둔다.

완료 조건

  • P1-T1~P1-T5가 완료됐다.
  • 구현 범위가 PRD의 제외 범위를 넘지 않는다.
  • 검증 기록이 누적됐다.

검증 방법

Phase 1 Gate

Goal 실행 P1-GATE: 선물 UI 진입점 추가의 빌드와 사용자 관찰 기준을 최종 판정한다.

xcodebuild -workspace "SodaLive.xcworkspace" -list
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build

Expected: 명령 exit code 0. 선물 보내기와 선물함 표시 조건이 PRD 성공 기준과 일치한다.

수동 검증:

  • 크리에이터 상세에서 DM 보내기 오른쪽에 선물 보내기가 표시된다. 코드 기준: CreatorChannelTalkActionSection에서 if shouldShowGiftButton이 if isDmAvailable 블록 다음에 위치한다.
  • 내 채널과 한국 접속/한국어 설정 외 조건에서는 선물 보내기가 숨겨진다. 코드 기준: isOwnCreatorChannel == false && isDmAvailable && isKoreanCountry && LanguageHeaderProvider.current == "ko".
  • 크리에이터 상세 선물 보내기 버튼은 아이콘 없이 텍스트만 표시한다. 코드 기준: 버튼 content에 Image("ic_my_present") 없음.
  • 마이 탭 카테고리 그리드 첫 항목에 선물함이 표시된다. 코드 기준: CategoryButtonsView의 첫 CategoryButtonItem.
  • 새 버튼 탭으로 화면 이동이나 네트워크 요청이 발생하지 않는다. 코드 기준: 두 action 모두 빈 클로저.

실행 순서와 의존성

순서 Goal 선행조건 병행 가능 차단 시 다음 행동
1 P1-T1 없음 아니요 요구사항 재확인
2 P1-T2 P1-T1 아니요 I18n 패턴 재확인
3 P1-T3 P1-T2 P1-T4와 가능 조건 매트릭스 재확인
4 P1-T4 P1-T2 P1-T3와 가능 그리드 순서 재확인
5 P1-GATE Task 전체 아니요 실패 Task로 회귀 수정
P1-T1 -> P1-T2 -> P1-T3/P1-T4 -> P1-GATE

변경 금지 항목

  • 신규 AppStep, 화면, API, ViewModel, Repository를 만들지 않는다.
  • DM 보내기 기존 동작을 변경하지 않는다.
  • CategoryButtonsView의 4열 설정을 변경하지 않는다.
  • 사용자 또는 다른 작업자가 추가한 asset 파일을 수정하지 않는다.

Progress

일시 항목 기록
2026-10-06 P1-T1 PRD와 plan-task 생성.
2026-10-06 P1-T2 I18n.CreatorChannelHome.sendGift, I18n.MyPage.Category.giftBox 추가.
2026-10-06 P1-T3 CreatorChannelTalkActionSection에 isDmAvailable, 한국 접속, 한국어 설정 조건의 선물 보내기 버튼 추가.
2026-10-06 P1-T4 CategoryButtonsView 첫 항목으로 ic_my_present 기반 선물함 버튼 추가.
2026-10-06 P1-T5 크리에이터 상세 선물 보내기 버튼에서 아이콘 제거, 타인 채널 조건 추가.
2026-10-06 P1-GATE xcodebuild -workspace "SodaLive.xcworkspace" -list 성공. 스킴 SodaLive, SodaLive-dev 확인. Xcode 기기 build number 경고는 있었으나 명령은 성공.
2026-10-06 P1-GATE xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build 성공. 기존 중복 Compile Sources 등 경고는 유지.
2026-10-06 P1-GATE xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build 성공. 일부 dependency scan 경고는 유지.
2026-10-06 P1-GATE git diff --check 성공.
2026-10-06 P1-GATE iOS 실기기/시뮬레이터 화면 캡처 기반 visual QA는 현재 실행 환경에 렌더링/캡처 도구가 없어 미수행. 대신 변경 파일 직접 확인과 빌드 검증으로 대체.
2026-10-06 P1-T5 git diff --check 성공.
2026-10-06 P1-T5 xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build 성공.
2026-10-06 P1-T5 xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build 최초 병렬 실행은 DerivedData build.db 잠금으로 실패했고, 단독 재실행은 성공.