ios

WWDC 22 - Discover PhotoKit change History

Beom 2024. 8. 11. 22:02

 사진과 관련된 프로젝트를 진행 중에 궁금한 점이 있어 시청하게 되었다. 기존과 다른 토큰을 이용한 asset을 가지고 오는 방법이다.


PhotoKit

 

Apple Inc. Discover PhotoKit change history - WWDC22 - Videos - Apple Developer

  • photoKit은 다양한 API를 제공한다.
  • 기존에는 어떤 사진이 추가된건지 앱이 생성된 날짜가 앱의 마지막 실행 날짜 이후인 asset을 가지고 올 수 있었다.
  • 업데이트를 하는 경우 모든 asset을 가지고 오고, 업데이트를 위해 수정 날짜를 확인해야 한다. 하지만 이 경우에 내부 활동 때문에 asset의 수정 날짜가 변경이 일어나 잘못 찾을 수 있다.
  • 삭제를 하는 경우 모든 asset을 가지고 와서 반환하지 않은 asset을 비교해야 하기 때문에 더 어렵다.
  • 전체적으로 앱이 실행이 될 때마다 여러 확인 작업을 해야 하기 때문에, 앱에 많은 양의 asset을 표시하는 경우 비용이 많이 들 수 있다.

그렇기 때문에 새로운 API를 개발했다.

  • 이렇게 앱의 실행 전에 변경 사항이 있는데 이러한 변경 사항을 어떻게 알 수 있을까?
  • Persistent change token을 사용하면 된다.
  • 이 토큰은 앱 실행시 지속될 수 있으며 토큰 이후 발생한 photo library의 변경사항을 가져오는데 사용될 수 있다.
  • 앱의 권한이 제한된 사용의 경우에는 사용자가 선택한 PhotoKit의 개체에 대한 변경 사항만 반환이 된다
  • 이 토큰은 각 장치에 로컬로 저장이 되며 photo library의 인스턴스나 변경사항에 접근하는 것이 저렴하다.
  • photokit을 사용하는 모든 플랫폼에서 사용이 가능하다.
  • 앱을 실행하는 경우 토큰을 앱 내부에 저장이 가능하다.
  • 나중에 토큰을 사용하여 이후 발생한 사진 라이브러리 변경 사항을 가져올 수 있다.
  • 마지막으로 저장된 토큰을 이용하여 변경 사항을 가지고 온다.
  • 변경 사항을 열거하고 변경 개체의 변경 세부 정보를 가지고 온다.
  • 변경 사항을 처리하고 나중에 사용이 가능하도록 변경된 토큰을 저장한다.
  • PHChange는 활성 메모리 내부에서 fetchResult를 처리하며 앱이 실행되는 동안 사진 라이브러리에 실시간 변경사항을 기록하는데 사용된다
  • History는 photo library에 장기간 실행되는 변경 사항을 기록하며 앱이 활성화되지 않은 경우 변경사항을 알 수 있다.
  • 앱의 요구 사항에 따라 모두 사용하거나 필요한 api만 사용하면 된다.
  • 토큰을 가지고 온다.
  • 토큰을 이용하여 변경사항을 가지고 온다.
  • 변경 내역에서 앱에 영향을 미치는 변경 사항을 판별해 사용한다.
  • 새로운 하이킹 운동을 위해 photo library에 어떤 asset이 추가 되었는지, 이전 앱에서 참조한 asset에 업데이트, 삭제가 일어났는지 앱이 알 수 있다.
  • insertIdentifiers를 사용하면 각 하이킹 시작, 종료 날짜에 대해 생성 날짜를 확인해 추가된 asset등을 확인이 가능하다.
  • 업데이트된 자산에 조정이 가능하도록 새로운 hasAdjustments API를 통해 asset을 다시 UI에 그려줘야 하는지 판단이 가능하다.
  • 삭제된 asset에 대한 처리도 해줘야 한다.
  • 새로운 history API를 사용할때 명심해야 한다.
  • 앱의 어떤 변경 사항이 중요한지 파악하고 해당 변경 사항만 확인을 해야 한다.
  • 성능을 향상하기 위해서는 여러 개의 작은 요청 대신 업데이트된 asset에 대한 대규모 fetch request가 더 좋을 수 있다.
  • photo library는 내부 처리와 동기화 활동으로 인해 많이 변경될 수 있다.
  • 앱이 자주 실행되지 않는 경우 많은 양의 변경 사항을 열거하게 될 수 있다. ( 변경 기록이 많다) 그렇기 때문에 UI를 차단하지 않도록 백그라운드 스레드에서 변경 내역을 요청하는 것이 좋다.
  • 2가지 오류 유형이 있다.
  • 토큰이 사용가능한 변경 내역보다 오래된 경우
  • 변경 사항을 재구성이 불가능하고 변경의 세부 정보를 사용할 수 없다
  • 이러한 경우, 앱이 최신 상태인지 확인하기 위해 라이브러리에서 개체를 다시 가지고 오는 것이 좋다.