调试 URLSession(在 iOS 10 中)
Debugging URLSession (in iOS 10)
我在使用 URLSession
创建和恢复 URLSessionDataTask
时遇到了问题,因为我希望后续调用会话(和任务)委托中的某些方法,但显然没有发生这样的电话。
在这种情况下如何调试 URLSession
?例如,我可以请求它的日志输出吗?找出它何时发送或接收 HTTP 流量,或何时它试图调用委托中的方法但找不到相关的实现(例如,因为实现中的方法签名可能略有偏差)。
现在(开始)按预期调用委托方法。解决方案包括从 URLSessionDataDelegate
和 URLSessionTaskDelegate
的代码库(不是它们的文档)中复制方法签名,以确保完全匹配。查看设备日志输出(标有 libsystem_network.dylib
和 <Debug>
的行)也很有帮助。现在使用的方法签名如下:
public func urlSession(_ session: URLSession,
task: URLSessionTask,
didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) {
// ...
}
public func urlSession(_ session: URLSession,
dataTask: URLSessionDataTask,
didReceive data: Data) {
// ...
}
public func urlSession(_ session: URLSession,
task: URLSessionTask,
didCompleteWithError error: Error?) {
// ...
}
我在使用 URLSession
创建和恢复 URLSessionDataTask
时遇到了问题,因为我希望后续调用会话(和任务)委托中的某些方法,但显然没有发生这样的电话。
在这种情况下如何调试 URLSession
?例如,我可以请求它的日志输出吗?找出它何时发送或接收 HTTP 流量,或何时它试图调用委托中的方法但找不到相关的实现(例如,因为实现中的方法签名可能略有偏差)。
现在(开始)按预期调用委托方法。解决方案包括从 URLSessionDataDelegate
和 URLSessionTaskDelegate
的代码库(不是它们的文档)中复制方法签名,以确保完全匹配。查看设备日志输出(标有 libsystem_network.dylib
和 <Debug>
的行)也很有帮助。现在使用的方法签名如下:
public func urlSession(_ session: URLSession,
task: URLSessionTask,
didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) {
// ...
}
public func urlSession(_ session: URLSession,
dataTask: URLSessionDataTask,
didReceive data: Data) {
// ...
}
public func urlSession(_ session: URLSession,
task: URLSessionTask,
didCompleteWithError error: Error?) {
// ...
}