method swizzlingを行ってるクラスを探す

2017/4/10 1209hit

unity-iosでプラグインを多数導入していると、swizzlingをたくさんしているせいで挙動が不安定になる事があります。
特にgoogleが作った行儀の悪いframework。。

※ swizzlingはframeworkへのdelegate登録で実装を入れ替える事です

バイナリの中でswizzlingされてると、誰が実装を入れ替えてるのかわからなくなります。
挙動が不安定な時に犯人を突き止める方法です


#include <unistd.h>
#import <objc/runtime.h>

>> in method
unsigned int numberOfClasses = 0;
Class *classes = objc_copyClassList(&numberOfClasses);
for (unsigned int i = 0; i < numberOfClasses; ++i) {
if (class_conformsToProtocol(classes[i], @protocol(UIApplicationDelegate))) {
const char *name = class_getName (classes[i]);
NSLog(@"%s", name);
}
}
<<


この例だと、起動シーケンス(UIApplicationDelegate)にswizzlingしているクラスを全部洗い出しを行っています。
まぁ、バイナリの中でやられると手が出せないんですけどね。。
犯人は探せます。

前:Unityで同期通信のデバッグ用にお手軽にクライアントを2個起動する方法 

コメントを投稿する

名前URI
コメント