iOS-UI调试利器-Injection

John Holdsworth 开发了一个叫作 Injection 的工具可以动态地将 Swift 或Objective-C 的代码在已运行的程序中执行,以加快调试速度,同时保证程序不用重启。

使用方法:

1、App Store下载Injectionlll。

2、项目工程配置。
在我们自己的工程 AppDelegate.swift 文件的 didFinishLaunchingWithOptions 方法中进行注入

Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle")?.load()

在ViewController里面写入injected方法,swift要写@objc。

@objc func injected() {
        viewDidLoad()
        self.view.backgroundColor = UIColor.orange
    }

写入你想要动态更改的代码

override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.lightGray
        
        self.view.addSubview(button)
        // 更改约束的时候没有清空之前的约束,会存在两个约束,造成约束冲突,所以先清空。若是不清空的话需要重新进入页面才能生效。
        button.snp.removeConstraints()
        button.snp.makeConstraints { (make) in
            make.centerX.equalToSuperview()
            make.top.equalTo(100)
            make.height.equalTo(30)
            make.width.equalTo(100)
        }
        button.setTitle("sdddd", for: .normal)
    }

3、开启监控。
打开Injectionlll,在菜单栏点击Injectionlll,下拉选中open Project,打开iOS工程目录。

遇到问题:

1、真机,cmd+s无效?
只支持模拟器调试。

2、swift不生效?
在swift中方法injected前要加@objc。

3、frame布局生效,snapkit约束不生效?
更改约束的时候没有清空之前的约束,会存在两个约束,造成约束冲突,所以先清空。若是不清空的话需要重新进入页面才能生效。

原理介绍:

启动了一个mac server监控工程目录,cmd+s的时候,获取injected方法内的代码,生成新的dylib文件,替换旧的动态链接库,实现即时刷新UI。

demo地址

你可能感兴趣的:(iOS-UI调试利器-Injection)