那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

iOS如何擁有 Flutter 熱重載極速調試

Android編程精選 ? 來源:Android編程精選 ? 2023-05-22 10:01 ? 次閱讀

1. Mac的App Store上下載安裝InjectionIII.

2. 打開InjectionIII, Open Project, 選擇你的項目目錄.

60fef6f4-f813-11ed-90ce-dac502259ad0.jpg

3. 選擇的項目會在Open Recent中出現, 保持File Watcher的選項勾選.

4. 在AppDelegate的DidFinishLaunchingWithOptions配置InjectionIII的路徑

-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{
//Overridepointforcustomizationafterapplicationlaunch.
#ifdefDEBUG

//InjectionIII注入
[[NSBundlebundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"]load];

#else

#endif
returnYES;
}

5. 在需要動態調試的頁面控制器中寫上injected方法, 把需要操作的UI方法添加到injected中執行, 如果想讓全部的控制器都能使用, 直接添加到BaseViewController.

//Objective-C:
-(void)injected{
#ifdefDEBUG
NSLog(@"I'vebeeninjected:%@",self);
[selfviewDidLoad];
#endif
}


//Swift
@objcfuncinjected(){
#ifDEBUG
print("I'vebeeninjected:(self)")
self.viewDidLoad()
#endif
}

6. 重新編譯項目, 控制臺可以看到

**InjectionIIIconnected/Users/***/Desktop/***/**/***.xcworkspace**
**Watchingfilesunder/Users/***/Desktop/****
//下面的只是警告,作者在Issue中已經解釋,不耽誤正常使用.
**YourprojectfileseemstobeintheDesktoporDocumentsfolderandmaypreventInjectionIIIworkingasithasspecialpermissions.**
61114afc-f813-11ed-90ce-dac502259ad0.jpg
7. 修改完UI, 直接cmd + S就能看到效果, 部分頁面可能耗時比較久或無法使用, 正常頁面均能使用.

enjoy :)

Flutter Hot Reload介紹

Flutter是Google開發的一個跨平臺開發框架, 調試也是快速實時的.

在Flutter編輯器中修改文字代碼后, 點擊reload, App不用重啟, 模擬器的內容就會立刻改變.

Flutter實現實時編譯的原理

Flutter會在點擊reload時取查看上次編譯以后改動過的代碼, 重新編譯涉及到的代碼庫.

重新編譯過的庫會轉換成內核文件發到Dart VM里, DartVM會重新加載新的內核文件,

加載后會讓Flutter framework觸發所有的Widgets和Render Objects進行重建、重布局、重繪.

Flutter為了能夠支持跨平臺開發, 使用了自研的Dart語言配合在App內集成Dart VM的方式運行Flutter程序.

iOS原生項目擁有Flutter熱重載的原理

Injection for XCode
GitHub地址:
https://github.com/johnno1962/InjectionIII

Injection工具可以動態地將iOS代碼在已運行的程序中執行, 不用重啟.

Injection會監聽源代碼文件的變化, 如果文件被改動了,

Injection Server就會執行rebuildClass重新進行編譯、打包成動態庫.dylib文件,

編譯、打包成動態庫后, 使用writeString方法通過Socket通知運行的App.

-(BOOL)writeString:(NSString*)string{
constchar*utf8=string.UTF8String;
uint32_tlength=(uint32_t)strlen(utf8);
if(write(clientSocket,&length,sizeoflength)!=sizeoflength||
write(clientSocket,utf8,length)!=length)
returnFALSE;
returnTRUE;
}

Server會在后臺發送和監聽Socket消息, Client也會開啟一個后臺去發送和監聽Socket消息.

Client接收到消息后會調用inject(tmpfile: String)方法, 運行時進行類的動態替換(新類動態替換舊類).

dlopen會把tmpfile動態庫文件載入運行的App里, 返回指針dl.

接下來, dlsym會得到tmpfile動態庫的符號地址, 然后就可以處理類的替換工作了.

當類的方法都被替換后, 我們就可以開始重新繪制界面了.

使用動態庫方式極速調試, 整個過程無需重新編譯和重啟App.

6126d0ca-f813-11ed-90ce-dac502259ad0.jpg

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • iOS
    iOS
    +關注

    關注

    8

    文章

    3399

    瀏覽量

    150991
  • 編譯
    +關注

    關注

    0

    文章

    661

    瀏覽量

    33046
  • flutter
    +關注

    關注

    0

    文章

    13

    瀏覽量

    453

原文標題:僅需 7 步,讓你的 iOS 原生項目擁有 Flutter 熱重載極速調試

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    鴻蒙Flutter實戰:01-搭建開發環境

    ; 如果要適配ios,需要安裝Xcode Mac 安裝(推薦) 環境變量配置 # Flutter Mirror export PUB_HOSTED_URL=https
    發表于 10-21 19:35

    鴻蒙Flutter實戰:04-如何使用DevTools調試Webview

    # 鴻蒙 Flutter 如何使用 DevTools 調試 Webview 在《鴻蒙 Flutter 開發中集成 Webview》,介紹了如果在 Flutter 中集成 Webvie
    發表于 10-22 21:53

    鴻蒙Flutter實戰:07混合開發

    。 其優點是主項目開發者可以不關注Flutter實現,不需要安裝配置Flutter開發環境,缺點是無法及時修改Flutter代碼,也不存在重載
    發表于 10-23 16:00

    鴻蒙Flutter實戰:08-如何調試代碼

    # 鴻蒙Flutter實戰:如何調試代碼 ## 1.環境搭建 參考文章[鴻蒙Flutter實戰:01-搭建開發環境](https://gitee.com/zacks
    發表于 10-23 16:29

    鴻蒙Flutter實戰:11-使用 Flutter SDK 3.22.0

    # 使用 Flutter SDK 3.22.0 ## SDK 安裝 參考[鴻蒙Flutter實戰:01-搭建開發環境]文章的說明,首先安裝 Flutter SDK 3.22.0。 目前鴻蒙化
    發表于 11-01 15:03

    鴻蒙Flutter實戰:12-使用模擬器開發調試

    前提 開發電腦需為M系列芯片 (ARM架構) 的 Mac 電腦 目前 Flutter 鴻蒙開發,無法使用 X86 架構的模擬器,只能使用 ARM 架構的模擬器** 創建項目 等開發環境搭建
    發表于 11-10 13:13

    鴻蒙Flutter實戰:14-現有Flutter 項目支持鴻蒙 II

    ;flutter_inappwebview\" 每次修改完 pubspec.yaml,使用 fvm flutter pub get 更新下依賴安裝。 運行調試 用 Deveco 打開apps
    發表于 12-26 14:59

    深入理解flutter的編譯原理與優化

    差別,關系如何,又是如何嵌入Android/iOS的呢?Flutter的渲染和事件傳遞機制如何工作?Flutter支持更新嗎?Flutter
    發表于 07-02 17:47

    Flutter的 1.0版本正式發布!Flutter是Google為您打造的UI工具包

    在 Google 內部,Flutter 已經被廣泛用于多個產品,比如 Google Ads 已經將其產品的 iOS 版本和 Android 版本轉向使用 Flutter。在正式版本之前,全世界已經有
    的頭像 發表于 12-07 11:09 ?5472次閱讀

    谷歌現已推出支持 iOS 14 和 Android 11 的最新版 Flutter

    谷歌現已推出支持 iOS 14 和 Android 11 的最新版 Flutter。全新 Flutter 1.22 距 1.20 版本發布僅有兩個月時間。
    的頭像 發表于 10-11 10:54 ?1943次閱讀

    原生開發如何學習Flutter

    給原生 Android/ iOS 開發介紹如何正確學習和使用 Flutter
    的頭像 發表于 02-18 18:43 ?1776次閱讀

    Flutter 3.3正式發布

    Impeller 是對 Flutter Engine 核心部分的一次重大重寫,使用一個定制的運行時環境來取代 Skia 代碼,并充分利用現代的硬件加速的圖形 API,如 iOS 上的 Metal 和 Android 上的 Vulkan。
    的頭像 發表于 09-06 10:49 ?861次閱讀

    Flutter 共創未來 | Flutter Forward 活動精彩回顧

    作者 / Google 開發者框架和語言 (含 Flutter、Dart 和 Go) 產品經理 用戶體驗總監 Tim Sneath 我們很高興可以在 Flutter Forward 活動 上分享我們
    的頭像 發表于 02-22 23:20 ?640次閱讀

    Flutter異步編程指南

    在 App 開發中,經常會遇到處理異步任務的場景,如網絡請求、讀寫文件等。Android、iOS 使用的是多線程,而在 Flutter 中為單線程事件循環,如下圖所示。
    的頭像 發表于 04-13 10:06 ?630次閱讀

    Flutter更新技術探索

    APP 發布到市場后,難免會遇到嚴重的 BUG 阻礙用戶使用,因此有在不發布新版本 APP 的情況下使用更新技術立即修復 BUG 需求。原生 APP(例如:Android & IOS)的
    的頭像 發表于 06-08 14:31 ?1134次閱讀
    <b class='flag-5'>Flutter</b><b class='flag-5'>熱</b>更新技術探索
    大发888 在线登陆| 真人百家乐官网澳门娱乐城| 百家乐靠什么赢| 皇冠娱乐| 网上百家乐作弊不| 武城县| 澳门百家乐怎赌才能赚钱| 崇阳县| 百家乐正负计| 百家乐官网网上投注系统| 澳门百家乐路单| 百家乐官网庄6点| 大发888娱乐场东南网| 罗盘24方位| 佛教| 永利百家乐娱乐网| 澳门百家乐官网游戏说明书| 威尼斯人娱乐城首选d77com| 榆次百家乐官网的玩法技巧和规则 | 红原县| 卢克索百家乐的玩法技巧和规则| 威尼斯人娱乐城网上百家乐| 荷规则百家乐官网的玩法技巧和规则 | 百家乐官网游戏类型| 百家乐光纤冼牌机| 百家乐官网赌博分析网| 姚记娱乐城安全| 百家乐高额投注| 太阳城百家乐官网试玩优惠 | 凱旋门百家乐的玩法技巧和规则| 百家乐官网suncity| 易胜娱乐| 网页百家乐的玩法技巧和规则| 百家乐官网科学打法| 丰禾国际娱乐城| 豪享博百家乐的玩法技巧和规则 | 乐博娱乐| 路单百家乐的玩法技巧和规则| 澳门百家乐官网赢钱公式不倒翁 | 大世界百家乐官网娱乐城| 大发888我爱好|