收藏
回答

iOS 18 WXApi sendReq 无法唤起微信

iOS 18 WXApi sendReq 无法唤起微信

Xcode版本:Xcode 16

手机版本:iPhone12真机

系统: iOS18

报错信息:BUG IN CLIENT OF UIKIT: The caller of UIApplication.openURL(_:) needs to migrate to the non-deprecated UIApplication.open(_:options:completionHandler:). Force returning false (NO).


最后一次编辑于  09-16
回答关注问题邀请回答
收藏

7 个回答

  • 🇨🇳🇭🇰_______________
    🇨🇳🇭🇰_______________
    10-15

    感谢码友

    我把Swift版本整理下 供码友参考

    func hookOldOpenUrl(tragetCls:AnyClass){

    let cls = UIApplication.self

    let originalSelector = #selector(UIApplication.openURL(_:))       

    let swizzledSelector = #selector(g_openURL)

            let originalMethod = class_getInstanceMethod(cls, originalSelector)

    let swizzledMethod = class_getInstanceMethod(tragetCls, swizzledSelector)

    let didAddMethod: Bool = class_addMethod(cls, originalSelector, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!))

    if didAddMethod {

    class_replaceMethod(cls, swizzledSelector, method_getImplementation(originalMethod!), method_getTypeEncoding(originalMethod!))

    } else {

    method_exchangeImplementations(originalMethod!, swizzledMethod!)

    }

    }

    @objc func g_openURL(url:URL)->Bool{

    UIApplication.shared.open(url)

    return true

    }


    10-15
    有用 2
    回复
  • 浮生若梦
    浮生若梦
    10-09

    我也有同样的问题,Xcode 15.3 iOS 18,微信分享正常; Xcode升级到16 后, iOS 18微信分享无法调起;

    微信SDK升级到2.0.4后,此问题已解决



    10-09
    有用 2
    回复 1
    • 🥸
      🥸
      10-16
      我更新到2.0.4,还是无法唤起微信
      10-16
      回复
  • 狂风
    狂风
    10-08

    微信SDK没适配,暂时可以这样解决

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    
    {
    
        [AppDelegate hookOldOpenUrl:AppDelegate.class];
    
    }
    
    - (BOOL)g_openURL:(NSURL*)url
    
    {
    
        [UIApplication.sharedApplication openURL:url options:nil completionHandler:nil];
    
        return YES;
    
    }
    
    
    
    
    + (void)hookOldOpenUrl:(Class)targetCls
    
    {
    
        Class cls = [UIApplication class];
    
        
    
        if (cls) {
    
            
    
            Method originalMethod =class_getInstanceMethod(cls, @selector(openURL:));
    
            Method swizzledMethod =class_getInstanceMethod(targetCls, @selector(g_openURL:));
    
            
    
            if (!originalMethod || !swizzledMethod) {
    
                return;
    
            }
    
            
    
            IMP originalIMP = method_getImplementation(originalMethod);
    
            IMP swizzledIMP = method_getImplementation(swizzledMethod);
    
            const char *originalType = method_getTypeEncoding(originalMethod);
    
            const char *swizzledType = method_getTypeEncoding(swizzledMethod);
    
            
    
            class_replaceMethod(cls,@selector(openURL:),swizzledIMP,swizzledType);
    
            class_replaceMethod(cls,@selector(g_openURL:),originalIMP,originalType);
    
        }}
    
    10-08
    有用 2
    回复 7
    • 哈哈哈
      哈哈哈
      10-14
      这样写,iOS18也不行呀,你是iOS18验证的吗,Xcode16
      10-14
      回复
    • 欢乐马
      欢乐马
      10-15回复哈哈哈
      你本地有手机能重现吗?我这的机子都没复现,都是线上的用户反馈
      10-15
      回复
    • 狂风
      狂风
      10-17回复欢乐马
      能重现,apple 13 就有几个机型不行,用xcode16 打包 ios18就会
      10-17
      回复
    • 狂风
      狂风
      10-17回复哈哈哈
      肯定是,可以的,你如果不行就不是ios18,或者你有其他代码hook了openurl导致的
      10-17
      回复
    • 狂风
      狂风
      10-17回复哈哈哈
      就不是ios18的适配问题
      10-17
      回复
    查看更多(2)
  • CZ
    CZ
    10-12

    蹲个官方回复。

    10-12
    有用
    回复
  • 雄涛
    雄涛
    10-10

    上面方法会返回App 再去拉起 微信,这个有好的解决方案吗

    10-10
    有用
    回复
  • Tyler
    Tyler
    09-27

    我是在分享扩展调用 openURL: 必现, (用 xcode16 iOS 18), Xcode 15 build 的包没有问题

    09-27
    有用
    回复 1
    • 狂风
      狂风
      10-08
      下面给了
      10-08
      回复
  • WEi
    WEi
    09-19

    老哥,怎么解决的,需要使用 swizzle 黑魔法?

    09-19
    有用
    回复 7
    • bloom
      bloom
      09-24
      你也遇到?
      09-24
      回复
    • Pandex
      Pandex
      09-24回复bloom
      老哥解决了吗?线上一部分用户反馈打不开微信了啊,我公司所有人的手机升级到iOS18都没复现这个问题
      09-24
      回复
    • J
      J
      09-24
      一样遇到这个问题
      09-24
      回复
    • Pandex
      Pandex
      09-24回复J
      我的SDK是2.0.2的,正在更新到2.0.4发一个新版本试一下
      09-24
      回复
    • J
      J
      09-24回复Pandex
      老哥解决了说一声
      09-24
      回复
    查看更多(2)
登录 后发表内容