Network模块用来对一个月程序运行过程中的网络访问动作进行捕获,例如可以查看某个时间点设备的网络访问情况、数据传输量、网络类型等。主要分为两大类
HTTP Traffic:HTTP流量跟踪
用于显示所有HTTP活动,每条记录都是一个URL会话
还有两个过滤器,如下所示
-
过滤器1:选择是否在跟踪中显示任务(Tasks)或事务(HTTP Transactions),默认选中task
-
过滤器2:选择记录的排列方式
-
Sumary: Task Durations:根据session的持续时间长短进行展示
-
List: URLSession Tasks:以Session会话列表展示
-
List: HTTP Transactions:以HTTP事务列表展示
-
Sumary: Task Durations:根据session的持续时间长短进行展示
Network Connections:网络连接分析
主要用于分析网络连接的数据传输量,
有一个过滤器,主要用于以何种方式排列网络连接的记录
-** Summary:By Process**:以进程的统计排列捕获的网络连接
- Summary:By Interface:以网络接口的类型统计展示
- History:主要查看现有的所有网络连接的记录
- Active Connections:目前正在使用的网络连接
原理
Instrument中的Network依赖于Apple和新框架的底层网络堆栈,所以当使用任何网络API时,都可以用其检测所有的Apple设备和通过App的HTTP流量。
从上面的介绍可以看出,每次捕获一个App,即一个进程,进程包含一个或多个NSURLSession任务,每个Task包含一组或者多个域名。所有的HTTP流量追踪+进程追踪组合成一个聚合视图,显示了运行时的任务或者处于活跃状态的事务等
任务 & 事务
- 任务:是类似于URLSessionDataTask或URLSessionDownloadTask。通过调用resume开始,并在调用响应完后结束。一个URLSession任务有时需要几轮请求和响应
- 事务:是指与Web服务器通信的单个实例。简单来说就是,请求+响应就是一个事务。事务是在调用resume后开始,并在调用关联完成时结束
一个事务有五种状态,分别是:缓存查找、阻塞、发送请求、等待响应和接收响应,如下所示
分别对应的步骤如下:
- 建立连接
- 执行任何缓存查找
- 旋转一个线程
- 发送HTTP请求
- 等待响应时阻塞线程
- 接收响应
在其他情况下,一个task可能会对应多个事务,例如有重定向或者URL转发时
使用
- 启动Product - Profile,选择Network,开始运行程序进行网络分析
-
一般选择HTTP Traffic进行分析,并选择URLSession Tasks排列
-
选中一个URLSession,并选择其中一个事务,查看其具体的展示(注:CMD + 加号 放大红框区域)
从红框部分可以看出一个事务对应的几种状态,最后在根据下面的请求相关数据来具体分析对应的请求
参考文章
Monitoring HTTP Traffic with Instruments
Analyzing HTTP Traffic with Instruments - Apple
Choosing a Network Debugging Tool - Apple
Debugging HTTPS Problems with CFNetwork Diagnostic Logging - Apple
Advanced Network Debugging in Xcode