【问题标题】:Conditional call of a class inside a Hook block within THEOS/LOGOS在 THEOS/LOGOS 中的 Hook 块内的类的条件调用
【发布时间】:2013-04-14 10:43:15
【问题描述】:

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

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

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

%hook className

- (void)method:arg1 {
    //
}

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

%end

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

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

非常感谢您的帮助。

【问题讨论】:

    标签: jailbreak theos logos


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您花时间回答。我实际上已经找到了答案,并查看了一些现有的开源“tweak.mm”文件,以了解其他人如何使用它。但一直没有时间回答我自己的问题。
    【解决方案2】:

    干杯

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 2014-01-13
      • 2019-12-28
      相关资源
      最近更新 更多