URLSessionDownloadTask奇怪的行为

时间:2018-04-07 12:34:56

标签: ios swift urlsession

我已经使用/usr/bin/google-chrome创建了一个下载文件的类。

我注意到一种奇怪的行为,当设备处于调试模式时,它正在下载文件。但是,如果我删除设备并手动运行应用程序,则下载根本不起作用。 有时重新连接设备会开始下载。

这就是我创建URLSession的方式:

URLSession

这是我的请求下载功能:

private lazy var urlSession: URLSession = {
     let config                      = URLSessionConfiguration.background(withIdentifier: "org.company.id")
     config.isDiscretionary          = true
     config.sessionSendsLaunchEvents = true
     config.allowsCellularAccess     = true
   return URLSession(configuration: config, delegate: self, delegateQueue: nil)
}()

以下是该文件下载程序类的链接:https://github.com/skdevil/PrakrstaFileDownloader

知道怎么解决吗?

1 个答案:

答案 0 :(得分:1)

问题是,当你运行它连接到调试器时,应用程序永远不会被挂起,而在设备上则可以。

有几点意见:

  • 您可能未在应用委托中实施handleEventsForBackgroundURLSession,或在URLSessionDelegate中实施urlSessionDidFinishEvents(forBackgroundURLSession:)。它们是后台下载所必需的。我们需要看到这些实现进一步发表评论。

    有关详细信息,请参阅Downloading Files in the Background

    仅供参考,我在该回购邮件上发布了pull request,显示了您需要做些什么来支持后台会话。

  • 或者,如果您已正确完成所有这些操作,请注意您已设置自由裁量模式。这意味着它将在连接到电源和wifi时下载。是这样的吗?

  • 注意,我鼓励做一些日志记录,这样你就可以看到发生了什么。但是你不能使用Xcode的调试机制(因为,正如你所注意到的,附加到Xcode改变了应用程序的行为)。

    您可以使用WWDC 2016视频Unified Logging and Activity Tracing中概述的“统一日志记录”进行日志记录。这样,您可以在macOS控制台上查看来自iOS设备的日志消息,而无需编写自己的文件记录系统。请参阅https://stackoverflow.com/a/25951564/1271826上的第3点,了解如何在macOS控制台上观察iOS日志消息。或者看看上面提到的WWDC视频。

相关问题