Files
sodalive-ios/docs/20260324_라이브상세복귀시DIM만보이는문제수정.md

2.7 KiB

20260324 라이브 상세 복귀 시 DIM만 보이는 문제 수정 계획

작업 체크리스트

  • 라이브 상세 복귀 시 상세 패널 비노출 원인 분석
  • LiveDetailView 복귀 시점 표시 상태 복원 로직 구현
  • 원인과 수정안 문서화
  • 진단/빌드/테스트 검증 수행 및 기록

원인 분석

  • LiveDetailView가 자체 LiveDetailViewModel@ObservedObject로 생성하고 있었다.
  • 이 뷰는 ContentView의 전역 오버레이(appState.liveDetailSheet)로 표시되며, 채널 보기 이동(AppState.shared.setAppStep(step: .creatorDetail))이나 앱 활성/비활성 전환 시 부모 뷰가 다시 그려진다.
  • 재그리기 시 @ObservedObject 인스턴스가 재생성되면 showDetail이 기본값(false)로 돌아가고, 하단 패널은 offset(y: viewModel.showDetail ? 0 : proxy.size.height * 0.9) 때문에 화면 밖으로 내려간다.
  • DIM 레이어(Color.black.opacity(0.7))는 showDetail과 무관하게 항상 렌더링되므로, 결과적으로 "상세 패널은 사라지고 DIM만 보이는" 상태가 발생한다.

수정안

  • SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift
    • @ObservedObject var viewModel = LiveDetailViewModel()
    • @StateObject private var viewModel = LiveDetailViewModel()로 변경.
  • 상세 시트를 소유하는 뷰에서 ViewModel 인스턴스를 유지하도록 바꿔, 페이지 이동/복귀 및 라이프사이클 변화 시에도 showDetail 상태가 초기화되지 않도록 했다.
  • 기존 UI 구조, 애니메이션, 닫기 로직은 변경하지 않고 상태 소유 방식만 최소 수정했다.

검증 기록

1차 검증 (2026-03-24)

  • 무엇/왜/어떻게:
    • 무엇: LiveDetailView의 ViewModel 소유 방식을 @StateObject로 변경.
    • 왜: 복귀 시 showDetail 초기화로 패널이 숨겨지고 DIM만 남는 문제를 방지하기 위함.
    • 어떻게: 코드 수정 후 진단/빌드/테스트 엔트리 포인트 명령으로 회귀 여부 확인.
  • 실행 명령:
    • lsp_diagnostics(file: SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift)
    • xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build
    • xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test
    • xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build
  • 결과:
    • lsp_diagnostics: No such module 'Kingfisher' 1건(현재 SourceKit 환경 제약으로 인한 기존 이슈).
    • SodaLive 빌드: ** BUILD SUCCEEDED **
    • SodaLive 테스트: Scheme SodaLive is not currently configured for the test action.
    • SodaLive-dev 빌드: ** BUILD SUCCEEDED **