iOS 模拟器界面调试利器Injectionlll

在做热更技术调研的时候,无意中在GitHub发现这个模拟器界面调试hotfix的方案,就做了进一步的了解,这个工具是开源的,用好这个能提升你的开发效率。By the way,xib上面修改界面后command+S没起作用,只能拉到VC里边用代码控制才生效。

想用它主要有以下4个步骤:

1.下载安装Injectionlll
B307E006-13A5-4319-9317-C1629D620FBD.png
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保存,即可刷新页面改动的元素
0FCB468E-0DF4-453A-BF14-6255970ECB18.png

F4E9DF66-D118-45DE-8815-4412121A1102.png
附上Injectionlll 运行原理

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

Injectionlll也是支持 Swift 的,文中只细说了OC的,Swift也差不多,最后附上 Github上面的OC和Swift的Demo 链接:

GitHubDemo
GitHubSwiftDemo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容