将Theos钩子放入类的特定类别

时间:2014-10-12 18:42:42

标签: ios objective-c jailbreak theos logos

通常情况下,当您进行调整并希望挂钩应用程序时,您可以执行以下操作:

%hook foo

//code    

%end

但现在我有一个@interface有一个奇怪的名字:@interface NSString (foo),我不知道如何挂钩。我试过这个:

%hook NSString (foo)



%end

但这会产生错误:

  

Tweak.xm:12:3:错误:C ++需要所有声明的类型说明符
  (富)
   〜^ Tweak.xm:12:18:错误:预期';'在顶级声明者之后    (foo):

1 个答案:

答案 0 :(得分:1)

@interface NSString (foo)

只是声明一个名为" foo"的自定义类别。这允许将其他方法声明为原始NSString类的一部分。您可以使用标准徽标挂钩,就好像后面的方法是NSString类一样。但是,一个BIG例外是类类别没有实例变量。这意味着MSHookIvar不起作用。简单的例子是你的问题 - 假设原始代码是:

@interface NSString (foo)
+(NSString *) someString;
@end

@implementation NSString (foo)
+(NSString *) someString 
{ 
//code that returns a string
}
@end

要覆盖该方法,您可以输入:

%hook NSString
+(NSString *) someString {
//code here
return someNewString;
}
%end

注意:只需在iPhone上键入它并且没有编译它,但它应该可以工作,或者至少这个概念应该更有意义。只需google"使用obj c apple documentation"自定义现有类有关课程类别的更多信息。