我已经使用/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
知道怎么解决吗?
答案 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视频。