gpt4 book ai didi

ios - TestFlight 安装中未调用 NSURLSessionDelegate 方法

转载 作者:行者123 更新时间:2023-11-29 12:07:26 26 4
gpt4 key购买 nike

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

但是,在我所有合作者的设备上下载都失败了。他们通过 TestFlight 安装应用程序并设置为内部测试人员。一位合作者还有一部运行 iOS 9.2 (13C75) 的 iPhone 5S。当通过 TestFlight 部署到这些相同的设备时,基于 Alamofire 的实现按预期工作,其他代码几乎没有变化。

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

您对问题排查有何建议?

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

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

最佳答案

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

When transferring large amounts of data, you are encouraged to set the value of this property to true.

但我没有意识到文本其余部分的后果:

For example, the system might delay transferring large files until the device is plugged in and connected to the network via Wi-Fi.

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

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

最后,我开始注意到我自己的安装有时会失败,而一位合作者却成功下载了。这让我开始考虑可能阻止下载的手机状态。我回到了我拥有的 NSURLSession 配置,那是我阅读 discretionary 属性的时候。

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

关于ios - TestFlight 安装中未调用 NSURLSessionDelegate 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34547953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com