Injection可以做到不用重新編譯代碼就可以看到結(jié)果谬返。對于調(diào)試細節(jié)能節(jié)省很多時間。
Injection使用步驟够掠、Xcode版本10.2.1
1.AppStore下載Injectionlll
2.在didFinishLaunchingWithOptions添加下面代碼
#if DEBUG
BOOL loadSuccess = [[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
NSLog(@"loadSuccess");
#endif
3.在需要變更的類中添加injected
- (void)injected{
[self viewDidLoad];
}
4.變更后直接Ctrl+S.非常方便碳默。
實現(xiàn)原理
Injection會監(jiān)聽源代碼文件的變化挠日,如果文件被改動了宝磨,Injection Server就會執(zhí)行rebuildClass重新進行編譯弧关、打包成動態(tài)庫,也就是.dylib唤锉。
dlopen會把tmpfile動態(tài)庫文件載入運行的App里世囊,返回指針dl。接下來窿祥,dlsym會得到tmpfile動態(tài)庫的符號地址株憾,然后就可以處理類的替換工作。
當類的方法都被替換后壁肋,我們就可以開始重新繪制界面了号胚。整個過程無需重新編譯和重啟App,至此使用動態(tài)庫方式極速調(diào)試的目的就達成了。
Injection缺點
1.對于簡單的變更效率是非常高的浸遗,如果是復雜的操作,還是要重新編譯的箱亿。
2.對于新增文件跛锌、或xib拖入的變量,可能會產(chǎn)生崩潰届惋。感覺不是很穩(wěn)定髓帽。
3.對于OC與Swift混編的,支持的也不如人意脑豹。
總結(jié):
1.對于電腦配置不是很高郑藏,而項目又比較大的同學,真是省時省力瘩欺。同樣對于調(diào)試細節(jié)的同學也有極大的幫助必盖。
2.希望工具越來越完善拌牲,有任何問題歡迎留言評論
參考文章:《戴銘 高手課》第6章App如何通過注入動態(tài)庫的方式實現(xiàn)極速編譯調(diào)試。