iOS 項(xiàng)目借助【InjectionIII】實(shí)現(xiàn)“熱重載” (hot reload)

熱重載:不用重新運(yùn)行工程,只需要保存一下,即可實(shí)現(xiàn)實(shí)時(shí)預(yù)覽的效果,大大提高編程的效率。

最近可以熱重載的技術(shù)棧包括:

  • 2019WWDC推出的SwiftUI
    局限性在于,只支持iOS13.0及以上,照目前絕大多數(shù)最低支持iOS8.0及以上來(lái)看,這估計(jì)要等Apple出到iOS18甚至更高的系統(tǒng)版本時(shí)才會(huì)普及,那不黃瓜菜~,目前iOS 13支持的機(jī)型如下:iPhone 更高、iPhone 11 Pro Max、iPhone 11 Pro、iPhone 11、iPhone XS、iPhone XS Max、iPhone XR、iPhone X、iPhone 8、iPhone 8 Plus、iPhone 7、iPhone 7 Plus、iPhone 6s、iPhone 6s Plus、iPhone SE、iPod touch(第 7 代);iOS 13對(duì)設(shè)備的要求進(jìn)一步提高,手機(jī)需要iPhone SE以上,這意味著,iPhone 5s、iPhone 6/6 Plus等機(jī)型將無(wú)緣 iOS 13系統(tǒng);期待既然不是硬件的問(wèn)題兼容到iOS8或者iOS9未嘗不可,畢竟那么多蘋(píng)果用戶還是喜歡老而穩(wěn)定的系統(tǒng)的。
  • Flutter Live 2018 上,Google 宣布 Flutter 1.0 正式發(fā)布

現(xiàn)有的iOS項(xiàng)目實(shí)現(xiàn)熱重載:

局限性:只能在debug狀態(tài)模擬器上可用。
1.mac電腦AppStore下載InjectionIII,之后打開(kāi);
2.打開(kāi)項(xiàng)目在AppDelegate.m中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    #if DEBUG
        [[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
    #endif
}

3.在待調(diào)試的頁(yè)面exampleViewController.m中寫(xiě)下這個(gè)方法:
- (void)injected這個(gè)方法內(nèi)的代碼一保存就會(huì)熱重載。

- (void)injected{
    [self configUI];
}
- (void)configUI{
    //do somthing ...
    在這里修改UI樣式
}

4.運(yùn)行工程
會(huì)彈出一個(gè)彈窗提示你選擇project的文件夾,然后你就選擇你工程的文件夾目錄即可:


選擇工程文件夾

然后成功的話就出現(xiàn)這兩行:

?? Injection connected ??
?? Watching /Users/xxx/demo/**

5.寫(xiě)代碼:

- (void)injected{
    [self configUI];
}
- (void)configUI{
    //do somthing ...
    self.titleLabel.text = @"test";
}

cmd+s立即出效果:

test

- (void)injected{
    [self configUI];
}
- (void)configUI{
    //do somthing ...
    self.titleLabel.text = @"寫(xiě)代碼";
}

cmd+s立即出效果:

寫(xiě)代碼

?? *** Compiling /Users/xxx/demo/xxx/Project/xxx/xxx.m ***
?? Loading .dylib ...
objc[60350]: Class exampleViewController is implemented in both /Users/xxx/Library/Developer/CoreSimulator/Devices/FAE2FCF2-989D-49D0-8F14-AB5C8A2BA5D1/data/Containers/Bundle/Application/D1715016-A956-4B60-98E1-7BE3FDAFF6DE/LifeVC.app/LifeVC (0x105549980) and /Users/xxx/Library/Containers/com.johnholdsworth.InjectionIII/Data/eval102.dylib (0x13c0182d8). One of the two will be used. Which one is undefined.
?? Loaded .dylib - Ignore any duplicate class warning ^

這樣就不用做一個(gè)小改動(dòng)就cmd+R重新編譯運(yùn)行代碼了,大大節(jié)省不必要的時(shí)間浪費(fèi),攢下的時(shí)間給到邏輯書(shū)寫(xiě)和保證代碼質(zhì)量方面豈不美哉。共勉之吧~????

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

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