Как отобразить прогресс загрузки с FileProviderExtension на iOS - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть приложение, которое реализует все навороты FileProviderExtension.Теперь возникает вопрос, что требуется для отображения прогресса загрузки / выгрузки в приложении «Файлы»?

Существует один ранее заданный вопрос с довольно расплывчатым ответом, который не дал результатов..

Это грубый код функции startProvidingItem(at url: URL ...):

let downloadDelegate = DownloadDelegate(completionHandler, targetLocation: url, fileManager: fileManager)
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: downloadDelegate, delegateQueue: nil)
let downloadTask = session.downloadTask(with: sftpURL)

NSFileProviderManager.default.register(downloadTask, forItemWithIdentifier: id) { error in
    if let error = error {
         print("Error registering progress task \(error)")
    } else {
         print("Registered progress task")
         downloadTask.resume()
    }
}

Где DownloadDelegate вызывает completionHandler либо с ошибкой, либо nil в случае успеха.Это все работает, но даже если downloadTask было зарегистрировано с FileProviderManager, прогресс не отображается.

Начинается показ неопределенного счетчика и Waiting to Download под файлом.Задача загрузки определенно отправляет события прогресса (подтвержденные с помощью метода urlSession(..., totalBytesWritten: ...) в DownloadDelegate), но FileProvider, по-видимому, игнорирует их.


TL; DR: Что требуется, чтобы заставить процесс загрузки работать вFileExtension

1 Ответ

0 голосов
/ 15 февраля 2019

Я реализовал, и он работает нормально.(См. https://forums.developer.apple.com/thread/91280#292614)

  • . URLSession должен использовать конфигурацию .background.
  • Конфигурация должна иметь допустимый sharedContainerIdentifier.
  • Приложение контейнера изВаше расширение должно иметь доступ к общему контейнеру.

  • Расширение должно сообщать правильный размер файла через свойство documentSize.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...