Files
sodalive-ios/docs/20260317_이미지선택크롭지연및미적용수정.md

3.6 KiB

20260317 이미지 선택 크롭 지연 및 미적용 수정

구현 체크리스트

  • 공통 이미지 선택/크롭 경로 전수 분석으로 재현 원인 특정
    • QA: 크롭 사용 화면과 공통 컴포넌트에서 지연/미로딩 가능 지점을 코드 근거로 식별
  • 공통 원인 기반으로 크롭 로직 수정
    • QA: 라이브 수정 포함 모든 크롭 사용 화면이 수정된 공통 로직을 통해 이미지 로딩/적용 가능
  • 라이브 수정 로딩 UI를 ProgressView에서 LoadingDialog로 전환
    • QA: 이미지 준비 중 라이브 수정 화면 상단에 LoadingDialog 노출
  • 정적 진단/빌드/테스트 검증
    • QA: 수정 파일 lsp_diagnostics 0건, xcodebuild ... build 성공, 테스트 명령 결과 기록

검증 기록

  • 2026-03-17
    • 무엇/왜/어떻게:
      • 원인 분석
        • 공통 크롭 사용 화면 5곳(LiveRoomCreateView, LiveRoomViewV2, ContentCreateView, ProfileUpdateView, CreatorCommunityWriteView)이 모두 selectedPickedImage -> normalizedForCrop() -> ImageCropEditorView 경로를 공유했다.
        • 호출부에서 normalizedForCrop()를 1회 수행한 뒤, ImageCropEditorView 초기화에서 다시 image.normalizedForCrop()를 수행해 대용량 이미지에서 렌더링 비용이 중복되었다.
        • 기존 normalizedForCrop()imageOrientation == .up이면 원본을 그대로 반환해 대용량 원본이 그대로 크롭 뷰에 들어가면서 표시 지연/미로딩(실사용 시점 디코드 지연, cgImage 사용 실패 가능성) 위험을 남겼다.
        • 크롭 저장 시 오른쪽 흰 선 포함 이슈는 크롭/리사이즈 좌표가 소수점/integral 확장에 의해 경계 픽셀을 포함할 수 있는 계산 방식에서 발생 가능하다고 판단했다.
      • 수정 방식
        • ImagePicker.swift
          • ImageCropEditorView 내부 2차 정규화를 제거(self.normalizedImage = image)하고, 표시 이미지도 동일 normalizedImage를 사용하도록 통일.
          • UIImage.normalizedForCrop(maxDimension: 2048)를 항상 렌더링+다운스케일하도록 변경해 대용량 원본을 편집 전 단계에서 정규화/경량화.
          • cropImage()cropRectfloor 기반 픽셀 정렬로 보정하고, normalizedForCrop/resizedToMaxDimension의 타깃 크기도 정수 픽셀(floor)로 맞춰 오른쪽 크롭 선(흰색 라인) 저장 가능성을 제거.
        • LiveRoomViewV2.swift
          • isImageLoading 시 노출 UI를 ProgressView 오버레이에서 LoadingView로 교체해 라이브 수정 화면 위 로딩 다이얼로그 형태로 표시.
    • 실행 명령: grep "ImageCropEditorView\(|normalizedForCrop\(|selectedPickedImage" SodaLive/Sources -R
    • 결과: 공통 크롭 호출 경로 5개 화면 + 공통 컴포넌트 1개(ImagePicker.swift) 확인
    • 실행 명령: grep "self\.normalizedImage\s*=\s*image\.normalizedForCrop\(" SodaLive/Sources -R
    • 결과: 0건(크롭 에디터 내부 중복 정규화 제거 확인)
    • 실행 명령: xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build
    • 결과: ** BUILD SUCCEEDED **
    • 실행 명령: xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test
    • 결과: Scheme SodaLive is not currently configured for the test action.
    • 실행 명령: lsp_diagnostics (ImagePicker.swift, LiveRoomViewV2.swift)
    • 결과: SourceKit 환경에서 모듈 해석 이슈(No such module)가 재현되어 정적 진단은 빌드 성공 결과로 대체 확인