iOS 13 - PHImageManager returns a downscaled image for My Photo Stream photos

Since iOS 13 I can't get original-res versions of photos in My Photo Stream using PhotoKit. I've had several complaints from users over the last few months, so it's not anything specific to my own device or account. The following code always retreives very small images (e.g. 360 x 480).


PHPhotoLibrary.requestAuthorization({ status in
    DispatchQueue.main.async { 
        if status == .authorized {
                    
            // if iCloud Photo Library is disabled and Photo Stream is enabled this will give you My Photo Stream
            let photoStream = PHAssetCollection.fetchAssetCollections(with: .album, 
                                                                   subtype: .albumMyPhotoStream, 
                                                                   options: nil)
            if let photoStreamCollection = photoStream.firstObject {
                        
                let res = PHAsset.fetchAssets(in: photoStreamCollection, options: nil)
                if let asset = res.firstObject {
                            
                    let opts = PHImageRequestOptions()
                    opts.deliveryMode = .highQualityFormat
                    opts.isSynchronous = true
                    opts.isNetworkAccessAllowed = true
                    opts.resizeMode = .exact
                            
                    print("asset size: \(asset.pixelWidth) x \(asset.pixelHeight)")
                            
                    PHImageManager.default().requestImage(for: asset, 
                                                   targetSize: PHImageManagerMaximumSize, 
                                                  contentMode: .default, 
                                                      options: (img, info) in
                        if let img = img {
                            print("image size: \(img.size.width * img.scale) x \(img.size.height * img.scale)")
                        }
                    }
                            
                    PHImageManager.default().requestImageDataAndOrientation(for: asset, options: opts) 
                    { (imgData, dateUTI, orientation, info) in
                        if let imgData = imgData {
                            if let img = UIImage(data: imgData) {
                                print("image size: \(img.size.width * img.scale) x \(img.size.height * img.scale)")
                            }
                        }
                    }
                }
            }
        }
    }
})


asset size: 1536 x 2048

2020-02-02 08:18:44.452620-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-1-0 Failed to decode image

2020-02-02 08:18:44.468675-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-1-0 Failed to decode image

2020-02-02 08:18:44.479691-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-1-0 Failed to decode image

image size: 360.0 x 480.0

2020-02-02 08:18:44.485069-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-2-0 Failed to load image from URL: file:///var/mobile/Media/PhotoStreamsData/267078714/100APPLE/IMG_0001.JPG

2020-02-02 08:18:44.490447-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-2-0 Failed to load image from URL: file:///var/mobile/Media/PhotoStreamsData/267078714/100APPLE/IMG_0001.JPG

2020-02-02 08:18:44.501745-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-2-0 Failed to load image from URL: file:///var/mobile/Media/PhotoStreamsData/267078714/100APPLE/IMG_0001.JPG

image size: 360.0 x 480.0


I've tried every conceivable combination of options in PHRequestOptions. Note that if I set opts.version = .original it gives me a nil image and nil image data.


I've also tried asset.requestContentEditingInput(...) to try to access the image URL directly and I get this error in the console:


2020-02-02 08:26:49.641787-0700 photostreamphoto[7416:2578984] [PhotoKit] Asset resource file URL not reachable, may have been pruned, will attempt availability change request


Interestingly, UIImagePicker does retrieve the original-res image (e.g. 1536 x 2048). The Photos app also shows the full-res image.

Replies

same here on tvOS - how did you resolve it?

Hi,
I have the same issue than you, so I would like to know if you found a solution since you post it.
This may be bug. Please provide feedback and if possible collect logs after installing the logging profile.
Thanks!