FNMNetworkMonitor 11.11.1

FNMNetworkMonitor 11.11.1

Farfetch 维护。



  • Farfetch

FNMNetworkMonitor

CocoaPods Compatible Supported languages Platform

这是什么?

FNMNetworkMonitor 是一个 Swift iOS 网络框架,可以用于监控 iOS 应用的网络。它使网络 调试 很简单,您可以定位到应用中与网络相关问题的根本原因,并通过电子邮件共享这些请求。它还可以 模拟 网络请求,使得对于未完成的 API 或单元测试中特定状态的使用变得更容易。

支持 Swift 5,并支持 Objective-C 兼容。

预览

安装⚙️

Cocoapods

  • pod 'FNMNetworkMonitor' 添加到您的 Podfile

Swift 包管理器

用法

网络监控的几种方法

  1. 监控 URLSession.shared
FNMNetworkMonitor.registerToLoadingSystem()
FNMNetworkMonitor.shared.startMonitoring()
  1. 通过提供 FNMMonitor URL 协议来监控自定义 URLSessions
let sessionConfig = URLSessionConfiguration.ephemeral
sessionConfig.protocolClasses = FNMNetworkMonitor.normalizedURLProtocols()
self.customSession = URLSession(configuration: sessionConfig)
FNMNetworkMonitor.shared.startMonitoring()
  1. 您还可以利用 swizzling URLSessionConfiguration 创建过程来配置所有会话的 URL 协议,从而也可以监控第三方 SDK。

此外,您还可以使用以下方式模拟某些请求

let request = FNMProfileRequest(urlPattern: .dynamicPattern(expression: "*farfetch.*robots"))
let profiles = [FNMProfile(request: request,
                           responses: [request.response(statusCode: 200,
                                            headers: [ "Content-Type": "application/json" ],
                                            responseHolder: .keyValue(value: [ "FieldA": 1 ])
                                            delay: 0.25)])]
FNMNetworkMonitor.shared.configure(profiles: profiles)
FNMNetworkMonitor.shared.startMonitoring()

你还可以使用以下方式忽略特定域名

FNMNetworkMonitor.shared.configure(ignoredDomains: ["somedomain.com"])

这将不会记录也不会拦截此域名下的请求。

您还可以为每个配置文件分配优先级值,以便在优先级相同的情况下,使用优先级最高的配置文件。优先级是 UInt 类型,0 为最高优先级,UInt.max 为最低优先级。

let request = FNMProfileRequest(urlPattern: .dynamicPattern(expression: "*farfetch.*robots"))
let profiles = [FNMProfile(request: request,
                           responses: [request.response(statusCode: 200)],
                           priority: 123)]

确保按照步骤 1、2 或 3 操作,具体取决于运行该特定请求的 URLSession。

如何查看所有内容

存在一个可用的调试 UI,可以用于轻松检查和导出网络

FNMNetworkMonitor.shared.showDebugListingViewController(presentingNavigationController: self.navigationController)

一般来说,摇动手势是显示/隐藏调试视图的绝佳方式。

还可以应用不同的日志级别,以查看请求是如何通过监控器的

FNMNetworkMonitor.shared.logScope = [.export, .profile, .urlProtocol]

最后,您可以启用被动导出,请求将导出为位于 Documents 应用程序文件夹中的文件夹内的 json 文件。

FNMNetworkMonitor.shared.passiveExportPreference = FNMRecordExporterPreference.on(setting: .unlimited)

媒体负载记录

如果您在使用网络监控时希望分配更少的内存,您可禁用媒体负载记录

FNMNetworkMonitor.shared.recordMediaPayload(false)

示例应用

该项目包含一个可以测试该工具的示例应用。您可以在 NetworkMonitor.xcworkspace 运行 Sample Target Scheme,以便看到一个工作框架的示例。

贡献

请阅读贡献指南

免责声明

通过向我们发送您的贡献,您同意您的贡献受我们贡献者所有权声明的条款约束

维护者

维护者名单

许可证

FNMNetworkMonitor 是基于 MIT 许可证发布的。更多详细信息请查看 LICENSE 文件。