0

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

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

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

%hook className

- (void)method:arg1 {
    //
}

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

%end

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

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

非常感谢您的帮助。

4

2 回答 2

0

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

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

请参阅此处:如何使用 Theos / Logos 中的 %group 功能?

于 2013-05-09T21:03:51.527 回答
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)
}

于 2015-12-08T16:46:45.910 回答