1、分析原因:
问题的根源是xcode16 openURL方法废弃了,替代方法是openURL:options:completionHandler
2、解决思路:
怎么才能在别的组建使用openURL方法时候,替换成新方法呢。
通过RunTime替换方法全局修改
最后在.pch文件里引一下即可
3、代码实现如下:
#import "UIApplication+SMMCustomApplication.h"
#import <objc/runtime.h>
@implementation UIApplication (SMMCustomApplication)
+(void)load{
[super load];
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method old = class_getInstanceMethod(objc_getClass("UIApplication"), @selector(openURL:));
Method new = class_getInstanceMethod(self, @selector(custom_openURL:));
if (old && new) {
method_exchangeImplementations(old, new);
}
});
}
- (void)custom_openURL:(NSURL *)url {
if (@available(iOS 14.5, *)) {
NSDictionary *options = @{UIApplicationOpenExternalURLOptionsEventAttributionKey : @YES};
[[UIApplication sharedApplication] openURL:url options:options completionHandler:^(BOOL success) {
if (success) {
// URL成功打开
} else {
// URL打开失败
}
}];
} else {
// Fallback on earlier versions
}
}
@end