photo library access all photos cause PHImageManager to fetch image thumbnails

61 Views Asked by At

Below is how I fetch an image from the library. When I grant photo access to "Selected Photos" in the system settings for the app the image is as expected the largest size available. However, when I change photo access permissions to "All Photos" the code below produces a thumbnail of the original image. The app runs on ios 15. No iCloud is configured. Can anyone tell me please what is going on?

private func loadImage(assetId: String, done: @escaping (Image?) -> Void)  {
    
    let fetchResults: PHFetchResult<PHAsset> =
        PHAsset.fetchAssets(withLocalIdentifiers: [assetId], options: nil)

    guard let asset: PHAsset = fetchResults.firstObject else {
        return
    }

    let manager = PHImageManager()
    manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize,
                            contentMode: .aspectFit, options: nil) { (uiImage, _) in
        if let uiImage = uiImage {
            done(Image(uiImage: uiImage))
        } else {
            done(nil)
        }
    }
}
1

There are 1 best solutions below

0
Macs On

In general I can see why image quality depends on level of access. I was not able to find any documentation on this. What I did find though was that the deliveryMode of the request also matters. when I added the following options to the requestImage call the issue was solved.

let requestOptions = PHImageRequestOptions()
requestOptions.deliveryMode = .highQualityFormat
let manager = PHImageManager()
manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize,contentMode: .aspectFit, options: requestOptions) { (uiImage, _) in
    //do something
}