美文网首页Swift编程Swift学习之旅swift
InjectionIII -- iOS的UI调试的黑魔法

InjectionIII -- iOS的UI调试的黑魔法

作者: 何以消摇 | 来源:发表于2019-01-15 18:58 被阅读5次

    问题

    如果用纯代码写iOS 的UI,往往不能一次达到效果,不断的修改UI代码不可避免,特别是射鸡狮们死亡缠绕的时候,改一行代码运行一下,等几分钟,看下效果,然后重复n次这个动作。编译过程在上述过程中十分耗时,而安卓前端等都是修改完之后立刻能看到效果,所以相同水平的iOS开发效率比安卓慢不少。

    思路

    1、用xib和sb

    这种方案能满足大部分需求,但是动态改变UI时就没那么好用。而且sb在多人开发时的维护成本比较高,所以笔者没有采用这种方案

    2、InjectionIII

    InjectionIII 是github上的一个开源项目,通过运行时替换代码达到动态刷新UI的目的

    解决方案

    步骤

    1、 App Stroe 中下载 InjectionIII
    2、在项目AppDelegate中的didFinishLaunchingWithOptions方法中添加加载代码

     #if DEBUG
           Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection10.bundle")?.load()
           #endif
    

    3、给UIViewController 和 UIView 添加@objc injected 方法,在UIViewController与UIView中点击刷新会走该方法,通过删除重新加载子控件达到刷新目的

    import Foundation
    import UIKit
    
    extension UIViewController {
        #if DEBUG
        @objc open func injected() {
            print("injected UIViewController")
            for subview in view.subviews {
                subview.removeFromSuperview()
            }
            viewDidLoad()
        }
        #endif
    }
    
    extension UIView {
        #if DEBUG
        @objc open func injected() {
            print("injected UIView")
            //find now VC
            guard let nowVC = UIApplication.shared.keyWindow?.rootViewController else {
                return
            }
            for subV in nowVC.view.subviews {
                subV.removeFromSuperview()
            }
            nowVC.viewDidLoad()
        }
        #endif
    }
    
    

    4、打开 InjectionIII, 选中自己的项目

    打开InjectionIII
    5、动态修改 viewDidLoad的中的代码,点击command + s 查看效果 效果图

    项目github地址

    swift4 以上 : InjectionIII
    oc 及 swift4 以下: injectionforxcode

    相关文章

      网友评论

        本文标题:InjectionIII -- iOS的UI调试的黑魔法

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