问题原因
随着Xcode16和的iOS18发布,苹果废弃了- (BOOL)openURL:(NSURL*)url方法,废弃后App如果是用Xcode16打包的,会出现以下提醒,且代码无效,进一步导致微信或者系统的一些api失效。
The caller of UIApplication.openURL(_:) needs to migrate to the non-deprecated UIApplication.open(_:options:completionHandler:). Force returning false (NO).
如何解决
查阅资料显示,苹果官方论坛上已经给出了较为方便的解决办法
苹果论坛解决办法
不过我自己用的是runtime来解决此问题的
具体步骤分为两步
1.创建
2.runtime替换方法
UIApplication+SMMCustomApplication.m
#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