FNMNetworkMonitor
这是什么?
FNMNetworkMonitor 是一个 Swift iOS 网络框架,可以用于监控 iOS 应用的网络。它使网络 调试 很简单,您可以定位到应用中与网络相关问题的根本原因,并通过电子邮件共享这些请求。它还可以 模拟 网络请求,使得对于未完成的 API 或单元测试中特定状态的使用变得更容易。
支持 Swift 5,并支持 Objective-C 兼容。
预览
⚙️
安装Cocoapods
- 将
pod 'FNMNetworkMonitor'
添加到您的Podfile
Swift 包管理器
- 在 Xcode 中将 FNMNetworkMonitor 添加到您的 App 的 Swift 包中
用法
网络监控的几种方法
- 监控 URLSession.shared
FNMNetworkMonitor.registerToLoadingSystem()
FNMNetworkMonitor.shared.startMonitoring()
- 通过提供 FNMMonitor URL 协议来监控自定义 URLSessions
let sessionConfig = URLSessionConfiguration.ephemeral
sessionConfig.protocolClasses = FNMNetworkMonitor.normalizedURLProtocols()
self.customSession = URLSession(configuration: sessionConfig)
FNMNetworkMonitor.shared.startMonitoring()
- 您还可以利用 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 文件。