Условный вызов класса внутри блока 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 в Theos / Logos?

Ура

%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)
}

Другие вопросы по тегам