Theos使用%new声明方法,在本类中调用但找不到声明的方法。

需求: 我需要使用Theos在Tweak.xm中声明一个方法(%new)并调用

编译报错:

Tweak.xm:16:11: error: instance method '-helloWorld' not found (return type
      defaults to 'id') [-Werror,-Wobjc-method-access]
    [self helloWorld];

代码:

%hook NewSettingViewController

- (void)viewDidAppear:(BOOL)animated {
    %orig;
    [self helloWorld];
}

%new
- (void)helloWorld {
    NSLog(@"test");
}

%end

操作步骤:我就是这样正常流程声明方法并调用,编译时出错。
任何其他描述: 请问是我哪里没有设置对吗。或者调用%new方法的方式错误么?
环境: Mac 10.12.6,编译的IOS的Dylib。


最后,当我使用
[self performSelector:@selector(helloWorld)];
这样的方式去调用的时候,是OK的。

但是我想知道,为什么会出现这样的错误。难道是%new声明的方法不能直接调用吗。

你也通过perform的方式能调用到吗

还有你是如何加头文件的?TheOS %hook的话只能hook实现类吧?

难道是反编译出来汇编然后直接修改文件?

提示没有声明你就给它声明下不就好了:
@interface NewSettingViewController

  • (void)helloWorld;
    @end

%new是在运行时动态添加一个新方法,在编译的时候,编译器还不知道有这个新方法,所以需要如 @artkai 所说,静态声明一下

1 个赞

请问这句话写在哪里呢,也卸载这个.xm文件里吗

.h凑够5个字

再请问.h文件在哪里呢- -

用TheOS新建的Project,就只有一个.xm文件是用来编码的呀,我是自己再新建一个.h文件么? 似乎网上没有看到相关教程呢。

买本看看吧

再请教

现在除了那一本《iOS应用逆向工程 第2版》以外,还有别的书吗? 还是说如果看书的话就只有这一本最详细么?

有什么推荐的么?