我在调试我的应用程序时遇到了奇怪的行为。
我有一个带有后台配置的直接 URLSession:
let backgroundSessionConfiguration = URLSessionConfiguration.background(withIdentifier: (prefix + postfix))
let backgroundSession = Foundation.URLSession(configuration: backgroundSessionConfiguration, delegate: self, delegateQueue: OperationQueue.main)
progressView.setProgress(0.0, animated: false)
var request = URLRequest(url: dlUrl )
request.httpMethod = "GET"
request.cachePolicy = NSMutableURLRequest.CachePolicy.reloadIgnoringCacheData
let task = backgroundSession.downloadTask(with: request)
task.resume()
我的测试如下:
- 开始在应用程序中下载。
- 将应用置于后台。
- 后台下载完成时发出通知。
- 点击通知后应用程序将进入前台
当我在 ios 10.2 下使用模拟器尝试此操作时,应用程序会在第 2 步后暂停下载,并且下载不会完成 - 没有显示更多错误消息或警告。当我将应用程序置于前台时,下载将继续并完成。
但是当我在模拟器和 ios 8.1 上尝试相同的操作时,一切都按预期工作。
现在是最好的部分:
在 iOS 10.2 的设备上一切都按预期工作,所以现在的问题是为什么不在模拟器上呢?这可能是由于模拟器中应用了一些资源限制吗?
最佳答案
听起来您发现了 10.2 模拟器的错误。这并不奇怪。该模拟器实际上是在 OS X 框架之上编写的,并使用粘合代码使其表现得像 iOS。
我发现问题似乎出现在模拟器与 OSX 或 iOS 设备上的自定义硬件交互的部分。
文件系统存在各种不一致,并且不完全支持 GPS 和加速度计等功能。
模拟器无法正确处理后台 NSURLSession 并不奇怪。管理从应用程序外部下载的文件并在完成后重新启动应用程序需要与低级别任务调度进行交互。
我建议向 Apple 提交雷达错误。
关于ios - 是什么导致模拟器上 ios 8.1 和 ios 10.2 之间的后台 URLSession 出现奇怪的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591553/