在THEOS / LOGOS内的Hook块内有条件地调用类

时间:2013-04-21 13:38:57

标签: jailbreak theos logos

在我的THEOS调整中,我正在挂钩并成功调用其中一个方法。

我的问题是,在对我正在调整的应用程序进行更新后,方法名称发生了变化。

在旧版本中,有问题的方法采用一个参数(方法:arg1),然后更新为2参数(方法:arg1:arg2)。 现在我的代码看起来像这样

%hook className

- (void)method:arg1 {
    //
}

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

%end

此设置在新版本上运行正常但导致应用程序在旧版本中崩溃。 有没有办法可以根据捆绑版本有条件地调用其中一种方法([[NSBundle mainBundle] objectForInfoDictionaryKey:@“CFBundleVersion”])?

我玩过#if和#endif,但没有走远。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果endif是宏编译时间,而不是你需要的运行时。

我也在学习theos徽标,但我认为你应该使用%group和%ctor {}。

见这里:How do I use the %group feature in Theos / Logos?

答案 1 :(得分:0)

干杯



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