在TestFlight安装中未调用的NSURLSessionDelegate方法

时间:2015-12-31 14:45:14

标签: ios nsurlsession testflight

我正在制作一款针对iOS 8.0的应用,需要下载高达250Mb的文件。我有一个版本的下载代码大致使用Alamofire,但我最近用纯NSURLSession实现替换了它。这个新的实现在模拟器和运行iOS 9.2(13C75)的iPhone 5S上按预期工作。无论我是通过XCode和物理连接安装,还是通过TestFlight安装,它都能在我的手机上运行。我已删除该应用,重新启动手机,然后重新安装,它始终正确完成下载。我的一位同事提取了代码,并能够从XCode成功模拟它。

但是,我的所有合作者都无法下载。设备。他们正在通过TestFlight安装应用,并设置为内部测试人员。一位合作者还拥有运行iOS 9.2(13C75)的iPhone 5S。基于Alamofire的实现在通过TestFlight部署到这些相同设备时按预期工作,而其他代码很少发生变化。

我添加了一些远程日志记录,我可以看到在发生故障的设备上,下载被正确触发,我创建的下载任务都有taskIdentifier我可以记录。但是,不会调用NSURLSessionDelegateNSURLSessionDownloadDelegate方法。

您对故障排除有什么建议?

这可能与TestFlight问题有关吗?我目前的下一步是尝试替代TestFlight。最终,如果可能,我希望能够通过TestFlight部署测试版。

我在Swift 2.1.1使用XCode 7.2 (7C68)

1 个答案:

答案 0 :(得分:1)

问题原来是我将NSURLSessionConfiguration discretionary property设置为true。文档陈述了以下对我来说听起来不错的内容:

  

传输大量数据时,建议您设置   该属性的值为true。

但我没有理解其他文本的后果:

  

例如,系统可能会延迟传输大文件,直到设备插入并通过Wi-Fi连接到网络。

通过XCode进行安装的原因可能是手机正在充电,因为当我开始下载或刚收费时,手机已连接到我的电脑。

我最初怀疑这个问题来自TestFlight或关于手机状态的问题。使用Sentry进行远程日志记录(我已经将其用于后端)非常有助于深入了解我的协作者运行应用时的不同之处。我最终添加了所有NSURLSessionDownloadDelegate方法的实现,以记录调用哪些方法。这让我看到didReceiveChallenge是被调用的唯一委托方法,然后我花了一些时间来认为它可能是一个与auth相关的问题并在该一般区域进行故障排除。

最后,我开始注意到我自己的安装有时会失败并且一个协作者成功下载了。这让我开始考虑可能阻止下载的手机状态。我回到了NSURLSession配置,当我读到discretionary属性时。

回想起来,仔细检查配置是一个很好的步骤。另一件好事就是记录已创建的下载任务的state property