Начиная с iOS 13 Я не могу получить исходные версии фотографий в My Photo Stream с помощью PhotoKit. У меня было несколько жалоб от пользователей за последние несколько месяцев, так что это не что-то конкретное c для моего собственного устройства или учетной записи. Следующий код всегда получает очень маленькие изображения (например, 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: opts) { (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)")
}
}
}
}
}
}
}
})
Консоль:
Размер актива: 1536 x 2048
2020-02-02 08:18: 44.452620-0700 photostreamphoto [7370: 2576203] [ImageManager] [RM]: 1-1-0 Не удалось декодировать изображение
2020-02-02 08: 18: 44.468675-0700 photostreamphoto [7370: 2576203] [ImageManager] [ RM]: 1-1-0 Не удалось декодировать изображение
2020-02-02 08: 18: 44.479691-0700 photostreamphoto [7370: 2576203] [ImageManager] [RM]: 1-1-0 Не удалось декодировать изображение
размер изображения: 360,0 x 480,0
2020-02-02 08: 18: 44.485069-0700 photostreamphoto [7370: 2576203] [ImageManager] [RM]: 1-2-0 Не удалось загрузить изображение с 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 Не удалось загрузить изображение с URL: file: ///var/mobile/Media/PhotoStreamsData/267078714/100APPLE/IMG_0001.JPG
2020-02-02 08: 18: 44.501745-0700 photostreamphoto [7370: 2576203] [7370: 2576203] [ Образ Менеджер] [RM]: 1-2-0 Не удалось загрузить изображение с URL: file: ///var/mobile/Media/PhotoStreamsData/267078714/100APPLE/IMG_0001.JPG
размер изображения: 360,0 x 480,0
Я испробовал все мыслимые комбинации опций в PHRequestOptions. Обратите внимание, что если я установлю opts.version = .original
, это даст мне ноль изображения и ноль данных изображения.
Я также попытался asset.requestContentEditingInput(...)
, чтобы попытаться получить прямой доступ к URL-адресу изображения:
let editingOpts = PHContentEditingInputRequestOptions()
editingOpts.isNetworkAccessAllowed = true
editingOpts.canHandleAdjustmentData = { data in
return true
}
asset.requestContentEditingInput(with: editingOpts) { input, info in
if let input = input, let url = input.fullSizeImageURL {
let path = url.path
let fm = FileManager.default
if fm.fileExists(atPath: path) {
// doesn't reach this
}
}
}
Консоль:
2020-02-02 08: 26: 49.641787-0700 photostreamphoto [7416: 2578984] [PhotoKit] URL-адрес файла ресурса ресурса недоступен, возможно, был удален, будет пытаться запросить изменение доступности
Интересно, что UIImagePicker действительно получает исходное изображение (например, 1536 x 2048). Приложение «Фото» также показывает изображение в полном разрешении. Я sh Я знал, какие черные маги c они используют.
Если кто-нибудь знает об обходном пути, пожалуйста, поделитесь.