При попытке поделиться файлом .mp3, который я загрузил в свое приложение, с помощью функции общего доступа устройства, я могу получить файл из каталога документов, но не могу поделиться им.
Когда я пытаюсь поделиться им через Whatsapp, я получаю сообщение об ошибке:
Этим элементом нельзя поделиться. Пожалуйста, выберите другой элемент.
Если я делюсь через AirDrop, отображается просто сообщение Failed (красным), а совместное использование с помощью других параметров приводит к пустому сообщению (например, новое электронное письмо без прикрепленного файла или новое сообщение, в котором ничего нет)
Вот варианты кода, которые я пробовал до сих пор:
Вариант 1. Использование UIActivityViewController
let fileURL = NSURL(fileURLWithPath: FileURLFromDocumentsDirectory)
var filesToShare = [Any]()
filesToShare.append(fileURL)
let activityViewController = UIActivityViewController(activityItems: filesToShare, applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)
Вариант 2 - Использование UIDocumentInteractionController
let docController : UIDocumentInteractionController?
docController = UIDocumentInteractionController(url: URL(string: fileToSharePath)!)
docController?.delegate = self
docController?.presentOptionsMenu(from: self.view.frame, in:self.view, animated:true)
В обоих вариантах я получаю файл, но не могу поделиться им. Телефон распознает общий ресурс как аудиофайл, но я ничего не могу с ним сделать.
Пример URL:
файл: ///Users/UserName/Library/Developer/CoreSimulator/Devices/C8B09E62-091F-4E61-BA6C-3D9EC23LKC01/data/Containers/Data/Application/EF2CKKJF-AB35-55G5-B778-439812EFGGG
Совместное использование работает для текста, но не для аудиофайлов.
Нужно ли мне также включать некоторые функции или добавлять код в AppDelegate?
Ценю любую помощь. Спасибо.
Обновление №1: код с предложениями от @dfd [все еще не работает]
let shareAction = UIContextualAction(style: .normal, title: "Share") { (action, view, completionHandler) in
let fileURL = NSURL(fileURLWithPath: (downloadedFile?.documentDirectoryURL)!)
let activityViewController = UIActivityViewController(activityItems: [fileURL], applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)
}
Кроме того, для всех этих опций я получаю аудиофайл (mp3) как «Аудиозапись» на листе общего доступа.
UIActivityViewController
с определенными типами файлов и / или типами действий, вам может потребоваться (а) не делать ваши файлы[Any]
и (б) удалить их из исключенных типов действий. - person dfd   schedule 04.01.2021