FNMNetworkMonitor

CocoaPods Compatible Supported languages Platform

这是什么?

FNMNetworkMonitor 是一个 Swift iOS 网络框架,可用于监控 iOS 应用程序的网络。它可以轻松地进行网络调试,让您可以查明应用程序中与网络相关问题的根本原因,并通过电子邮件共享这些请求。它还可以模拟网络请求,从而更容易使用不完整的 API 或为单元测试建模特定状态。

支持 Swift 5 并且桥接到 Obj-C 兼容。

预览

安装 ⚙️

Cocoapods

Swift Package Manager

用法

有几种方法可以监控网络

  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"])

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

您还可以为每个 profile 分配优先级值,以便在发生冲突时,将使用具有最高优先级的 profile。 优先级是一个 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 文件。