使用Theos创建Cydia Tweak时编译器错误与转储标头

时间:2012-12-30 20:55:13

标签: cydia logos theos cydia-substrate

我正试图在iPhone上为应用编写一个调整。我在目标C和iPhone开发方面有很好的背景,但我从未做过任何Cydia越狱调整,除了使用rpetrich的转储标题进行调整的一些教程。我希望使用PoedCrackMod解密,使用class-dump-z来获取标题,然后使用theos / logos来修补破解的应用程序。

我已经开始运行PoedCrackMod来解密应用程序。这会产生一个.ipa文件,然后我可以提取它来获取.app文件,其中包含实际的应用程序二进制文件。

我可以使用

class-dump-z -k -k -H -g -o ~/dumped_headers/ Foo

继续获取头文件目录。我将这些标题复制到$ THEOS / include / Foo。 (我应该在这里使用-g选项[仅显示导出的类],还是可以挂钩非导出的类?)

此时,我应该能够创建一个如下所示的tweak.xm文件:

#import <Foo/Foo.h>

以供参考,makefile如下所示:

include theos/makefiles/common.mk

TWEAK_NAME = FooTweak
FooTweak_FILES = Tweak.xm

include $(THEOS_MAKE_PATH)/tweak.mk

当我继续尝试编译我的Tweak(此时应该什么也不做)时,我想出了各种重复声明错误。这是正常的,还是我做错了什么?

如果是正常的,我该如何纠正?我试过注释掉重复的声明,在这种情况下我可以让它编译。我已经插入了20多个在调用方法时创建UIAlertViews的钩子,但是它们似乎都没有触发 - 让我相信我没有挂钩那些没有被调用的方法,而是我要么做转储标题或将标题导入我的调整时出错?

有没有人对我可能做错了什么有任何见解?

1 个答案:

答案 0 :(得分:1)

请勿使用 #import <Foo/Foo.h>

相反

[File] tweak.xm:

#import <substrate.h>

@interface FooToBeHookedHeader : NSObject {} // We take NSObject here as to avoid any errors.
- (void)fooMethod1; // Only put the methods you are hooking
- (void)fooInheritedMethod; // Inherited method (if hooking) as we are using NSObject up there :)
@end

%hook FooToBeHookedHeader
- (void)fooMethod1 {
// Do hooking stuff
} 
- (void)fooInheritedMethod {
// Do hooking stuff
}
%end

// Include any instance variables which you are modifying if any :)
// ~ SuperDev

还包括挂接在FooTweak.plist

中的App / Framework的标识符