Расширение общего ресурса iOS - вызов loadItemForTypeIdentifier возвращает URL-адрес файла в iOS11 и содержимое файла в iOS12 - PullRequest
0 голосов
/ 11 марта 2019

Я вижу различное поведение на iOS 11 по сравнению с 12.

На iOS 11 - я получаю путь к файлу для общего доступа в обработчике завершения.

На iOS 12 - я получаю ошибку домена URL,Но если я обработаю его на основе типа (например: UIImage), то получу содержимое файла.

Это поведение только на симуляторе или на устройстве?

Нужно ли намсправиться с этим для версии iOS?

1 Ответ

0 голосов
/ 16 марта 2019

Да, вы также получите обе вещи (путь к файлу или данные) на устройстве. Вам не нужно было добавлять какие-либо проверки для версии iOS.

Пожалуйста, передавайте мой код. Это быстро, но вы можете это понять.

func share() {
let inputItem = extensionContext!.inputItems.first! as! NSExtensionItem
let attachment = inputItem.attachments!.first as! NSItemProvider
if attachment.hasItemConformingToTypeIdentifier( kUTTypeImage as String) {
    attachment.loadItem(forTypeIdentifier: kUTTypeImage as String, options: [:]) { (data, error) in
        var image: UIImage?
        if let someURl = data as? URL {
            image = UIImage(contentsOfFile: someURl.path)
        }else if let someImage = data as? UIImage {
            image = someImage
        }

        if let someImage = image {
            guard let compressedImagePath = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first?.appendingPathComponent("shareImage.jpg", isDirectory: false) else {
                return
            }

            let compressedImageData = UIImageJPEGRepresentation(someImage, 1)
            guard (try? compressedImageData?.write(to: compressedImagePath)) != nil else {
                return
            }

        }else{
            print("bad share data")
        }
    }

}

}

...