Как отправить большие файлы с помощью AirDrop в UIDocumentInteractionController - PullRequest
0 голосов
/ 15 января 2019

В приложении для iPad, над которым я работаю, я создаю изображения в формате png, которые должны быть сохранены или предоставлены для совместного использования с помощью UIDocumentInteractionController.

Каждый вариант работает хорошо, но один. В случае, если размер файла png превышает 20 МБ, функция AirDrop завершается ошибкой, а всплывающее окно UIDocumentInteractionController завершается iOS с ошибкой:

viewServiceDidTerminateWithError:: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}

Приложение продолжает работать, и я все еще могу его использовать.

В этом случае, когда файл png большой, все остальные параметры «Поделиться / Открыть в ...» работают хорошо. Не работает только функция совместного использования AirDrop.

Это происходит почти сразу после нажатия на человека / устройство, чтобы поделиться им. Таким образом, не может возникнуть проблема с памятью. Я также не уверен в этом, поскольку работаю над iPad Pro 2018 с 6 ГБ ОЗУ.

В моих тестах большинство сгенерированных файлов занимают около 100 МБ, что не так много по сравнению с тем, что мы можем передать с помощью AirDrop из приложений Apple. Например, я перенес файлы размером более 300 МБ из приложения Files с помощью AirDrop.

Обратите внимание, что я не знаю правильного предельного значения, но я чувствую (!), Что оно находится в области 20 МБ. Я без проблем пробовал файлы размером до 10 МБ.

Я также пытался использовать UIActivityViewController и получил то же самое поведение. Я попробовал это с тремя способами установки элементов для обмена:

  • Установка URL-адреса png-файла в качестве элемента
  • Загрузка данных png в объект Data и установка этого объекта данных в качестве элемента
  • Загрузка данных png в UIImage и установка этого изображения в качестве элемента

Вот код, который я использую для представления documentController:

func presentDocumentInteractionController(for fileUrl: URL) {
    documentController = UIDocumentInteractionController(url: fileUrl)
    documentController!.delegate = self
    documentController!.uti = String(kUTTypePNG)
    documentController!.name = fileUrl.lastPathComponent
    documentController!.presentOptionsMenu(from: shareBarButtonItem, animated: true)
}

Var documentController является членом моего класса, чтобы избежать его удаления после завершения функции, а затем избежать сбоя приложения при значении nil.

Я понятия не имею, кроме подачи радара в Apple. Кто-нибудь сталкивался с таким поведением?

...