收藏
回答

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
回答关注问题邀请回答
收藏

10 个回答

  • 社区技术运营专员--许涛
    社区技术运营专员--许涛
    星期二 16:36

    你好,升级一下openSDK版本,更新一下接口试试?

    https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html


    若还有问题看下老接口

     - (BOOL)openURL:(NSURL*)url API_DEPRECATED_WITH_REPLACEMENT("openURL:options:completionHandler:", ios(2.0, 10.0)) API_UNAVAILABLE(visionos);

    有换成新接口吗?

     - (void)openURL:(NSURL*)url options:(NSDictionary<UIApplicationOpenExternalURLOptionsKey, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion API_AVAILABLE(ios(10.0));


    星期二 16:36
    有用
    回复
  • 🇨🇳🇭🇰_______________
    🇨🇳🇭🇰_______________
    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
    回复 7
    • 🥸
      🥸
      10-16
      我更新到2.0.4,还是无法唤起微信
      10-16
      回复
    • 白昼
      白昼
      10-29
      哥们,有解决办法了吗
      10-29
      回复
    • 青花瓷的平方
      青花瓷的平方
      10-29回复白昼
      我们微信支付也遇到了,你们有hook代码吗
      10-29
      回复
    • 白昼
      白昼
      10-29回复青花瓷的平方
      还未解决。楼下的解决方式对于我并不适用,我这里并没有报楼主类似的错误。而是唤起微信后显示连接中,然后又返回App了。后续有解决办法请分享下。
      10-29
      回复
    • XT
      XT
      10-29
      解决了吗?我也是升级到xcode16打包,线上有用户反馈,iOS18.0的手机点击微信分享跳转不到微信,之前xcode15.4打包没有这个问题,公司18的系统都没出现这个问题。
      10-29
      回复
    查看更多(2)
  • 狂风
    狂风
    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
    回复 13
    • 哈哈哈
      哈哈哈
      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
      回复
    查看更多(8)
  • 卓明
    卓明
    10-28

    复现不了无法唤起的情况,苹果iOS18的发布文档确实提到了这个问题(125695759 )。

    先hook试试看了

    10-28
    有用
    回复
  • 豪
    10-28

    你好,我是用的xcode16和iOS18,然后不管是使用sdk2.0.4,还是上面老哥的重置方法,首次打开app调用检测微信isWXAppInstalled是否存在,都会往微信调一下,然后回来,你们有遇到吗。

    10-28
    有用
    回复 3
    • 白昼
      白昼
      10-28
      一样。唤起微信后显示连接中,后面又跳回来了。
      10-28
      回复
    • 社区技术运营专员--许涛
      社区技术运营专员--许涛
      星期二 16:37
      你好,看下老接口
       - (BOOL)openURL:(NSURL*)url API_DEPRECATED_WITH_REPLACEMENT("openURL:options:completionHandler:", ios(2.0, 10.0)) API_UNAVAILABLE(visionos);
      有换成新接口吗?
       - (void)openURL:(NSURL*)url options:(NSDictionary<UIApplicationOpenExternalURLOptionsKey, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion API_AVAILABLE(ios(10.0));
      星期二 16:37
      回复
    • 社区技术运营专员--许涛
      社区技术运营专员--许涛
      星期二 16:37回复白昼
      你好,看下老接口
       - (BOOL)openURL:(NSURL*)url API_DEPRECATED_WITH_REPLACEMENT(&quot;openURL:options:completionHandler:&quot;, ios(2.0, 10.0)) API_UNAVAILABLE(visionos);
      有换成新接口吗?
       - (void)openURL:(NSURL*)url options:(NSDictionary&lt;UIApplicationOpenExternalURLOptionsKey, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion API_AVAILABLE(ios(10.0));
      星期二 16:37
      回复
  • 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
    有用
    回复 8
    • 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
      回复
    查看更多(3)
登录 后发表内容