The app crashes when attempting to fetch the latest image from the gallery. The crash occurs specifically when the latest image is a freshly captured photo from the native Camera app.
var allPhotosOptions: PHFetchOptions {
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
fetchOptions.predicate = NSPredicate(format: "mediaType = \(PHAssetMediaType.image.rawValue)")
return fetchOptions
}
func requestImageFromPhotoLibrary() {
var selectedAssets = [String]()
let allPhotos = PHAsset.fetchAssets(with: allPhotosOptions)
let firstAsset = allPhotos.firstObject?.localIdentifier
selectedAssets.append(firstAsset ?? "")
let assetResult = PHAsset.fetchAssets(withLocalIdentifiers: selectedAssets, options: nil)
// Perform assets creation in background thread
DispatchQueue.global(qos: .background).async { [weak self] in
if let phAsset = assetResult.firstObject {
let options = PHImageRequestOptions()
options.isNetworkAccessAllowed = true
options.deliveryMode = .highQualityFormat
let resultHandler: (Data?, String?, CGImagePropertyOrientation,
[AnyHashable: Any]?) -> Void = { [weak self] (data, _, _, _) in
guard let self = self else { return }
if let imageData = data, let assetImage = UIImage(data: imageData) {
print("Image size: \(assetImage.size)")
} else {
print("Didn't get assets from PhotosFramework")
}
}
PHImageManager.default().requestImageDataAndOrientation(for: phAsset, options: options,
resultHandler: resultHandler)
}
}
}