iOS18下完全废弃- (BOOL)openURL:(NSURL*)url方法

问题原因

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值