Files
tencent_kit/ios/Classes/UIApplication+Hook.m
2025-06-16 21:23:45 +08:00

42 lines
1.5 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#import "UIApplication+Hook.h"
#import <objc/runtime.h>
@implementation UIApplication (Hook)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = [self class];
SEL originalSelector = @selector(openURL:);
SEL swizzledSelector = @selector(g_openURL:);
Method originalMethod = class_getInstanceMethod(class, originalSelector);
Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
if (originalMethod && swizzledMethod) {
method_exchangeImplementations(originalMethod, swizzledMethod);
NSLog(@"openURL: 方法交换成功!");
} else {
NSLog(@"openURL: 方法交换失败!");
}
});
}
- (BOOL)g_openURL:(NSURL *)url {
NSLog(@"拦截到 openURL: %@", url);
// 注意:由于方法交换,调用 g_openURL: 实际上会调用原 openURL: 实现
// 这里我们调用新版 API
if ([UIApplication.sharedApplication respondsToSelector:@selector(openURL:options:completionHandler:)]) {
[UIApplication.sharedApplication
openURL:url
options:@{}
completionHandler:^(BOOL success) {
NSLog(@"openURL:options:completionHandler: 返回 %d", success);
}];
} else {
// 如果低于 iOS 10调用原始实现
return [self g_openURL:url]; // 注意:由于方法交换,这里 g_openURL: 实际上是原 openURL:
}
return YES;
}
@end