什么是tweak(钩子)程序
创建第一个钩子程序
-
创建工程
- 选择tweak
- 输入tweak工程名
- 输入deb包的名称(Bundle identifier)
- 输入作者名称
- 输入tweak应用对象 com.apple.springboard
- 输入tweak安装完成后需要重启的应用SpringBoard
-
工程说明
Makefile 文件制定工程用到的文件,框架,库等信息,将整个过程自动化
导入公共库
include $(THEOS)/makefiles/common.mk设置工程名
TWEAK_NAME = 工程名tweak包含的源文件,多个文件以空格分隔(可以按需求修改)
工程名_FILES = Tweak.xm安装工程后执行脚本
install.exec "killall -9 SpringBoard"指定处理器架构
ARCHS = arm7 arm 64指定SDK版本
TARGET = iphone:lastest:8.0导入framework
工程名_FRAMEWORKS = UIKit链接Mach-O对象
工程名_LDFLAGS = -lz -lsqlite3.0设置THEOS_DEVICE_IP环境变量,方便安装
THEOS_DEVICE_IP =
tweak.mx文件说明
后缀“x”表示支持Logos和C语言,后缀“mx”表示支持Logos和C/C++/Object-C语法
-
介绍Logos语法
- %hook 指定需要hook的class,必须以%end结尾
- %log 该指令在%hook内部使用。将函数的类名,参数等信息写入syslog
- %orig 该指令在%hook内部使用。执行被构筑的函数的原始代码,如果去 掉%orig那么原始代码就不会被调
- %group 代码分组
- %init 代码初始化
- %ctor 构造方法
- %new 在hook的class创建新方法
- 内部使用class_addMethod运行时构建
- Category与class_addMethod区别,前者是静态的,后者是动态的,编译时会找不到该类,但是hook的类又是app中的类,所以要用动态创建
- %c 该指令的作用等同于objc_getClass或者NSClassFromString,即动态获取一个类的定义,在%hook或%ctor内使用
control 文件记录了deb包管理系统所需的基本信息,会被打包进deb包里。会在Cydia中看到
-
project.plist 这个plist文件的作用和App中的Info.plist了类似,它记录了一些配置信息,描述了tweak的作用范围,比如hook哪个app Filter下是一个array,可以分为3类
- Bundles,指定若干bundle为tweak作用对象
- Classes,指定若干class为tweak的作用对象
- Executables,指定若干个可执行文件为tweak的作用对象
-
编译,打包,安装,清理
- 编译执行 make
- 打包 make package
- 安装 make package install
- 清理 make clean
制作开发脚本
满地打滚卖萌求赞,如果本文帮助到你,轻点下方的红心,给作者君增加更新的动力。