我正在开发一个分析 SDK,它将跟踪所有用户事件,哪个视图出现或消失,单击哪个按钮,打开或关闭哪个 UISwitch,滚动 UITableView 或点击单元格等。
我正在使用方法调配来实现此功能,但我看到了一些与此相关的缺点
如果 swizzling 发生多次,您的代码将无法工作,或者 firebase(或任何其他使用相同方法的框架)将无法工作。
当更新的 iOS 版本发布时,swizzling 可能会失败。您可能必须每次都进行交叉检查。
我已经阅读了这篇文章的缺点
https://medium.com/@abhimuralidharan/method-swizzling-in-ios-swift-1f38edaf984f
这是我如何跟踪的示例代码 1. ViewDidAppeard 跟踪
@objc func viewDidDisappearOverride(_ animated: Bool) {
}
static func swizzleViewDidDisappear() {
if self != UIViewController.self {
return
}
let _: () = {
let originalSelector = #selector(UIViewController.viewDidDisappear(_:))
let swizzledSelector = #selector(UIViewController.viewDidDisappearOverride(_:))
guard let originalMethod = class_getInstanceMethod(self, originalSelector),
let swizzledMethod = class_getInstanceMethod(self, swizzledSelector) else { return }
method_exchangeImplementations(originalMethod, swizzledMethod)
}()
2.带有扩展UIButton的ButtonClick跟踪
override open func awakeFromNib() {
super.awakeFromNib()
self.addTarget(self, action: #selector(globalUIButonAction), for: .touchUpInside)
}
@objc func globalUIButonAction (_ sender: UIButton) { }
如何跟踪所有事件最好的方法或解决方案是什么?