美文网首页
iOS 模拟器界面调试利器Injectionlll

iOS 模拟器界面调试利器Injectionlll

作者: 王看山 | 来源:发表于2022-06-29 13:19 被阅读0次

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

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

1.下载安装Injectionlll
B307E006-13A5-4319-9317-C1629D620FBD.png
2.在调试页面的VC添加监听代码(我直接把它放到了父类ViewDidLoad中,免得每个要调试的页面都要添加一遍)
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = UIColor.whiteColor;
#if DEBUG
    //InjectionIII调试代码
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(injected) name:@"INJECTION_BUNDLE_NOTIFICATION" object:nil];
#endif
}
3.弄个UIViewController的分类,做软件关联和动态为所有VC添加injected方法
//InjectionIII调试代码
#if DEBUG
/**
 InjectionIII 热部署会调用的一个方法,
 runtime给VC绑定上之后,每次部署完就重新viewDidLoad
 */
void injected (id self, SEL _cmd) {
    //重新加载view
    [self loadView];
    [self viewDidLoad];
    [self viewWillLayoutSubviews];
    [self viewWillAppear:YES];
    [self viewDidDisappear:YES];

}

+ (void)load {
    //注册项目启动监听
    __block id observer =
    [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
        //更改bundlePath
        [[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
        [[NSNotificationCenter defaultCenter] removeObserver:observer];
    }];
    //给UIViewController 注册injected 方法
    class_addMethod([UIViewController class], NSSelectorFromString(@"injected"), (IMP)injected, "v@:");
}
#endif
4.开始调试,command+R运行工程后成功链接后是橙色,没链接成功是蓝色的
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,达到了动态库极速调试的目的。

GitHubDemo

相关文章

  • iOS 模拟器界面调试利器Injectionlll

    在做热更技术调研的时候,无意中在GitHub发现这个模拟器界面调试hotfix的方案,就做了进一步的了解,这个工具...

  • iOS界面调试工具 Reveal

    iOS界面调试工具 Reveal --该文作者唐巧 Reveal的使用 用Reveal连接模拟器调试 Reveal...

  • 【React Native 极速指南】开发环境

    这篇文章你将会学习到: iOS运行环境模拟器调试真机调试 Android运行环境模拟器调试真机调试 iOS 运行环...

  • React Native调试

    此处以iOS模拟器为例,Command+D打开开发者面板。 界面调试和性能监控 远程调试 在RN实例启动后,启动远...

  • Reveal2破解+使用教程

    工欲善其事,必先利其器 Reveal是一个iOS界面调试利器。可以动态查看界面元素的位置信息、层级关系,通过实时修...

  • lldb调试工具

    lldb: 调试工具. 支持OSX, iOS, 以及iOS模拟器 debugserver: 配置debugserv...

  • Reveal : Xcode辅助界面调试工具

    Reveal简介: Reveal是一款iOS界面调试工具,辅助Xcode进行界面调试,使用它可以在iOS开发的时候...

  • Reveal调试UI利器

    Reveal Reveal是分析、调试iOS应用UI的利器。 Reveal能够在运行时调试和修改iOS应用程序。它...

  • iOS调试

    -工具 --iTerm2 链接 -UI调试 --DCIntrospect -iOS界面调试 DCIntrospec...

  • IOS布局框架

    IOS界面开发利器 --- FlexLib 前言 做过几年IOS开发的都会有这样一种感觉,就是界面适配工作越...

网友评论

      本文标题:iOS 模拟器界面调试利器Injectionlll

      本文链接:https://www.haomeiwen.com/subject/zkytbrtx.html