如何在 iOS 上使用 FileProviderExtension 显示下载进度
How to display download progress with FileProviderExtension on iOS
我有一个应用程序实现了 FileProviderExtension 的所有功能。现在问题来了,在文件应用程序中显示 download/upload 进度需要什么?
有一个 previously asked question 的答案相当模糊,没有产生任何结果。
这是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
。下载任务肯定会发送进度事件(用 DownloadDelegate
中的 urlSession(..., totalBytesWritten: ...)
方法确认)但 FileProvider 似乎忽略了它们。
TL;DR:在 FileExtension 中进行下载需要什么?
我已经实施并且运行良好。
(参见 https://forums.developer.apple.com/thread/91280#292614)
- URLSession 应该使用 .background 配置。
- 配置应具有有效的 sharedContainerIdentifier。
您的扩展程序的容器应用程序应有权访问共享容器。
扩展程序应通过 documentSize 属性 报告正确的文件大小。
我有一个应用程序实现了 FileProviderExtension 的所有功能。现在问题来了,在文件应用程序中显示 download/upload 进度需要什么?
有一个 previously asked question 的答案相当模糊,没有产生任何结果。
这是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
。下载任务肯定会发送进度事件(用 DownloadDelegate
中的 urlSession(..., totalBytesWritten: ...)
方法确认)但 FileProvider 似乎忽略了它们。
TL;DR:在 FileExtension 中进行下载需要什么?
我已经实施并且运行良好。 (参见 https://forums.developer.apple.com/thread/91280#292614)
- URLSession 应该使用 .background 配置。
- 配置应具有有效的 sharedContainerIdentifier。
您的扩展程序的容器应用程序应有权访问共享容器。
扩展程序应通过 documentSize 属性 报告正确的文件大小。