項目越來越大,代碼編譯時間越來越長刊侯,你是不是早已經(jīng)厭倦了改一點點UI布局就要重新編譯一次項目的過程章办,我們一分鐘幾百萬上下的,怎能被編譯浪費掉珍貴的時間滨彻。
來不及解釋了藕届,快上車...哦不,讓我們來嘗試使用injectionforxcode這款插件亭饵,提高我們編程時的效率休偶。
先上插件的GitHub地址:injectionforxcodeGitHub地址
效果圖
如果不喜歡看文字,可以觀看下CocoaPods的主要貢獻者之一Orta Therox(@orta)錄制的一段使用視頻辜羊,說得也比較有趣踏兜,會讓你有感同身受的感覺。視頻鏈接(需要科學(xué)上網(wǎng)姿勢)
安裝
下載插件后在目錄下進入InjectionPluginLite文件夾八秃,并運行InjectionPlugin.xcodeproj后重啟Xcode碱妆。
再次打開Xcode我們可以看到Product菜單下多出了兩個選項
這樣我們就安裝成功了,讓我們來新建一個工程測試一下這個插件的效果怎么樣昔驱。
實驗
我們在ViewController中放入一個Label在viewDidLoad中給它賦值
- (void)viewDidLoad {
[super viewDidLoad];
[self.testLabel setText:@"FuhanyuTestString"];
}
然后我們修改viewDidLoad方法中的代碼
- (void)viewDidLoad {
[super viewDidLoad];
[self.testLabel setText:@"FuhanyuTestString"];
[self.testLabel setText:@"OtherTestString"];
}
按Control + = 后出現(xiàn)一個進度條疹尾,但Label的值并未發(fā)生改變。并且在日志中出現(xiàn)以下警告
于是我去gitHub的issues中逐個閱讀發(fā)現(xiàn)了相同的問題my injection doesn't work
而插件作者給出的回答是
也就是說需要重新在injected這個方法中調(diào)用viewDidLoad方法就可以實現(xiàn)了
- (void)injected{
[self viewDidLoad];
}
那么對于警告怎么解決呢骤肛。我在另一個issues中找到了回復(fù)
你可以無視他纳本。。萌衬。
讓我們來嘗試一下改變后是否有效 Control + =
搞定收工饮醇,大家晚安。
補充內(nèi)容
有一位朋友提出沒寫那個變量控制面板的東西怎么使用秕豫,今晚研究了一下在此補充下朴艰。
閱讀了怎么使用tunable_parameters后我在原有的OC工程中運行試驗,顯示引用的
#import "/tmp/injectionforxcode/BundleInterface.h"
文件中有一處錯誤混移,更改后還一直有一個編譯錯誤無法解決祠墅。
于是按照文章中使用了Swift創(chuàng)建了一個工程,來試驗歌径。
如果使用控制面板毁嗦,需要點擊product->injection plug in -> path project injection 。
這樣我們就自動添加了如下代碼到main.m中
#ifdef DEBUG
#define INJECTION_ENABLED
#import "/tmp/injectionforxcode/BundleInterface.h"
#endif
由于在Swift中沒有main.m所以我們手動創(chuàng)建并且橋接它
我們也可以點進去看這個類提供的方法
@interface NSObject(INParameters)
+ (INColor * INJECTION_STRONG *)inColors;
+ (INColor *)inColor:(int)tag;
+ (float *)inParameters;
+ (float)inParameter:(int)tag;
+ (void)inSetDelegate:(id)delegate forParameter:(int)tag;
+ (void)inSetTarget:(id)target action:(SEL)action forColor:(int)tag;
@end
然后我們在Swift中加入這段代碼
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var testLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let doubleNumber = 1.322
self.testLabel.text = "\(doubleNumber)"
NSObject.inSetDelegate(self, forParameter: 0)
}
override func inParameter(tag: Int32, hasChanged value: Float) {
self.testLabel.text = "\(value)"
}
// override func inColor(tag: Int32, hasChanged value: AnyObject!) {
// self.testLabel.backgroundColor = value
// }
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
效果圖
這樣可以在不編譯的情況下更方便直觀的調(diào)試一些東西吧回铛,其他用法比如我注釋掉那行顏色那個狗准,因為不是很了解Swift就沒有試驗成功克锣。