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 잠금으로 실패했고, 단독 재실행은 성공. |