Files
sodalive-ios/docs/plan-task/20260519_오디오콘텐츠카드컴포넌트.md

7.8 KiB

20260519 오디오 콘텐츠 카드 컴포넌트 구현 계획

기준 문서

  • PRD: docs/prd/20260519_오디오콘텐츠카드컴포넌트_PRD.md
  • Figma source nodes: 20:3800, 20:3818, 20:3829
  • 코드 스타일: docs/agent-guides/code-style.md
  • 빌드/검증: docs/agent-guides/build-test-verification.md

작업 원칙

  • PRD의 성공 기준과 제외 범위를 벗어나지 않는다.
  • 기존 구현이 있더라도 PRD 기준으로 재검토하고, 맞지 않는 부분만 최소 수정한다.
  • 신규 화면 적용, API 연동, asset 추가, dependency 추가는 하지 않는다.
  • series, ORIGINAL, FIRST, 무료 관련 구현은 이번 범위에서 제거한다.
  • 수정 후 검증 기록은 이 문서 하단에 누적한다.

구현 대상 파일

  • 생성 또는 수정: SodaLive/Sources/V2/Component/AudioContentCard.swift
    • AudioContentCardSize: Figma 세 크기와 typography/spacing 값을 캡슐화한다.
    • AudioContentCard: 썸네일과 라벨을 조합하는 public 재사용 View다.
    • Preview: 세 크기를 한 번에 비교한다.
  • 필요 시 수정: SodaLive.xcodeproj/project.pbxproj
    • 신규 Swift 파일이 Xcode 빌드 대상에 포함되지 않는 경우에만 수정한다.
  • 수정: docs/plan-task/20260519_오디오콘텐츠카드컴포넌트.md
    • 구현 계획과 검증 기록을 유지한다.

TASK 체크리스트

  • Task 1: PRD 기준으로 기존 구현 상태 점검

    • AudioContentCard.swift가 존재하는지 확인한다.
    • AudioContentCardSizelarge, medium, small만 제공하는지 확인한다.
    • 각 크기 값이 PRD와 일치하는지 확인한다.
      • large: width 185, thumbnail 185x185, label width 185, label horizontal padding 0, title .heading4, subtitle .body5
      • medium: width 163, thumbnail 163x163, label width 151, label horizontal padding 6, title .heading4, subtitle .body5
      • small: width 122, thumbnail 122x122, label width 114, label horizontal padding 4, title .body1, subtitle .caption2
      • 전체 공통: thumbnail-title gap 8, title-subtitle gap 2
    • series, ORIGINAL, FIRST, 무료 관련 API나 UI가 포함되어 있으면 제거 대상으로 표시한다.
  • Task 2: 컴포넌트 API 정리

    • 호출부 API를 아래 형태로 유지한다.
AudioContentCard(
    size: .large,
    title: "오디오 콘텐츠 제목",
    subtitle: "크리에이터명"
) {
    Image("content_thumbnail")
        .resizable()
        .scaledToFill()
}
  • thumbnail@ViewBuilder로 주입한다.

  • production code에 Figma localhost URL을 넣지 않는다.

  • 실제 이미지 로딩 방식은 호출부 책임으로 둔다.

  • Task 3: 시각 스펙 구현 또는 보정

    • 썸네일 영역은 size.width x size.width로 고정한다.
    • 썸네일 corner radius는 SodaSpacing.s14를 사용한다.
    • 썸네일과 제목 사이 간격은 모든 크기에서 8pt로 설정한다.
    • 제목과 부제 사이 간격은 모든 크기에서 2pt로 설정한다.
    • 라벨 horizontal padding은 large 0pt, medium 6pt, small 4pt로 설정한다.
    • 제목/부제는 각각 .lineLimit(1).truncationMode(.tail)을 적용한다.
    • 카드 자체는 배경색을 강제하지 않는다.
    • series, ORIGINAL, FIRST, 무료 관련 View, enum case, parameter, Preview 상태를 추가하지 않는다.
  • Task 4: Preview 작성 또는 보정

    • Preview는 large, medium, small 세 크기를 모두 포함한다.
    • Preview 썸네일은 외부 네트워크나 Figma localhost asset에 의존하지 않는다.
    • Preview에는 태그 노출 조합을 포함하지 않는다.
  • Task 5: Xcode 빌드 대상 포함 여부 확인

    • 신규 파일이 Xcode 프로젝트에 포함되어 있지 않으면 SodaLive.xcodeproj/project.pbxproj에 추가한다.
    • 이미 포함되어 있거나 파일 시스템 동기화 방식으로 빌드되는 경우 프로젝트 파일을 수정하지 않는다.
    • 프로젝트 파일을 수정한 경우 plutil -lint SodaLive.xcodeproj/project.pbxproj를 실행한다.
  • Task 6: 검증 실행

    • 변경 Swift 파일에 대해 lsp_diagnostics를 실행한다.
    • 단일 파일 문맥에서 프로젝트 공통 확장을 찾지 못하는 SourceKit 오류가 나오면 실제 빌드 결과로 최종 판단하되, 오류 내용을 검증 기록에 남긴다.
    • 다음 빌드 명령을 실행한다.
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build
  • test action 확인이 필요하면 다음 명령을 실행하고, 스킴 미구성 시 그 사실을 검증 기록에 남긴다.
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test
  • Task 7: 문서와 코드 일치 여부 최종 점검
    • PRD의 Success Criteria 각 항목을 코드와 대조한다.
    • 구현 계획의 체크리스트가 실제 상태와 맞는지 갱신한다.
    • 검증 기록을 하단에 누적한다.

검증 기록

2026-05-19 문서 재정리

  • 목적: 구현보다 PRD/계획 문서를 먼저 정리하라는 사용자 피드백 반영
  • 수행 내용:
    • docs/prd/20260519_오디오콘텐츠카드컴포넌트_PRD.md 신규 작성
    • docs/plan-task/20260519_오디오콘텐츠카드컴포넌트.md를 구현 결과 요약에서 구현 계획 문서로 재작성
  • 아직 수행하지 않은 작업:
    • PRD 기준 코드 재수정
    • TASK 체크리스트 완료 처리
    • 신규 빌드 검증

2026-05-19 범위 축소 반영

  • 목적: 이번 범위에서 제외할 항목 명시
  • 반영 내용:
    • series 타입 콘텐츠 카드 제외
    • ORIGINAL 태그 제외
    • FIRST 태그 제외
    • 무료 태그 제외
    • 계획 문서에서 태그 구현/Preview 항목 제거

2026-05-19 라벨 패딩 및 간격 스펙 반영

  • 목적: Figma 컴포넌트의 라벨 위치와 텍스트 간격을 구현 전에 문서 기준으로 고정
  • 반영 내용:
    • label horizontal padding: large 0pt, medium 6pt, small 4pt
    • thumbnail-title gap: 모든 크기 8pt
    • title-subtitle gap: 모든 크기 2pt

2026-05-19 PRD 기준 구현

  • 목적: PRD와 구현 계획 기준으로 오디오 콘텐츠 카드 컴포넌트 보정
  • 수행 내용:
    • AudioContentCard API에서 showsFirstTag, showsFreeTag 제거
    • AudioContentTag 및 태그 관련 UI 제거
    • label horizontal padding 적용: large 0pt, medium 6pt, small 4pt
    • thumbnail-title gap 8pt, title-subtitle gap 2pt 적용
    • Preview에서 태그 노출 상태 제거
  • 확인 내용:
    • SodaLive.xcodeproj/project.pbxprojAudioContentCard.swift가 두 앱 타깃 Sources에 포함되어 있음
  • 아직 수행하지 않은 작업:
    • 해당 없음

2026-05-19 PRD 기준 구현 검증

  • lsp_diagnostics:
    • 결과: SourceKit 단일 파일 문맥에서 SodaSpacing, SodaTypography, appFont, Color.gray800, Color.gray500 등 프로젝트 공통 확장을 찾지 못하는 오류 표시
    • 판단: 기존 V2 컴포넌트에서도 동일한 단일 파일 문맥 한계가 있어 실제 Xcode 빌드로 최종 판단
  • plutil -lint "SodaLive.xcodeproj/project.pbxproj":
    • 결과: SodaLive.xcodeproj/project.pbxproj: OK
  • git diff --check:
    • 결과: 통과
  • xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build:
    • 결과: BUILD SUCCEEDED
  • xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test:
    • 결과: Scheme SodaLive-dev is not currently configured for the test action.
  • 문서/코드 대조:
    • large, medium, small 크기 지원 확인
    • label horizontal padding large 0pt, medium 6pt, small 4pt 반영 확인
    • thumbnail-title gap 8pt, title-subtitle gap 2pt 반영 확인
    • series, ORIGINAL, FIRST, 무료 관련 API/UI 제거 확인