피드로 돌아가기
Converting RAW to HEIC inside Apple Photos: App Intents, HDR gain maps, and never losing a metadata field
Dev.toDev.to
Infrastructure

App Intent 기반의 데이터 무결성 보장 RAW to HEIC 변환 설계

Converting RAW to HEIC inside Apple Photos: App Intents, HDR gain maps, and never losing a metadata field

Sandro 🦖☄️2026년 6월 25일10advanced

Context

기존 Share Extension의 제한적인 Sandbox 환경과 권한 체계로 인해 PhotoKit 라이브러리 내 원본 에셋 삭제 및 수정 작업에 한계 발생. 메모리 제약이 심한 확장 프로그램 프로세스 내에서 고해상도 이미지 렌더링 수행 시 앱 크래시 위험 상존.

Technical Solution

  • 권한 비대칭 해결을 위해 Share Extension 대신 부모 앱의 ID와 권한을 그대로 사용하는 App Intent 아키텍처 채택
  • 메모리 부하 분산을 위해 Intent Snippet에서는 추정치 및 확인 UI만 제공하고, 실제 무거운 Decode/Encode 작업은 메인 앱 프로세스에서 수행
  • 데이터 손실 방지를 위해 '변환 $\rightarrow$ 쓰기 $\rightarrow$ PHAsset 동기 조회를 통한 검증 $\rightarrow$ 삭제' 순의 엄격한 상태 전이 파이프라인 구축
  • UX 최적화 및 원자성 보장을 위해 개별 삭제가 아닌 단일 배치(Batched) deleteAssets 호출 구조 설계
  • 데이터 영속성 및 중단 지점 복구를 위해 SQLite 기반 큐를 도입하여 배치 작업의 내구성과 재개 가능성 확보
  • 플랫폼별 리소스 최적화를 위해 iOS는 Serial Async Loop를, macOS는 코어 수 기반의 Bounded-Concurrent Turbo Mode 적용

1. 라이브러리 수정/삭제 권한이 필요한 iOS 기능 설계 시 Share Extension보다 App Intent 우선 검토

2. ImageIO 출력값의 단순 성공 리턴을 신뢰하지 말고, 실제 파일을 다시 읽어 검증하는 Verification 단계 추가

3. 대량 데이터 삭제 시 사용자 경험과 원자성을 위해 개별 호출이 아닌 Batch API 활용

4. 플랫폼별 하드웨어 특성에 따라 처리 전략(Serial vs Concurrent)을 동적으로 분리하여 메모리 풋프린트 최적화

원문 읽기