Условный вызов класса внутри блока Hook внутри THEOS/LOGOS

В моей настройке THEOS я подключаю класс и успешно вызываю один из его методов.

Моя проблема в том, что имя метода изменилось после обновления приложения, которое я настраиваю.

В старой версии рассматриваемый метод принимает один аргумент (метод: arg1), затем он был обновлен и принимает 2 аргумента (метод: arg1: arg2). Пока мой код выглядит так

%hook className

- (void)method:arg1 {
    //
}

- (void)method:arg1:arg2 {
    //
}

%end

Эта настройка отлично работает в новой версии, но вызывает сбой приложения в старой версии. Есть ли способ условно вызвать один из этих методов на основе версии пакета ([[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"])?

Я играл с #if и #endif, но далеко не продвинулся.

Ваша помощь очень ценится.


person boudarbalat    schedule 21.04.2013    source источник


Ответы (1)


Если endif - это время компиляции макросов, а не время выполнения, как вам нужно.

Я тоже изучаю логотипы theos, но я думаю, что вы должны использовать %group и %ctor{} с условием.

см. здесь: Как использовать функцию %group в Теос/Логос?

person Yaro    schedule 09.05.2013
comment
Спасибо, что нашли время ответить. Я действительно нашел этот ответ и просмотрел некоторые существующие файлы tweak.mm с открытым исходным кодом, чтобы увидеть, как именно его используют другие ребята. но так и не удосужился ответить на свой вопрос. - person boudarbalat; 13.05.2013