记一次友盟引起的BUG

友盟SDK有一个私有类UMAOCTools,在类方法setupHook中hook了UIViewController的viewDidDisapper方法。在新的viewDidDisapper中却没有放行原方法,导致项目中其它地方无法再次hook此方法。

解决办法如下

#import <objc/runtime.h>

@implementation NSObject (FuckUM)

static void swizzleClassMethod(Class c, SEL orig, SEL new) {
    Method origMethod = class_getClassMethod(c, orig);
    Method newMethod = class_getClassMethod(c, new);
    c = object_getClass((id)c);
    if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
        class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
    else
        method_exchangeImplementations(origMethod, newMethod);
}

+ (void)load {
    swizzleClassMethod(NSClassFromString(@"UMAOCTools"), NSSelectorFromString(@"setupHook"), @selector(doNothing));
}

+ (void)doNothing {
}

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,269评论 4 61
  • 有的婚姻只是把两个肉体安放在一处,而灵魂却个自飘荡……就像我的灵魂无所依靠。 一天,和同事吃午饭的时候,谈论起另外...
    终点相遇阅读 318评论 0 1
  • Newly renovated three bedroom with a large living room an...
    Crystal52阅读 919评论 0 0
  • 只为从心一场, 不谙尘世茫茫, 青春年华相识, 琐碎故园情思 莫要问我, 我所思何, 只为前缘注定, 为一首相逢是...
    LW倾城阅读 212评论 0 1