Как отобразить прогресс загрузки с FileProviderExtension на iOS
У меня есть приложение, которое реализует все навороты 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 ответ
Я реализовал, и он работает нормально. (См. https://forums.developer.apple.com/thread/91280)
- URLSession должен использовать конфигурацию.background.
- Конфигурация должна иметь действительный sharedContainerIdentifier.
Контейнерное приложение вашего расширения должно иметь доступ к общему контейнеру.
Расширение должно сообщать правильный размер файла через свойство documentSize.