收藏
回答

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).


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

17 个回答

  • CZ
    CZ
    2024-10-12

    蹲个官方回复。

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

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

    2024-10-10
    有用
    回复
  • 狂风
    狂风
    2024-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);

        }

    }

    2024-10-08
    有用
    回复
  • 狂风
    狂风
    2024-10-08

    微信SDK没适配,暂时可以hook下解决

    - (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);

        }

    }

    2024-10-08
    有用
    回复
  • 狂风
    狂风
    2024-10-08

    微信SDK没适配,暂时可以hook下解决

    - (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);

        }

    }

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

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

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

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

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

正在加载...

登录 后发表内容