平时项目做OC项目时候,相信大家都会发现一调整UI,就需要重新编译项目,如果是小项目的话,重新运行就可以快速查看效果,但当项目发展到一定规模,会发现编译一次就要等3,5分钟,甚至更长时间,严重影响团队工作效率。
这里就给大家介绍我团队里平时使用的一个快速调试UI的方法。
使用InectionIII 实时编译调整UI
可以达到SwiftUI 实时预览
Flutter Hot Reload效果
1、安装InectionIII APP
App store搜索 InjectionIII,需要一个美国地区的appleid才可以下载。
2、下载完app,打开app-->open project -->找到对应调试项目的路径
3、在Appdelegate添加以代码
OC版本:
#if DEBUG
// iOS
[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
#endif
Swift版本:
#if DEBUG
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
4、运行项目如果注入成功会有提示:
💉 Injection connected 👍
5、在需要调整UI的类里新增方法:
-(void)injected{
NSLog(@"12345");
self.view.backgroundColor = [UIColor redColor];
//添加想要调整的代码
}
添加想要调整的代码,点击保存,可以发现控制台会有日志输出,就可以立马查看效果。
6、调整完毕,需要把代码放到具体的位置
7、原理:
1、Injection会监听源代码文件的变化;
2、如果代码文件被改动了Injection Server就会执行rebuildClass 重新进行编译、打包成动态库,即 .dylib文件;
3、接着编译、打包成动态库后使用writeSrting 方法通过Socket通知运行的App;
4、然后运行时进行类的动态替换。当类的方法都被替换后,重新绘制界面了。
整个过程无需重启App,至此使用动态库方式完成快速调试
有兴趣的同学可以到github上面查看InjectionIII官方地址