Dyamk
运行时原生代码注入器,仅用于调试。
为什么使用 Dyamk
Dyamk 可以帮助您在不重新编译和重启应用的情况下运行 Objective-C 代码,它可以帮助您调试 UI 等,它基于 dlopen
,因此它仅用于调试。当您完成调试后,只需将正确代码复制到您的应用程序中即可。
Dyamk 使用套接字与生成的 dylib 和项目进行通信,它作为一个方面运行在主应用中,因此它对主应用没有侵入性,尽情享受吧!
架构与原理
安装
- 克隆仓库并进入它。
git clone https://github.com/Soulghost/Dyamk
cd Dyamk
- 运行
install.sh
(需要 root 权限在 /opt 中创建目录,您可以自行检查安全性)。
sh install.sh
- 一些脚本是用 Python3 编写的,因此您需要 Python3 环境,如果没有,请尝试 pyenv。
如何开始
在“Dyamk”文件夹中有两个项目,分别是 DyamkInjector
和 DyamkDemoApp
,前者是动态库生成和注入项目,后者是用于在运行时注入的示例应用程序,当您使用此框架为自己的应用程序时,您的应用程序将是后者,现在我们只讨论示例。
示例应用程序
- 进入
DyamkDemoApp
文件夹,使用 Xcode 打开它,如果未安装 CocoaPod 库,请在项目根目录下运行pod install
。 - 使用 iOS 模拟器运行它,默认情况下此框架不支持真实设备。
- 因为 Dyamk 库需要 socket 接收注入器的构建消息,将出现一个确认提示。
- 如果没有错误,您可以在下面的控制台中看到日志。
2018-06-22 21:01:03.051985+0800 DyamkDemoApp[52912:50098406] DYA Server start at 2224
- 现在示例应用程序已准备好注入代码,现在您可以离开项目,但保持应用在模拟器上运行。
DyamkInjector 项目
- 进入
DyamkInjector
目录,并使用 Xcode 打开项目。 - 将构建目标更改为
BuildMe
。 - 为
BuildMe
目标打开构建阶段
选项卡,并修改[Dyamk] 触发更新
脚本的 shell 为您的Python3
位置,您可以在终端中使用which python
找到位置,如果您没有 python3,请尝试 pyenv。 - 打开
DyamkCodePlayground.m
,您可以看到函数__dyamk_debug_code_goes_here
,您的代码注入将在这里。
void __dyamk_debug_code_goes_here() {
// a simple code to inject
UIWindow *window = [UIApplication sharedApplication].windows.lastObject;
UIViewController *vc = window.rootViewController;
vc.view.backgroundColor = [UIColor redColor];
}
- 构建项目,您可以在模拟器上运行看到的示例应用程序,它已将视图的背景色更改为红色。
- 您可以在
__dyamk_debug_code_goes_here
函数中编写一些代码,当您构建时,这些代码将被注入到示例应用程序中。