问题原因

随着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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐