3.6 KiB
3.6 KiB
20260317 이미지 선택 크롭 지연 및 미적용 수정
구현 체크리스트
- 공통 이미지 선택/크롭 경로 전수 분석으로 재현 원인 특정
- QA: 크롭 사용 화면과 공통 컴포넌트에서 지연/미로딩 가능 지점을 코드 근거로 식별
- 공통 원인 기반으로 크롭 로직 수정
- QA: 라이브 수정 포함 모든 크롭 사용 화면이 수정된 공통 로직을 통해 이미지 로딩/적용 가능
- 라이브 수정 로딩 UI를
ProgressView에서LoadingDialog로 전환- QA: 이미지 준비 중 라이브 수정 화면 상단에
LoadingDialog노출
- QA: 이미지 준비 중 라이브 수정 화면 상단에
- 정적 진단/빌드/테스트 검증
- QA: 수정 파일
lsp_diagnostics0건,xcodebuild ... build성공, 테스트 명령 결과 기록
- QA: 수정 파일
검증 기록
- 2026-03-17
- 무엇/왜/어떻게:
- 원인 분석
- 공통 크롭 사용 화면 5곳(
LiveRoomCreateView,LiveRoomViewV2,ContentCreateView,ProfileUpdateView,CreatorCommunityWriteView)이 모두selectedPickedImage -> normalizedForCrop() -> ImageCropEditorView경로를 공유했다. - 호출부에서
normalizedForCrop()를 1회 수행한 뒤,ImageCropEditorView초기화에서 다시image.normalizedForCrop()를 수행해 대용량 이미지에서 렌더링 비용이 중복되었다. - 기존
normalizedForCrop()는imageOrientation == .up이면 원본을 그대로 반환해 대용량 원본이 그대로 크롭 뷰에 들어가면서 표시 지연/미로딩(실사용 시점 디코드 지연,cgImage사용 실패 가능성) 위험을 남겼다. - 크롭 저장 시 오른쪽 흰 선 포함 이슈는 크롭/리사이즈 좌표가 소수점/
integral확장에 의해 경계 픽셀을 포함할 수 있는 계산 방식에서 발생 가능하다고 판단했다.
- 공통 크롭 사용 화면 5곳(
- 수정 방식
ImagePicker.swiftImageCropEditorView내부 2차 정규화를 제거(self.normalizedImage = image)하고, 표시 이미지도 동일normalizedImage를 사용하도록 통일.UIImage.normalizedForCrop(maxDimension: 2048)를 항상 렌더링+다운스케일하도록 변경해 대용량 원본을 편집 전 단계에서 정규화/경량화.cropImage()의cropRect를floor기반 픽셀 정렬로 보정하고,normalizedForCrop/resizedToMaxDimension의 타깃 크기도 정수 픽셀(floor)로 맞춰 오른쪽 크롭 선(흰색 라인) 저장 가능성을 제거.
LiveRoomViewV2.swiftisImageLoading시 노출 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)가 재현되어 정적 진단은 빌드 성공 결과로 대체 확인
- 무엇/왜/어떻게: