提到 Method Swizzling 技术离不开 iOS 的 ObjC 运行时。iOS 开发的主要语言是 Objective-C 和 Swift,ObjC 是一门动态语言,在运行时会对变量的数据类型检查,同时根据函数名查找要调用的函数,这种特性使得 ObjC 比较灵活,SDK 可以在程序运行时动态修改一个方法的实现,从而达到数据采集和埋点插桩的目的。
Method Swizzling 被称为动态方法交换技术,用于改变一个已经存在的 selector 实现。基于此技术,SDK 可以在程序运行时通过改变 selector 所在 Class 的 method list 的映射,从而改变方法的调用,本质上是交换两个方法的 IMP(方法实现指针)。
通过 Method Swizzling,SDK 支持以下数据采集:
- 网络请求数据采集:支持性能数据、状态码、错误原因、端到端链路打通等数据的采集。通过 Method Swizzling 对 URLSession 和 URLConnection 等网络库实现无侵入数据采集。
- 页面数据采集:支持页面加载耗时、页面状态变化等数据的采集。
- Action 数据采集:支持 UITableView 等控件的点击事件采集。
- WebView 数据采集:结合 web 探针,支持应用内置 H5 页面数据的采集,包含网络资源请求、页面和路由切换、js 异常等。




