美文网首页
面对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