美文网首页
InjectionIII 使用 学习整理

InjectionIII 使用 学习整理

作者: 夏天无泪灬 | 来源:发表于2019-12-04 11:23 被阅读0次

    ** iOS Swift 通过注入动态库的方式实现极速编译调试(InjectionIII、热重载、热编译)原理解析**

    一、安装 与 使用

    1. 直接去App Store 搜


      15681676430581.jpg
    2. 运行 InjectionIII


      15681678306425.jpg
    3. 在工程中添加代码
      在工程中

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    

    添加代码

     #if DEBUG
    //or oc
    [[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
    //or swift
    
    
    
    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
    
    1. 运行工程
      1. 会弹出提示框选择工程文件路径,或者手动选择工程路径
      2. 控制台会出现如下
    💉 Injection connected, watching /Users/diaohongrui/wandafilm-movie/**
    

    eg: 当更改背景颜色 刷新 comend + s 保存 就会实现热更新

    1. 运行原理
      InjectionIII 分为server 和 client部分,client部分在你的项目启动的时候会作为 bundle load 进去,server部分在Mac App那边,server 和 client 都会在后台发送和监听 Socket 消息,实现逻辑分别在 InjectionServer.mm 和 InjectionClient.mm 里的 runInBackground 方法里面。InjectionIII 会监听源代码文件的变化,如果文件被改动了,server 就会通过 Socket 通知 client 进行 rebuildClass 重新对该文件进行编译,打包成动态库,也就是 .dylib 文件。然后通过 dlopen 把动态库文件载入运行的 App 里,接下来 dlsym 会得到动态库的符号地址,然后就可以处理类的替换工作。当类的方法被替换后,我们就可以开始重新绘制界面了。整个过程无需重新编译和重载 App,使用动态库方式极速调试的目的就达成了。
      运行原理图


      15681706419624.jpg

    学习原著 https://mp.weixin.qq.com/s/yWfpzzyhTwMf8eAtdO7AFg

    相关文章

      网友评论

          本文标题:InjectionIII 使用 学习整理

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