iOS 18,微信QQ等第三方分享登录失效

3,240 阅读1分钟

UIApplication的@selector(openURL:) 方法失效,导致无法跳转

解决1:问题出现在Xcode16出的包中,换回Xcode15打包是正常的

解决2:查询三方是否适配,更新sdk插件

解决3:RunTime

  • 项目内创建文件,复制以下内容后就行了
  • .h
  • .m
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIApplication_Swizzle : UIApplication

@end

NS_ASSUME_NONNULL_END
#import "UIApplication+Swizzle.h"

@implementation UIApplication_Swizzle

// 利用runtime将UIApplication的@selector(openURL:)改为iOS 10的那个
// 友盟还未适配

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 获取原始方法和替换方法
        Method originalMethod = class_getInstanceMethod(self, @selector(openURL:));
        Method swizzledMethod = class_getInstanceMethod(self, @selector(swizzled_openURL:));
        
        // 交换方法实现
        method_exchangeImplementations(originalMethod, swizzledMethod);
    });
}

// 替换的方法实现
- (void)swizzled_openURL:(NSURL *)url {
    // 在这里可以添加自定义逻辑
    NSLog(@"Swizzled openURL: %@", url);
    
    // 调用新的 openURL:options:completionHandler: 方法
    [self openURL:url options:@{} completionHandler:nil];
}

@end