在iOS原生項目中使用Flutter拗胜,熱重載

前言:
Flutter 因其自建的渲染引擎灵汪,背靠谷歌的支持檀训,近來俘獲了不少的開發(fā)小伙伴,越來越多的開發(fā)者嘗試使用Flutter進行開發(fā)享言,在原生項目中嵌入Flutter來完成復(fù)雜度不高的頁面成為了一個不錯的選擇峻凫。本篇文章記錄了一次在原生項目中嵌入Flutter的過程。

準備工作:搭建好 Flutter 的開發(fā)環(huán)境
[簡書抽風(fēng)可能無法顯示]

在原生項目中加入Flutter模塊

之前網(wǎng)上對混合開發(fā)有一些現(xiàn)成的庫览露,目前效果不是很理想荧琼,本文采用的是官方文檔中的方法。

1. 創(chuàng)建 Flutter 模塊

到需要創(chuàng)建模塊的文件夾下(本文為原生項目下)差牛,執(zhí)行創(chuàng)建模塊的命令:

$: flutter create --template module flutter_moudle
// 此處根據(jù)網(wǎng)絡(luò)狀況可能會耗時很久命锄,耐心等待即可。

創(chuàng)建成功后偏化,能在目下看到一個 flutter_moudle 的文件:

flutter_moudle文件結(jié)構(gòu)

Tips:

  1. 使用"shift+cmd+."可查看文件夾隱藏文件


2. 配置 Flutter 模塊

官方在項目中啟用Flutter模塊提供了多種方法脐恩,本文主要介紹其中兩種:


(1)方法1: CocoaPods

在Podfile中添加定義,并配置對應(yīng)的Target

添加如下兩句到定義:
# flutter模塊的路徑(本文的flutter模塊與Podfile在同一目錄下)
flutter_application_path = 'flutter_moudle' 

# 加載podhelper.rb
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb’)

# 配置對應(yīng)Target:
target 'MyApp' do
  install_all_flutter_pods(flutter_application_path)
end

添加完畢后執(zhí)行更新項目的pod

$: pod install

完成后打開原生項目的 xxx.xcworkspace 侦讨,可以看到Pods新增DevelopmentPods文件:


DevelopmentPods

(2)方法2: Framework
進入到我們第一步創(chuàng)建的Flutter組件的文件中驶冒,將相應(yīng)的模塊添加到原生項目的Framework即可,對應(yīng)模塊為:

  • flutter.framework (路徑:/flutter_moudle/.ios/Flutter/App.framework)
  • app.framework (路徑:/flutter_moudle/.ios/Flutter/engine/Flutter.framework)
Framework

使用兩種方法任何一種均可韵卤,配置完成后執(zhí)行編譯(cmd+b)骗污,編譯成功后表示我們已經(jīng)成功將Flutter加入到了原生項目中。

Tips1:
【Bitcode 相關(guān)】
默認情況下沈条,原生項目是開啟了Bitcode選項的需忿,而 Flutter 目前并不支持,需要手動關(guān)閉(Build Setting -> Enable Bitcode 設(shè)置為 NO)

Tips2:**
【編譯報錯:Command PhaseScriptExecution failed with a nonzero exit code】**:
這個錯誤發(fā)生在原生項目的文件名改變后,錯誤信息還提示了“flutter/XXXX/XXX no such file found”的內(nèi)容屋厘,說明找不到Flutter路徑了汞扎,我們看到在 .ios/Flutter/Generated.xcconfig 中看到了Flutter的各種路徑,而我們改變文件名后擅这,還需要更新Flutter配置澈魄,可在 “.ios” 目錄下使用自動更新命令:
$: flutter pub get

Tips3:**
【編譯卡死在:/Users/xurenjie/Desktop/AppStore/ProjectName/flutter_moudle/.ios/Flutter/flutter_export_environment.sh: line 8: inherited: command not found】**
該問題在多次編譯項目后出現(xiàn),頻率較高仲翎,可臨時通過清除項目緩存解決痹扇。


使用Flutter

預(yù)熱并配置 Flutter 引擎
AppDelegate
調(diào)用Flutter頁面

然后在需要展示 Flutter 頁面的時候使用 FlutterViewController:


跳轉(zhuǎn)Flutter頁面

至此,我們就完成了在原生應(yīng)用中加入Flutter模塊的配置


熱重載

熱重載是 Flutter 的一大特性溯香,在VSCode鲫构,AndroidStudio中開發(fā)時可以很容易的使用,而在Xcode下玫坛,打開熱重載的方式:

[方法1]

此方法必須等APP中成功啟動了FlutterEngin后才能生效结笨,本文的FlutterEngin在AppDelegate中項目啟動時就啟動了,所以運行項目后湿镀,可直接在flutter模塊的文件中(本文模塊文件為flutter_moudle)運行命令:

$ flutter attach

調(diào)試時需要使用:

$ flutter attach --isolate-filter='debug'
[方法2]

此方法可以等待項目中的flutter engin啟動炕吸,不同1那種需要在啟動的情況下才可以啟用:
在VSCode中運行:

$ Attach to Flutter on Device

Tips:
【isolate相關(guān)錯誤】
需要在main.dart的main函數(shù)添加如下設(shè)置:

isolate錯誤解決方式


總結(jié)

  • 可以看到,將Flutter加入到原生項目中非常簡單勉痴。
  • Flutter 也給項目的開發(fā)增加了復(fù)雜度赫模,一方面使得開發(fā)團隊必須形成規(guī)范,以在Android蒸矛、iOS瀑罗、Flutter、Web均存在的項目中不會發(fā)生混合開發(fā)的坑雏掠。
  • Flutter的優(yōu)點在于一次開發(fā)斩祭,多處使用,且借助其自建引擎在不同平臺上都有接近于原生的表現(xiàn)乡话。
  • 明顯的是摧玫,引入Flutter會明顯直接增大包體積
  • 加入Flutter的原生項目的編譯速度降低蚊伞,尤其是初次編譯非常明顯席赂,不嚴謹?shù)挠眯№椖繙y試多次,加入前初次編譯不到20s左右时迫,而加入后最長的一次等待了5分鐘颅停,(可能是提醒我該換電腦了)。
  • 鑒于上述情況掠拳,將Flutter加入開發(fā)中癞揉,需要根據(jù)項目當(dāng)下的實際情況(團隊成員技術(shù)構(gòu)成,項目業(yè)務(wù)特點等等)確定,不可一概而論喊熟,也不可能一勞永逸柏肪。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者芥牌。
  • 序言:七十年代末烦味,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子壁拉,更是在濱河造成了極大的恐慌谬俄,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弃理,死亡現(xiàn)場離奇詭異溃论,居然都是意外死亡,警方通過查閱死者的電腦和手機痘昌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門钥勋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辆苔,你說我怎么就攤上這事算灸。” “怎么了姑子?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵乎婿,是天一觀的道長。 經(jīng)常有香客問我街佑,道長,這世上最難降的妖魔是什么捍靠? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任沐旨,我火速辦了婚禮,結(jié)果婚禮上榨婆,老公的妹妹穿的比我還像新娘磁携。我一直安慰自己,他們只是感情好良风,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布谊迄。 她就那樣靜靜地躺著,像睡著了一般烟央。 火紅的嫁衣襯著肌膚如雪统诺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天疑俭,我揣著相機與錄音粮呢,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛啄寡,可吹牛的內(nèi)容都是我干的豪硅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼挺物,長吁一口氣:“原來是場噩夢啊……” “哼懒浮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起识藤,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤嵌溢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蹋岩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赖草,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年剪个,在試婚紗的時候發(fā)現(xiàn)自己被綠了秧骑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡扣囊,死狀恐怖乎折,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侵歇,我是刑警寧澤骂澄,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站惕虑,受9級特大地震影響坟冲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溃蔫,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一健提、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伟叛,春花似錦私痹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侥蒙,卻和暖如春暗膜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辉哥。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工桦山, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留攒射,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓恒水,卻偏偏與公主長得像会放,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钉凌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容