前言
在使用 QQ,微信等第三方登录时需要通过 application:openURL:options:
方法来调起对应的应用。但是在制作登录 SDK
时无法直接在 application:openURL:options:
写入相应的代码。此时需要通过 swizzle
技术来交换 application:openURL:options:
方法。
swizzle
application:openURL:options:
是 UIApplicationDelegate
的方法,不能在 AppDelegate
当分类中 swizzle
,因为 load
分类的时候并不能保证 UIApplicationDelegate
的代理方法已经实现。
可以通过一个 regist
方法在 application:didFinishLaunchingWithOptions:
中 swizzle
。
这里要注意的是需要判断原来的类中是否已经存在 swizzle
的方法,防止重复交换。
BOOL registerMethod = class_addMethod(originalClass,
swizzledSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (!registerMethod) {
return;
}
具体代码参考 GitHub。