피드로 돌아가기
Dev.toFrontend
원문 읽기
macOS 렌더링 전환을 통한 테스트 속도 25배 향상 및 CI 정합성 해결
Our SwiftUI snapshot tests passed locally but failed on CI. Here's the actual fix.
AI 요약
Context
iOS Simulator 기반의 Snapshot Test 수행으로 인해 CI 환경에서 과도한 부팅 시간과 리소스 낭비가 발생함. 물리 기기와 CI VM 간의 렌더링 차이로 인한 테스트 실패가 빈번했으나, 단순 임계값 조정으로는 근본적인 구조적 결함 해결이 불가능한 상황이었음.
Technical Solution
- SwiftUI의 NSHostingView를 활용하여 테스트 실행 플랫폼을 iOS Simulator에서 macOS로 전환
- NSWindow 기반 렌더링 시 발생하는 환경별 Title Bar 높이 차이(167px)를 원인으로 식별
- NSWindow를 완전히 제거하고 NSHostingView 단독 렌더링 구조로 설계 변경
- SwiftUI Text 뷰의 렌더링 누락을 방지하기 위해 displayIgnoringOpacity 대신 cacheDisplay(in:to:) 메서드 채택
- 1x 스케일의 고정 비트맵(390x844) 전략을 통해 Retina 디스플레이와 CI VM 간의 해상도 불일치 제거
- #if os(iOS) 가드를 통한 OS 종속 API 분리 및 선택적 Simulator 실행 구조 적용
실천 포인트
- Snapshot Test 실패 시 임계값(Precision Threshold)을 95% 이하로 낮추는 행위를 지양할 것 - CI 환경의 failure attachments를 추출하여 Reference 이미지와 실제 이미지의 Pixel Dimension을 우선 비교할 것 - SwiftUI 뷰를 이미지로 캡처할 때 텍스트 렌더링 누락 여부를 확인하고 적절한 렌더링 API를 선택할 것