美文网首页
面对iOS第三方SDK,有些方法我想改

面对iOS第三方SDK,有些方法我想改

作者: 杨闯 | 来源:发表于2020-03-13 08:01 被阅读0次

    最近面对一个产品需求,但是产品需求是改动第三方SDK的东西,所以在第三方SDK上我是坐了一系列的修改, 按照我的记忆,把我曾经的修改找回来。

    修改原来的响应方法

    修改原来的响应方法,自然而然就想到了hook,但是我得先找到原来执行的是什么方法,我通过classdump (详细使用可见 https://www.jianshu.com/p/777f350f6851),猜测到有一个关键的方法 - (void)buttonUp; ,那么我就要hook这个方法。
    首先我要创建一个分类,在xcode创建文件中我需要选择Object-C File,如图所示:

    image.png
    然后输入分类名称和需要分类的类名之后,就创建好了对应的文件。
    然后通过下面的手段,原本在要执行buttonUp方法的时候不执行buttonUp方法,反而执行咱们自己的MyButtonUp方法
    + (void)initialize {
        Method method1 = class_getInstanceMethod([self class], NSSelectorFromString(@"buttonUp"));
        Method method2 = class_getInstanceMethod([self class], @selector(MyButtonUp));
        method_exchangeImplementations(method1, method2);
    }
    

    调用原本的私有方法

    在开发过程中,由于一些需求的存在,需要调用一些类的私有方法,但是这个类可能是pod进来了,为了能够很好的进行升级,需要通过一些特别的方法进行调用,比如

     if ([chatVC respondsToSelector:@selector(next)]) {
                [chatVC performSelector:@selector(next)];
     }
    

    但是随之而来的出现一个警告:Undeclared selector '***********',
    为了消除这个警告,在前边添加这一行代码即可

    #pragma GCC diagnostic ignored "-Wundeclared-selector"
    

    相关文章

      网友评论

          本文标题:面对iOS第三方SDK,有些方法我想改

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