안녕하세요. 개발하는 정주입니다.
오늘은 UIImagePickerContoller에서 PHPickerViewController로 변경된 이유에 대해 포스팅하려고 합니다.
현재 제 실력으로 소화한 내용만 작성하였습니다. 시간이 흐른 뒤 실력이 늘면 내용이 업데이트될 수도 있습니다.
틀린 점이 있다면 댓글로 알려주세요. 즉시 수정하겠습니다.
UIImagePickerContoller
UIImagePickerContoller는 기존 iOS에서 사용되는 이미지, 영상을 선택, 편집뿐만 아니라 카메라까지 사용할 수 있는 유용한 클래스였습니다. 공식 문서에선 "A view controller that manages the system interfaces for taking pictures, recording movies, and choosing items from the user's media library."로 소개되고 있습니다.
https://developer.apple.com/documentation/uikit/uiimagepickercontroller
UIImagePickerController는 유저의 미디어 라이브러리에 "직접" 접근하여 사용했기 때문에 적절한 권한을 구해야 했고 권한을 얻지 못하면 해당 기능 자체를 사용하지 못했습니다. 최근 심각해진 개인 정보 노출 때문에 이러한 권한 허용에 까다로워졌다는 시대적 문제가 있었기 때문에 방안을 찾아야 했습니다.
PHPickerViewController
PHPickerViewController는 UIImagePickerController의 대체 클래스입니다.
https://developer.apple.com/documentation/photokit/phpickerviewcontroller
공식 문서에도 "The PHPickerViewController class is an alternative to UIImagePickerController."로 대놓고 대체 클래스라고 명시해 놨습니다.
iOS 14 이상에서 지원하며 UIKit에 포함되었던 UIImagePickerController와는 다르게 PhotosUI라는 프레임워크에 포함되어 있습니다.
UIImagePickerController와 PHPickerViewController의 차이점에 대해 알아보겠습니다.
PHPickerViewController는 Permission 요청이 필요 없다
공식 문서 PhotoKit의 "Selecting Photos and Videos in iOS" 문서에 따르면 PHPickerViewController는 별개의 프로세스에서 동작한다고 합니다. 즉 앱에서 Photo List를 보여주는 것이 아니라 별개의 프로세스에서 보여주기 때문에 앱에서는 Permission 요청을 하지 않아도 됩니다. 심지어 Photo 콘텐츠를 스크린샷 촬영도 불가하다고 합니다. 오로지 선택하는 기능만 가능합니다. 따라서 앱은 권한을 요청할 필요도 없고 보안도 더 강화되었습니다.
다만, 제한된 라이브러리 사용 등에는 여전히 권한 요청을 해야 합니다. 이에 대한 내용은 https://developer.apple.com/documentation/photokit/delivering_an_enhanced_privacy_experience_in_your_photos_app에서 확인하시면 되겠습니다. 기회가 되면 이 내용도 포스팅을 진행하도록 하겠습니다.
검색이 가능하다
PHPickerViewController는 사진 검색을 지원합니다. 날짜, 장소, 업체 이름, 카테고리, 이벤트, 사람을 검색할 수 있다고 합니다. 직접 사용해본 결과 100% 맞진 않지만 어느 정도 정확도를 가진 것으로 느껴집니다.
뿐만 아니라 grid 레이아웃의 Zoom In/Out, 콘텐츠 다중 선택도 기본적으로 지원합니다.
사용하기 편하다
위와 연계되는 내용입니다. 기존에는 gird 레이아웃의 Zoom In/Out, 컨텐츠 다중 선택 등이 필요할 때 직접 구현해야 했습니다. 특히, 다중 선택 기능은 사진을 다루는 대부분의 앱에서 필요로 하기에 필수적인 구현 항목으로 존재해왔습니다. PHPickerViewController는 이를 기본적으로 지원하므로 불필요한 코드를 지울 수 있습니다.
Permission을 요청하는 코드도 삭제할 수 있습니다. 왜냐하면 Permission 자체를 요청하지 않기 때문입니다. 요청하는 코드와 예외 처리 구문을 모두 삭제할 수 있으니 큰 이점으로 다가옵니다.
PHPickerViewController 단점
과연 PHPickerViewController로 업그레이드로 했을 때 장점만 있는 것은 아닙니다.
PHPickerViewController는 UIImagePickerController에서 썼던 카메라 사용과 사진을 편집하는 기능을 제공하지 않습니다. 또한 비디오 자동 압축(automatic compression)도 제공하지 않아 직접 처리해야 합니다.
위 단점이 크게 다가온다면 PHPickerViewController 사용을 고민해보셔야겠습니다.
마무리 잡담
오늘은 UIImagePickerController와 PHPickerViewController의 차이점에 대해 다루었습니다.
새로운 클래스이므로 여러 방면에서 업그레이드되었지만 몇 가지 단점도 존재한다는 것을 알았습니다.
감사합니다!
참조
https://developer.apple.com/documentation/photokit/selecting_photos_and_videos_in_ios
https://medium.com/macoclock/3-reasons-to-upgrade-to-ios-14-photo-picker-689e7171d7d9
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.