Я храню изображения и видео в альбоме Camera Roll с помощью PhotoKit и хочу, чтобы пользователь мог делиться ими с помощью UIActivityViewController.Если я передаю UIActivityViewController экземпляр UIImage, он работает как положено, вероятно, потому, что данные изображения передаются в память.Тем не менее, видео нужно передавать по URL, потому что нет аналога видео UIImage.Когда я передаю URL-адрес видео, я получаю сообщение об ошибке «Не удалось создать расширение для песочницы».Если я передаю URL-адрес изображения, я получаю похожую ошибку.
Исходя из этого , кажется, что я мог бы обойти эту ошибку, экспортировав ресурсы вКаталог документов и передача UIActivityViewController URL-адреса ресурса в Документы.Тем не менее, я читал в другом месте, что Camera Roll может служить аналогичной цели, и само собой разумеется, что Camera Roll будет одним из немногих мест, где могут храниться данные для обмена между приложениями.
Есть лиспособ передачи URL-адресов UIActivityViewController в ресурсы Camera Roll без их копирования в документы?Есть ли лучший способ делиться изображениями и видео, которые уже есть в Camera Roll?
Детали реализации:
Я создаю URL-адреса для ресурсов, используяэто:
func videoFor(asset: PHAsset, resultHander: @escaping (AVAsset?, AVAudioMix?, [AnyHashable : Any]?) -> Void) {
imageManager.requestAVAsset(forVideo: asset, options: nil, resultHandler: resultHander)
}
func urlFor(asset: PHAsset, resultHandler: @escaping (URL?) -> Void) {
if ( asset.mediaType == .video ) {
videoFor(asset: asset) { (asset, audioMix, info) in
let asset = asset as! AVURLAsset
resultHandler(asset.url)
}
}
else if ( asset.mediaType == .image ) {
let options: PHContentEditingInputRequestOptions = PHContentEditingInputRequestOptions()
options.canHandleAdjustmentData = {(adjustmeta: PHAdjustmentData) -> Bool in
return true
}
asset.requestContentEditingInput(with: options, completionHandler: {(contentEditingInput: PHContentEditingInput?, info: [AnyHashable : Any]) -> Void in
resultHandler(contentEditingInput!.fullSizeImageURL as URL?)
})
}
else {
resultHandler(nil)
}
}
Вот полная ошибка, которую я получаю в консоли при попытке поделиться изображением по URL:
Failed to determine whether URL /var/mobile/Media/DCIM/100APPLE/IMG_0201.JPG (n) is managed by a file provider
Could not create sandbox extension. Error: Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" UserInfo={NSLocalizedDescription=Could not create sandbox extension of type com.apple.app-sandbox.read for URL /var/mobile/Media/DCIM/100APPLE/IMG_0201.JPG. Error: No such file or directory}
... и для видео:
Failed to determine whether URL /var/mobile/Media/DCIM/100APPLE/IMG_0202.M4V (n) is managed by a file provider
Could not create sandbox extension. Error: Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" UserInfo={NSLocalizedDescription=Could not create sandbox extension of type com.apple.app-sandbox.read for URL /var/mobile/Media/DCIM/100APPLE/IMG_0202.M4V. Error: Operation not permitted}