如何在 Xcode 调试导航选项卡中启用网络调试
Posted
技术标签:
【中文标题】如何在 Xcode 调试导航选项卡中启用网络调试【英文标题】:How to enable network debugging in Xcode debug navigation tab 【发布时间】:2020-01-29 13:09:01 【问题描述】:我正在执行网络操作,但调试导航器没有为网络显示任何内容。代码很简单,可以按预期工作
例如,这个简单的代码下载了一个 300 mb 的文件。大约需要 2-3 分钟,但网络仍保持在 zero KB/s
let urlString = "https://...."
let url = URL(string: urlString)
let dt = URLSession.shared.downloadTask(with: url!) (url2, response, error) in
print("completed with \(url2)")
dt.resume()
按预期收到此消息:
completed with Optional(file:///var/folders/5d/mc_q976d5h94zl38kr1zc4ym0000gn/T/CFNetworkDownload_jUr0fl.tmp)
磁盘调试工作正常并按预期显示下载的文件大小
【问题讨论】:
你知道怎么解决吗? 【参考方案1】:简而言之,即使从 Xcode 12.5.1 和 Xcode 13(beta 2)开始,我发现 Xcode 中报告的网络活动也不可靠。
几个观察:
我收到不一致的结果。
例如,这里是一个动画 gif,显示下载进度:
有趣的是,在下载过程中,“总数”会在下载过程中重置。
在 Instruments 中(使用 os_signpost
和“兴趣点”来确定下载开始和完成的确切位置),我可以看到下载,但进度是零星的:
就个人而言,为了监控网络活动,我发现外部工具,例如Charles Proxy 或Wireshark,更可靠:
这是对网络接口本身的监控,从等式中消除了 Xcode。
(顺便说一句,在与自定义 Web 服务集成时,这些工具非常宝贵,因为您可以看到原始请求和响应,这使得调试网络代码变得更加容易。)
有趣的是,当我在 macOS 上通过 Charles 路由我的 iPhone 网络活动时,Xcode 网络活动结果突然正确:
还有:
但是当我停止通过 Charles 路由网络活动时,我得到了上面的原始行为。
如果您没有看到网络活动,请确保您的网络请求正在实际执行。仅仅因为您收到响应并不意味着它通过网络获取它:URLSession
将透明地使用URLCache
,如果可以的话,从缓存中检索资产。
要重置应用缓存,您可以从设备中删除应用并重新安装(从而删除任何缓存的响应),或者仅出于诊断目的,您可以考虑以编程方式暂时关闭缓存:
let url = URL(string: urlString)!
var request = URLRequest(url: url)
request.cachePolicy = .reloadIgnoringLocalAndRemoteCacheData
let task = URLSession.shared.downloadTask(with: request) location, response, error in
...
task.resume()
【讨论】:
以上是关于如何在 Xcode 调试导航选项卡中启用网络调试的主要内容,如果未能解决你的问题,请参考以下文章
在 Chrome 自定义选项卡中从 WebView 打开链接时获取 ANR 对话框。我该如何调试?
将 iOS 设备添加到 Xcode 的设备中,无需电缆即可进行调试/构建
如何在 Chrome 开发者工具的网络选项卡中默认启用“保留日志”?