openreplay/tracker/tracker-ios/Sources/ORTracker/Managers/Swizzling.swift
Delirium c0da34c528
feat(ios): add Ios source (#1640)
* feat: add ios and rn source

* fix(ios): remove testing keys

* fix(tracker): change default path
2023-11-10 10:32:55 +01:00

22 lines
1 KiB
Swift

import UIKit
class Swizzling: NSObject {
static func swizzle(cls: AnyClass, original: Selector, swizzled: Selector) {
if let originalMethod = class_getInstanceMethod(cls, original),
let swizzledMethod = class_getInstanceMethod(cls, swizzled) {
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}
static func swizzleIfPresent(cls: AnyClass, original: Selector, swizzled: Selector) {
if let originalMethod = class_getInstanceMethod(cls, original),
let swizzledMethod = class_getInstanceMethod(cls, swizzled) {
let didAddMethod = class_addMethod(self, original, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))
if didAddMethod {
class_replaceMethod(self, swizzled, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
} else {
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}
}
}