美文网首页iOS开发
injectionIII:让iOS开发调试实现热重载

injectionIII:让iOS开发调试实现热重载

作者: 一茶壶茶 | 来源:发表于2018-06-14 11:24 被阅读2736次

    大家在项目开发的时候,特别是UI调试,一个小小的改动就要重新运行整个项目,开发3秒钟,运行5分钟。如果了解过 React Native 开发的应该知道,React Native 调试方式热重载(Hot Reload),只要改动代码,就可以实时看到效果,对于UI调试来说,简直是成吨提升开发效率。

    在 iOS 开发中利用 injectionIII 也可以帮我们实现热重载,写好代码后,我们不需要重新运行 Xcode 就可以看到我们改动代码之后的效果。

    安装

    App Store 安装

    使用

    1. 安装好之后,在应用程序中找到 injectionIII 打开。

    2. 打开项目,在 AppDelegate 文件的 didFinishLaunchingWithOptions方法中添加如下代码

    OC:

    #if DEBUG
    
      // for iOS
     [[NSBundle  bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
    
      // for tvOS
     [[NSBundle  bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/tvOSInjection.bundle"] load];
    
      // for masOS
     [[NSBundle  bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/macOSInjection.bundle"] load];
    
    #endif
    

    Swift:

    #if DEBUG
    
        // for iOS
        Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle")?.load()
        
        // for tvOS:
        Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/tvOSInjection.bundle")?.load()
        
        // for macOS:
        Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/macOSInjection.bundle")?.load()
        
    #endif
    
    1. 在需要进行调试的类中(任意继承自OC的类)加入如下代码

    OC:

    - (void)injected {
        NSLog(@"I've been injected: %@", self);
        //调试的代码
    }
    

    Swift:

    @objc func injected() {
        print("I've been injected: (self)")
        //调试的代码
    }
    
    1. 添加完上边代码后,快捷键 COMMAND + R 运行项目。然后我们就可以在 - (void)injected 方法中随意更改代码,每次改完之后在当前文件下按下 COMMAND + S 快捷键重载,就可以在模拟器看到更改代码之后的效果。根本不需要重新运行整个项目。

    对原理感兴趣的可以看下这篇文章:
    Injection:iOS热重载背后的黑魔法

    相关文章

      网友评论

        本文标题:injectionIII:让iOS开发调试实现热重载

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