iOS日常开发Xcode开发工具IOS 学习

iOS Injectionlll工具使用以及原理解析

2020-10-21  本文已影响0人  Hello_kid

接触到Injectionlll 工具是在看了戴铭《iOS开发》高手课后,并随着目前自己负责的项目越来越大, 开发调试所占用的时间也越来越长的一个背景下, 着手使用了这款工具, 并去了解其背后的运行原理;

安装使用

作者开源了这款工具, 底部参考有直达链接,也可以在AppStore商店下载这款工具,


AppStore商店下载

安装好以后,打开工具运行,会在顶部状态栏,显示该工具一个注射器图标,初始状态是蓝色, 后续配置好运行起来是橘红色


WX20201021-153248.png

使用xcode创建一个demo项目, 在AppDelegate文件里加入以下代码

#if DEBUG
// or oc
[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
// or switf
//Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle")?.load()
// for tvOS:
//Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/tvOSInjection.bundle")?.load()
// Or for macOS:
//Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/macOSInjection.bundle")?.load()
#endif

然后点开Injectionlll工具菜单, 选择demo项目目录


选择项目录

然后运行项目, 在Xcode控制台打印如下


控制台输出
显示这样就配置好了,接着测试下,改动代码是否能做到热重载效果?
在需要的ViewController里,加入以下代码,
- (void)injected{
//    [self viewDidLoad];
    self.view.backgroundColor = [UIColor redColor];
}

injected 方法里加入修改UI的代码, 保存即可展示效果,如果在viewDidLoad方法里或者其它方法修改UI代码, 保存后,需要退出该页面, 再重新push进页面,才可以看到效果。

Injectionlll 运行原理

Injectionlll 通过Fill Watcher检测到项目源码改动,Injectionlll Server就会编译打包成动态库,也就是.dylib, 动态库用writeToString方法通过socket通知运行的app,Injectionlll client接收到消息inject(tmpfile: String)方法,运行时进行动态类替,换,类方法被替换后,进行界面重新绘制界面, 整个过程无需重启和编译APP,动态库极速调试的目的就达到了。

参考

Injectionlll GitHub
InjectionIII 快速调试

上一篇下一篇

猜你喜欢

热点阅读