美文网首页
微博SDK出现莫名的错误

微博SDK出现莫名的错误

作者: aerial | 来源:发表于2017-04-04 15:34 被阅读0次

    本篇内容涉及到oc中runtime的swizzling,方法交换的使用
    这个是关于微博SDK的内部存在的一个bug。
    这个bug是这样的,用户在使用App时,如果从后台进入App,会莫名的闪退Crash。而且这种情况是偶现,并不是每次都能重现出来。
    从Bugly上分析,crash 报在微博的SDK上。但是微博SDK是以静态库的形式开放给我们使用,我们并不能看到它的源码和实现原理。那该怎么办呢?这有很多种方法。

    1. 首先肯定是向微博官方的开发者反馈问题发送邮件,因为这是官方开发者的一个bug,由他们来解决。从而来更新微博SDK。
    2. 目前我所遇的情况,反馈给微博官方后,等了好几天都没有得到解决的方法。上面领导就来催促了,怎么这个问题还没解决。我们就不能干等着了。既然官方不能解决,我们只能试着去解决了。

    从Bugly上分析出的问题在于:有2个方法一直Crash
    -[WBSDKFMDatabase executeUpdate:error:withArgumentsInArray:orDictionary:orVAList:] (WBSDKFMDatabase.m:812)
    -[WBSDKFMDatabase executeQuery:withArgumentsInArray:orDictionary:orVAList:] (WBSDKFMDatabase.m:530)
    解决的思路很简单,就是拿到这个2个方法,并重写这2个方法。
    我在WBHttpRequest类基础上新建一个类别。
    还是直接上代码看好:

    A2FB3CBA-A59C-4286-8504-4A54CD390AFA.png
    关键在于获取方法的返回值是什么属性
    SEL sel = @selector(executeUpdate:error:withArgumentsInArray:orDictionary:orVAList:);
    SEL sel1 = @selector(executeQuery:withArgumentsInArray:orDictionary:orVAList:);
    Class cls = NSClassFromString(@"WBSDKFMDatabase");
    NSMethodSignature *methodSignature = [cls instanceMethodSignatureForSelector:sel];
    NSMethodSignature *methodSignature1 = [cls instanceMethodSignatureForSelector:sel1];
    通过打断点,查看NSMethodSignature的内容,然后参照苹果官方给出的
    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html
    我这里通过打断点NSMethodSignature 返回的是B,参看后是个bool值。
    E4E32905-463A-4D72-8D1B-0E1A7708B142.png

    相关文章

      网友评论

          本文标题:微博SDK出现莫名的错误

          本文链接:https://www.haomeiwen.com/subject/dpaaottx.html