你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> Injection for Xcode:成噸的提高開發效率

Injection for Xcode:成噸的提高開發效率

編輯:IOS開發基礎

本文為投稿文章,作者:@沒故事的卓同學

今天強烈推薦一個Xcode高端必備插件:Injection Plugin for Xcode

直接放demo演示動圖:

225849-2774ad82cd157ca0.gif

我很久以前就希望有這麼一種功能,直接修改某行代碼,F5一下就能刷新這個實例,而不用重寫build整個項目。靠夭,我不是在說前端!

沒想居然有一天,夢想照入現實!!!是的,就是它,不用重新啟動應用就可以讓修改的代碼生效。

使用

超級簡單:修改源碼,按下刷新的快捷鍵ctrl+=。會有一個快速的進度條閃過,修改的代碼就**生效了。**

安裝

  • 可以使用Alcatraz安裝

  • 或者clone這個項目,運行InjectionPluginLite/InjectionPlugin.xcodeproj。

檢驗安裝成功

在某個類裡添加下面的方法:

(void)injected{
   NSLog(@"I've been injected: %@", self);
   
   
}

或者swift下:

func injected() {
   print("I've been injected: (self)")
}

打一個斷點在這行代碼上,按下快捷鍵ctrl+=後,代碼執行到這個類時,如果斷點進入這個方法說明你已經安裝成功了。

支持Swift

Swift中的大部分類都可以正常使用。不過以下一些情況使用會有問題:

  • 結構中的修改

  • 標記為final的func和class

  • 不在類裡的全局函數和變量

工作原理

Injection是一個Xcode的擴展插件,可以讓你修改一個類的代碼實現而不用重啟整個應用。

它通過解析應用的build日志來判斷源代碼文件上次是怎麼被編譯的。然後會把這些重新編譯一遍包在一個已經通過動態加載器(dynamic loader)注入到應用的bundle裡。這個時候其實有兩個版本的類在app裡,一個原始的和一個修改過的版本。修改過的版本通過和原始類"swizzled"來產生效果。

swizzling利用了OC的runtime。這個也可以在Swift中沒有標記為final或者private的方法(可以被override的方法)。對結構體無效。

這個插件還可以做點什麼

  • 按照這個文檔操作,還可以支持Storyboard [Storyboard-based iOS projects]

  • 可以可視化的調整顏色 [collection of tunable parameters]

  • 當你開始注入時,會在同一個目錄下生成一個項目文件:iOSInjectionProject 或者 OSXInjectionProject。這個項目用於注入你的修改到原項目。建議加入.gitignore

  • ctrl+=的快捷鍵可以在 "Tunable App Parameters"面板裡自定義

  • 如果想在一台設備上使用,參考這個文檔[patch to your project]

我安裝時遇到的一個錯誤

第一次使用,提示我項目裡使用的一個第三方framework找不到。這個時候打開它自動生成的iOSInjectionProject,編譯一下可以看到錯誤的具體原因。我看到issue裡也好多人遇到。解決方式就是將自己項目framework search paths中的這個第三方框架的路徑拷貝到iOSInjectionProject裡。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved