Условный вызов класса внутри блока Hook внутри THEOS/LOGOS
В моей настройке THEOS я подключаю класс и успешно вызываю один из его методов.
Моя проблема в том, что имя метода изменилось после обновления приложения, которое я настраиваю.
В старой версии рассматриваемый метод принимает один аргумент (метод:arg1), затем он обновляется до двух аргументов (метод:arg1:arg2). На данный момент мой код выглядит так
%hook className
- (void)method:arg1 {
//
}
- (void)method:arg1:arg2 {
//
}
%end
Эта установка отлично работает на новой версии, но вызывает сбой приложения в старой версии. Есть ли способ, которым я могу условно вызвать один из этих методов на основе версии пакета ([[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"])?
Я играл с #if и #endif, но далеко не ушел.
Ваша помощь очень ценится.
2 ответа
Если endif - это время компиляции макросов, а не время выполнения, как вам нужно.
Я также изучаю логотипы theos, но я думаю, что вы должны использовать%group и%ctor{} с условием.
Ура
%group A
%hook className
- (void)method:arg1 {
//
}
%end
%end
%group B
%hook className
- (void)method:arg1:arg2 {
//
}
%end
%end
%ctor{
if([anObject respondsToSelctor:@selector(method:arg1:arg2)]){
%init(B)
}
else{
%init(A)
}