在我的THEOS调整中,我正在挂钩并成功调用其中一个方法。
我的问题是,在对我正在调整的应用程序进行更新后,方法名称发生了变化。
在旧版本中,有问题的方法采用一个参数(方法:arg1),然后更新为2参数(方法:arg1:arg2)。 现在我的代码看起来像这样
%hook className
- (void)method:arg1 {
//
}
- (void)method:arg1:arg2 {
//
}
%end
此设置在新版本上运行正常但导致应用程序在旧版本中崩溃。 有没有办法可以根据捆绑版本有条件地调用其中一种方法([[NSBundle mainBundle] objectForInfoDictionaryKey:@“CFBundleVersion”])?
我玩过#if和#endif,但没有走远。
非常感谢您的帮助。
答案 0 :(得分:0)
如果endif是宏编译时间,而不是你需要的运行时。
我也在学习theos徽标,但我认为你应该使用%group和%ctor {}。
答案 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)
}