我有一个同步功能,其中一系列下载在后台进行。
为此,我使用以下配置创建了一个带背景配置的URLSession实例:
let config = URLSessionConfiguration.background(withIdentifier: "BackgroundSessionDL")
config.httpMaximumConnectionsPerHost = 20
self.session = URLSession(configuration: config, delegate: self, delegateQueue: nil)
每个下载任务(可能有几百个)都按以下方式添加:
var request = URLRequest(url: url)
request.addValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
let downloadTask = self.session.downloadTask(with: request)
downloadTask.resume()
这段代码在iOS 12或更早的版本上运行得非常完美——对于已添加的任务,下载会持续进行,即使在后台也是如此。但是,在iOS 13中会出现以下问题:
- 应用程序一旦进入后台,下载就会停止。
- 如果有任何下载任务正在进行中并将应用程序置于后台,则即使在将应用程序再次带回前台后,也不会观察到与回调相关的日志。
那么,这是否是由于iOS 13中新引入的错误? 还是Apple预计对iOS 13特定于此的实现进行更改?
编辑:
我已经添加了"handleEventsForBackgroundURLSession"回调。发现在iOS 13上不打印相应的日志,并且应用程序大小在设置中也不会增加。因此,似乎下载不会在后台继续进行,与未调用与下载相关的回调无关。