美文网首页IOS知识积累iOS开发
iOS-UI调试利器-Injection

iOS-UI调试利器-Injection

作者: 笑破天 | 来源:发表于2020-10-15 17:52 被阅读0次

    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

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