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地址

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。