iOS: Xcode熱加載/部署-無侵入配置

效果:

代碼在保存之后,立馬在模擬器上看到修改后的效果,
避免Command+R重新編譯耗費時間的問題;
如果APP頁面層級太深的話,傳統(tǒng)調(diào)試要一步步點進到指定頁面,
使用該方案直接就能看到效果,所見即所得。


昨天被同事用flutter項目的熱部署效果給刺激了一下,被秀之余想到:他用個雜交品種能熱部署,而我用蘋果親兒子沒道理不行?。?br> 所以花了一個上午時間,俺終于找到了這個成噸減少工作量的方案。

超級簡單,只有三步:
1、一個工具
2、選定項目目錄
3、把一個文件放到項目中

無需其他任何配置,不對項目結(jié)構(gòu)造成任何侵害。


1、工具下載 InjectionIII

InjectionIII 是我們需要用到個一個工具,不要因為要用一個工具而厭煩這個方案,它很簡單。
它是免費的,app store 搜索:InjectionIII,Icon是 一個針筒。
也是開源的,GitHub鏈接: https://github.com/johnno1962/injectionforxcode

2、配置路徑

打開InjectionIII工具,選擇Open Project,選擇你的代碼所在的路徑,然后點擊Select Project Directory保存。

image.png
image.png

注意:InjectionIII 的File Watcher選項要保持選中狀態(tài)。

3、導(dǎo)入配置文件(可選)

這步我簡單寫了一個配置文件,直接 GitHub下載 導(dǎo)入項目即可。

如果你比較反感下載文件也可以自己處理:

1.設(shè)置AppDelegate.m
打開你的工程,在AppDelegate.m的didFinishLaunchingWithOptions方法按類型添加兩行代碼:

#if DEBUG
    // iOS
    [[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
    // tvOS
    //[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/tvOSInjection.bundle"] load];
    // macOS
    //[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/macOSInjection.bundle"] load];
#endif

2.設(shè)置ViewController

在的修改界面ViewController添加方法- (void)injected,或者給ViewController類擴展添加方法- (void)injected。

方法里寫上刷新的動作:viewDidLoad 或者 其他更多方法。

- (void)injected
{    
  //自定義修改...
  //重新加載view    
  [self loadView];
  [self viewDidLoad];
  [self viewWillLayoutSubviews];
  [self viewWillAppear:NO];
}

3、懶加載和其他異常的處理

  • 配置包做了修改view的刷新,代碼不多,但是比你自己寫方便,推薦你下載了拖進去。
  • 因為適用范圍的關(guān)系[self loadView] 需要慎重調(diào)用。
  • 懶加載的view 配置包是識別不了,需要自己在VC里手動處理,事例代碼:
- (void)injected {
    [_tableView removeFromSuperview];
    _tableView = nil;
    [self viewDidLoad];
}

4、啟動項目,修改驗證

在Xcode Command+R運行項目 ,看到Injection connected 提示即表示配置成功。
如果沒有,確實一下 第2步是不是對了。

image.png

在需要修改的頁面,修改控件UI,然后Command+S保存一下代碼,立刻就在模擬器上顯示修改的信息了。

??注

  • 工程路徑中最好不要有中文,目前只處理了view和vc中的保存刷新,并且對部分xib控件無效。
  • Bundle 路徑跟xcode路徑和工具路徑相關(guān),不過一般不用更換。
  • 編譯復(fù)雜的項目可能會崩潰,不要放棄,調(diào)整一下injected時調(diào)用的方法,調(diào)通后效率提升不止一倍。
  • 有朋友反應(yīng)使用RAC + MVVM injected 方法注冊會崩潰,可使用 INJECTION_BUNDLE_NOTIFICATION 通知來監(jiān)聽 編譯更新,后續(xù)我會完善更新。

工具使用中如有問題可以參考github上的過往經(jīng)驗,也歡迎留言我們一起討論。

配置文件git:https://github.com/ZHSY/InjectionIIIHelper

工具git地址:https://github.com/johnno1962/injectionforxcode 也可appstore 直接下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 3,122評論 1 3
  • 自用收藏 原文:http://www.th7.cn/Program/IOS/201606/884245.shtml...
    西瓜皮奧特曼閱讀 2,345評論 0 16
  • 圖文/蘭妮.逞 我家小子10歲了,又黑又瘦卻愛笑。自行車滑板輪滑樣樣愛,在家只把電視開,就是不把書來看。 10歲的...
    lannychen閱讀 914評論 11 13
  • 成長是一道傷痕,沒有傷疤,卻更加深刻。 時間總是會給我們解答所有迷惘的不解的。就像是高聳的老樹,都是在風(fēng)雨中晃來晃...
    浮夢生閱讀 596評論 0 1
  • 一、那么我們就從最簡單的環(huán)境搭建開始: 安裝node.js,從node.js官網(wǎng)下載并安裝node,安裝過程很簡單...
    world_7735閱讀 8,864評論 0 2

友情鏈接更多精彩內(nèi)容