在做热更技术调研的时候,无意中在GitHub发现这个模拟器界面调试hotfix的方案,就做了进一步的了解,这个工具是开源的,用好这个能提升你的开发效率。By the way,xib上面修改界面后command+S没起作用,只能拉到VC里边用代码控制才生效。
想用它主要有以下4个步骤:
1.下载安装Injectionlll
2.在调试项目的AppDelegate添加链接InjectionIII代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#if DEBUG
//InjectionIII调试app路径链接
[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
#endif
// Override point for customization after application launch.
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
[self.window makeKeyAndVisible];
self.window.rootViewController = [[ViewController alloc]init];
return YES;
}
3.添加响应Injectionlll app的injected方法(我直接把它放到了VC 的父类中,免得每个要调试的页面都要添加一遍)
#if DEBUG
//InjectionIII调试响应方法
- (void)injected {
//重新加载view
[self loadView];
[self viewDidLoad];
[self viewWillLayoutSubviews];
[self viewWillAppear:YES];
[self viewDidDisappear:YES];
}
#endif
4.开始调试,command+R运行工程后成功链接后是橙色,没链接成功是蓝色的,UI 页面的代码修改完毕后command+s保存,即可刷新页面改动的元素
附上Injectionlll 运行原理
Injectionlll 通过Fill Watcher检测到项目源码改动,Injectionlll Server就会编译、打包成动态库,也就是.dylib, 动态库用writeToString方法通过socket通知运行的app,Injectionlll client接收到消息injected(tmpfile: String)方法,运行时进行动态类替换,类方法被替换后,进行界面重新绘制界面, 整个过程无需重启和编译APP,达到了动态库极速调试的目的。