cd到tweak工程文件夹 ls -l 查看工程目录
1,Makefile
Makefile中包含工程中用到的文件、框架、库等信息
include $(THEOS)/makefiles/common.mk
固定写法,不可改
TWEAK_NAME = TweakDemo
tweak的名字,与control中的Name相对应,不可改
TweakDemo_FILES = Tweak.xm
包含的源文件(不包括头文件),多个文件用都好隔开
(TweakDemo_FILES = Tweak.xm,xxx.m, xxx.mm)
include $(THEOS_MAKE_PATH)/tweak.mk
Theos的工程类型(创建时所选择的模板类型, 可按需求更改
after-install::
install.exec "killall -9 SwizzlingMethodDemo"
安装后的说明(tweak安装后,杀掉原工程进程并加载对应的dylib)
除此之外,我们还需完善Makefile文件信息
ARCHS = armv7 arm64
配置所兼容的框架
TARGET = iphone:latest:8.0
限制可安装版本 8.0以上
TWEAKDEMO_FRAMEWORKS = UIKit CoreAudio CoreTelephony
导入使用的framework,多个空格隔开
TWEAKDEMO_PRIVATE_FRAMEWORKS = ChatKit IMCore 导入的私有framework
TWEAKDEMO_LDFLAGS = -lz -lsqlite3.0 -dylib1.0
添加链接的动态库
2, Tweak.xm
Tweak.xm是放置hook代码的源文件
%hook为hook函数,修改指定的函数
%log 打印信息
%orig 调用工程原函数或者修改原函数参数并调用,不写不调用
%group 将%hook分组,以%end结尾 必须配合%init才能生效
%init 初始化某个分组
%ctor 在该方法调用%init方法 不写默认初始化%group_ungrouped 不需要以%end结尾
%new 在%hook内部给一个现有的class添加新的函数
%group SwizzlingGroup (分组名)
%hook SwizzlingMethodDemo(类名)
%new //新添加的方法
- (void)logMessage
{
NSLog (@"1234567890");
}
%end
- (void) _menuButtonDown: (NSString) down (被hook函数名)
{
%log ((NSString *)@"IOSRE", (NSString)@"Debug");
%orig ( @"aaaaaaa" ); //调用原工程
_menuButtonDown方法参数为aaaaaaa
}
%ctor
{
%init(SwizzlingGroup);
}
%end
%end
3, TweakDemo.plist
作用与app中的Info.plist相同
4, control
放置deb包的基本信息 (包名,工程名,版本号,设备架构,维护人,deb包内容简述等)