【问题标题】:How to test Background App Launch in case of NSURLSession(Background Session) event?如果发生 NSURLSession(Background Session) 事件,如何测试后台应用程序启动?
【发布时间】:2015-02-13 14:29:44
【问题描述】:
如何在后台测试Application Launch的场景来处理Background NSURLSession的事件?
流程:
- 应用程序使用后台 URL 启动上传/下载任务
会议。
- 用户点击主页按钮。应用程序处于暂停或后台
状态。
-
操作系统决定退出应用程序。我知道,可以通过双击主页按钮并向上滑动特定应用程序来退出应用程序。但在这种情况下,操作系统将永远不会在后台重新启动应用程序以进行事件处理。
- 上传/下载任务需要一些事件处理。操作系统在后台重新启动应用。
所以问题是我如何让操作系统像通常在一段时间后那样退出应用程序。目的是测试此场景的代码。我尝试使用 UIApplicationExitsOnSuspend 但它不起作用,因为那时应用程序无法在后台启动。
【问题讨论】:
标签:
ios
nsurlsession
uiapplicationdelegate
uiapplication
【解决方案1】:
您可以编写一个应用程序,该应用程序具有一个分配并有意泄漏大块内存的按钮。如果你让这个东西分配足够的 RAM,操作系统将开始杀死其他应用程序以取回它们的 RAM。
希望这会表现出您需要的行为。
【解决方案2】:
这不是一个完美的解决方案,但由于物理设备上的背景 URLSession,我能够手动测试应用程序的启动,如下所示:
- 通过 USB 连接设备进行调试
- 禁用设备上的互联网连接(即禁用 WiFi/蜂窝网络)
- 通过 Xcode 启动应用程序
- 使用后台 URLSession 发出请求。请求不应失败,它只会等待 Internet 连接直到超时,因此请使用合理的长超时以简化测试。
- 通过 Xcode 杀死应用程序(按停止按钮)
- 通过 Windows > 设备和模拟器查看设备日志
- 无需启动应用即可再次在设备上启用 Internet 连接
- 然后应该完成来自后台 URLSession 的请求,并且在设备日志中(从第 6 步开始。)您应该看到由于通过
application(_:handleEventsForBackgroundURLSession:completionHandler:) 应用程序委托方法启动应用程序而发出的任何 NSLog 语句。
他们的关键点是通过 Xcode 终止应用程序,而不是使用设备本身终止它,不会阻止重新启动应用程序以进行后台事件处理。
通过 Xcode 手动终止应用程序的一种可能替代方法可能是故意在代码中使应用程序崩溃 - 这可能更适合自动化测试。