ios - 如何在 NSURLSession(Background Session) 事件的情况下测试 Background App Launch?

标签 ios nsurlsession uiapplicationdelegate uiapplication

如何测试在后台启动应用程序以处理后台 NSURLSession 事件的场景?

流程:

  1. 应用程序使用后台 URL 启动上传/下载任务 session 。
  2. 用户点击主页按钮。应用程序处于暂停状态或后台 状态。
  3. OS 决定退出 应用程序。我知道,可以通过双击主页按钮并向上滑动特定应用程序来退出应用程序。但在那种情况下,操作系统永远不会在后台重新启动应用程序以进行事件处理。
  4. 上传/下载任务需要一些事件处理。操作系统在后台重新启动应用程序。

所以问题是我如何让操作系统像通常在一段时间后退出应用程序一样退出应用程序。目的是测试此场景的代码。我尝试使用 UIApplicationExitsOnSuspend 但它不起作用,因为此后应用程序无法在后台启动。

最佳答案

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

  1. 通过USB连接调试设备
  2. 禁用设备上的互联网连接(即禁用 WiFi/蜂窝网络)
  3. 通过 Xcode 启动应用
  4. 使用后台 URLSession 发出请求。请求不应失败,它只会等待 Internet 连接直到超时,因此请使用适当长的超时时间以使测试更容易。
  5. 通过 Xcode 终止应用程序(按停止按钮)
  6. 通过 Windows > 设备和模拟器查看设备日志
  7. 在不启动应用程序的情况下再次启用设备上的互联网连接
  8. 然后来自后台 URLSession 的请求应该完成,并且在设备日志中(从第 6 步开始)您应该看到任何 NSLog 语句作为通过 启动应用程序的结果发出application(_:handleEventsForBackgroundURLSession:completionHandler:) 应用委托(delegate)方法。

他们的关键点是,通过 Xcode 终止应用程序,而不是使用设备本身终止应用程序,不会阻止应用程序重新启动以进行后台事件处理。

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

关于ios - 如何在 NSURLSession(Background Session) 事件的情况下测试 Background App Launch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28501813/

相关文章:

iPhone:此类不符合键警报 View 的键值编码

php - 如何将 NSMutableDictionary 发送到 PHP Web 服务器

swift - 函数不等到数据下载完成

iphone - 我可以在我的 AppDelegate 中接收摇动事件吗?

objective-c - 通过 View Controller 将委托(delegate)传递给 View Controller

ios - type()不符合协议(protocol)

ios - 如何在TableView中的CollectionView中获取图像的索引路径?

ios - Xcode 6.0 中头文件被错误更改并卡在模拟器上运行

ios - 我应该为这个完整的场景使用操作队列吗?

ios - 在 applicationWillEnterForeground 之前更改 View