如何在NSURLSession(后台会话)事件的情况下测试后台应用程序启动?

时间:2015-02-13 14:29:44

标签: ios nsurlsession uiapplicationdelegate uiapplication

如何在后台测试Application Launch的场景以处理后台NSURLSession的事件?

流速:

  1. 应用程序使用后台URL启动上载/下载任务 会话。
  2. 用户点击主页按钮。应用程序处于暂停或后台状态 状态。
  3. 操作系统决定退出应用程序。我知道,可以通过双击主页按钮退出应用程序并向上滑动特定的应用程序。但在这种情况下,操作系统永远不会在后台重新启动应用程序以进行事件处理。
  4. 上传/下载任务需要一些事件处理。操作系统在后台重新启动应用程序。
  5. 所以问题是如何让操作系统退出应用程序,就像通​​常在一段时间后一样。目的是测试此方案的代码。我尝试使用UIApplicationExitsOnSuspend但它不起作用,因为App无法在后台启动。

2 个答案:

答案 0 :(得分:1)

您可以编写一个具有按钮的应用程序,该按钮可以分配并故意泄漏大量内存。如果你得到这个东西来分配足够的RAM,操作系统将开始杀死其他应用程序以恢复他们的RAM。

希望这会表现出你需要的行为。

答案 1 :(得分:1)

这不是一个完美的解决方案,但由于物理设备上的Background URLSession,我能够手动测试应用的启动,如下所示:

  1. 通过USB连接设备进行调试
  2. 禁用设备上的互联网连接(即禁用WiFi /移动电话)
  3. 通过Xcode启动应用程序
  4. 使用后台URLSession发出请求。请求不应该失败,它只是等待互联网连接,直到它超时,所以使用相当长的超时来使测试更容易。
  5. 通过Xcode(按停止按钮)
  6. 杀死应用程序
  7. 通过Windows查看设备日志>设备和模拟器
  8. 在不启动应用程序的情况下再次启用设备上的Internet连接
  9. 然后应该完成后台URLSession的请求,并在设备日志中(从步骤6开始),您应该看到由于应用程序通过NSLog应用程序启动而发出的application(_:handleEventsForBackgroundURLSession:completionHandler:)个语句委托方法。
  10. 他们的关键点是通过Xcode杀死应用程序,而不是使用设备本身杀死它,并不会阻止应用程序重新启动以进行后台事件处理。

    通过Xcode手动终止应用程序的一种可能替代方法可能是故意在代码中使应用程序崩溃 - 这可能更适合自动化测试。