# 20260324 라이브 상세 복귀 시 DIM만 보이는 문제 수정 계획 ## 작업 체크리스트 - [x] 라이브 상세 복귀 시 상세 패널 비노출 원인 분석 - [x] `LiveDetailView` 복귀 시점 표시 상태 복원 로직 구현 - [x] 원인과 수정안 문서화 - [x] 진단/빌드/테스트 검증 수행 및 기록 ## 원인 분석 - `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 **`