ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [WWDC2021] Improve access to Photos in your app
    앱등이에게 살충제를 뿌린다./Apple Dev Reference 2022. 8. 15. 00:08

    https://developer.apple.com/videos/play/wwdc2021/10046/

     

    Improve access to Photos in your app - WWDC21 - Videos - Apple Developer

    PHPicker is the simplest and most secure way to integrate the Photos library into your app — and it's getting even better. Learn how to...

    developer.apple.com

    자막 싱크가 안맞아 보기 힘들었던 세션..

     

    PHPicker에 생긴 4가지 업데이트

    Privacy

    - iOS14에서는 사용자들이 선택한 사진에 대한 접근만 했었다. 하지만 사용자들은 Photo Library 전체에 접근하는 것으로 오해하기도 했다.

    - 이를 해소하기 위해 설정-프라이버시-사진 메뉴에 새로운 섹션이 생김. 사용자가 선택한 사진만 접근가능하도록 허용된 앱의 목록

    설정-프라이버시-사진

    Ordered selection

    - 새로운 selection옵션이 생김

    var configuration = PHPickerConfiguration()
    configuration.selectionLimit = 0
    configuration.selection = .ordered
    

    Selection adjustment

    - iOS15에서 preselection API가 추가되었다. PHPicker를 띄울 때, 미리 사진을 선택할 수 있다. PHPickerConfiguration을 만들 때 Asset의 Identifier를 전달해주면 된다.

    func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
        let existingSelection: [String:PHPickerResult] = self.selection
        var newSelection = [String:PHPickerResult]()
        for result in results {
            let identifier = result.assetIdentifier!
            newSelection[identifier] = existingSelection[identifier] ?? result
        }
        self.selection = newSelection
        
        // Do something with selected assets
    }
    

    Reporting progress

    - iCloud, 저장공간 최적화를 사용중이라면 바로 사진을 가져오기가 힘들 것

    - 이전에는 다운로드하는 동안 로딩 인디케이터를 보여줬을 것이다. 하지만 iOS15에서 로딩 진행상황을 알 수 있게되었다.

     

    Cloud identifier APIs

    아이폰 앱에서 Asset Identifier를 가지고 사진을 로드하여 나타내었다. 아이패드에서 이 앱을 실행한다면 아이폰에서 사용한 이미지를 어떻게 찾을 수 있을까? (같은 Asset이라도 다른 디바이스에서는 다른 Identifier를 갖는다.)

    이는 Cloud identifier API를 사용해서 구현할 수 있다. 이 API는 서로 다른 디바이스에서도 같은 앨범, Asset을 찾을 수 있게 도와준다. PhotoKit을 지원하는 모든 플랫폼에서 사용가능(iOS, iPad, tvOS, macOS)

    이는 Identifier Mapping에 기반하여 작동한다.

    Identifier Mapping

    PhotoKit을 사용했다면 이전에 localIdentifier를 본적이 있을 것이다. Cloud Identifier(PHCloudIdentifier)는 여러 디바이스의 localIdentifier를 찾기 위해 사용한다.

     

    Code

    Local Identifier로 Cloud Identifier를 찾는 과정을 코드로 살펴보자.

    Identifier Mapping

    let cloudMappings = PHPhotoLibrary.shared()
    	.cloudIdentifierMappings(forLocalIdentifiers: localIdentifiers)
    
    for (localIdentifier, cloudMapping) in cloudMappings {
        if let cloudIdentifier = cloudMapping.cloudIdentifier {
            // save the cloudIdentifier for later...
            resolved[localIdentifier] = cloudIdentifier
        } else {
            // handle the cloudMapping error
        }
    }
    

    Benefit

    어떤 플랫폼에서도 같은 Asset에 접근할 수 있다. cloudIdentifier는 CloudKit도는 다른 네트워크 서비스를 이용해 디바이스끼리 공유해야 한다.

    On a second device

    다른 기기에서 앱을 실행하여 Asset을 가져오기 위해서는 cloudIdentifier를 이용하여 localIdentifier를 구해야 할 것이다. 코드가 매우 흡사하다.

    let localMappings = PHPhotoLibrary.shared()
    	.localIdentifierMappings(for: cloudIdentifiers)
    
    for (cloudIdentifier, localMapping) in localMappings {
        if let localIdentifier = localMapping.localIdentifier {
            // add the localIdentifier to our resolved assets
            resolved[cloudIdentifier] = localIdentifier
        } else {
            // handle the localMapping error
        }
    }
    

    하지만 항상 해피하지는 않다. 에러 핸들링이 필요할 것. 그 방법은 직접 영상을 보자. 12:10부터 보면됨

    자막 싱크 안맞아서 힘들었음 ㅜ

     

    Related Session

    [WWDC2020] Meet the new Photos picker

    - 공식 세션: https://developer.apple.com/videos/play/wwdc2020/10652/

    - 고무망치 버전: https://rhammer.tistory.com/404

     

    [WWDC2022] What's new in the Photos picker

    - 공식 세션: https://developer.apple.com/videos/play/wwdc2022/10023/

    - 고무망치 버전: https://rhammer.tistory.com/406

Designed by Tistory.