Flutter混編之路——iOS踩坑記錄

一粱甫、運行Xcode編譯或者flutter run/build 過程中報錯:"x86_64" is not an allowed value for option "ios-arch".


解決方案

在Debug.xcconfig中指定 “FLUTTER_BUILD_MODE=debug”,Release.xcconfig中指定“FLUTTER_BUILD_MODE=release”

錯誤分析

這看起來是在模擬器編譯環(huán)境下選擇了真機的Framework什么的,后來查詢發(fā)現(xiàn)是沒有設(shè)置這個變量。因為工程的Build Phases里運行了<"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh"?build>相關(guān)命令纤控,而xcode_backend里為build_mode變量設(shè)置了默認值"release",這使得在查找Flutter.framework等編譯所需的“原材料”時,默認選擇了release的目錄享钞,導(dǎo)致了這個錯誤,所以诀蓉,加上debug這個設(shè)置后嫩与,會去ios這個目錄中查找相關(guān)文件,就不會有問題了交排。附目錄截圖:

注:所在目錄 flutter/bin/cache/artifacts/engine/


二划滋、Flutter plugin not installed; this adds Flutter specific functionality.?Dart plugin not installed; this adds Dart specific functionality


解決方案

1.) Start the Android Studio application

2.) Open plugin preferences (Preferences>Plugins on macOS, File>Settings>Plugins on Windows & Linux).

3.) Select Browse repositories…, select the Flutter plug-in and click install .

4.) Click Yes when prompted to install the Dart plugin.

5.) Click Restart when prompted.

錯誤分析

如果你使用的是iOS開發(fā)環(huán)境或者沒有安裝Flutter插件的Android Studio,會報這個錯誤埃篓。Flutter是Google開發(fā)的移動開發(fā)SDK处坪,為了方便,基于自己的IDE開發(fā)了Flutter插件架专,以方便集成過程同窘。在Flutter生成雙端產(chǎn)物的時候,需要經(jīng)過插件做一些操作部脚。

三想邦、Android license status unknown


解決方案

執(zhí)行 “flutter doctor --android-licenses” 命令

會問你'Do you want to review the licenses?',輸入“y” 然后 回車委刘,這時再執(zhí)行一次flutter doctor就好了


四丧没、MissingPluginException(No implementation found for method xxx on channel xxx)


解決方案

方案一:flutter clean一下,再次 flutter run/build

方案二:將flutter run的進程終止掉重新 flutter run/build

方案三:看看你的FlutterPluginRegistrant產(chǎn)物是否存在锡移,是否更新了

錯誤分析

問題本質(zhì)是Plugin的方法沒有找到呕童,也可能是Plugin本身就沒有注冊成功。老版本的Flutter SDK遇到這個問題可能是沒有觸發(fā)GeneratedPluginRegistrant.register(this)淆珊,新版本的已經(jīng)不需要手動觸發(fā)了夺饲。


五、Waiting for another flutter command to release the startup lock


解決方案

rm ./flutter/bin/cache/lockfile

錯誤分析

原因是在flutter編譯等操作運行過程中施符,會創(chuàng)建一個文件鎖往声,但是由于一些原因鎖沒有釋放導(dǎo)致的,而且一直無法釋放……


六戳吝、'Flutter/Flutter.h' file not found


解決方案

方案一:如果集成方式是靜態(tài)庫(.a)浩销,需要在引用Flutter的工程中,修改Build settings中的Header Search Paths骨坑,將Flutter所在目錄加入其中撼嗓。

方案二:如果集成方式是動態(tài)庫(.framework)柬采,說明在引用Flutter的工程中并沒有依賴成功,需要檢查Flutter.framework包內(nèi)是否包含Headers文件夾且警,是否其中包含F(xiàn)lutter.h粉捻,另外就是Podspec和podfile是否正確。還有斑芜,Cocoapods必須1.5版本及以上肩刃。

方案三:如果你用的podspec.json,試試改寫成podspec(這個坑曾讓我浪費了幾天的時間……)


七杏头、error: cannot parse the debug map for xxx: No such file or directory


解決方案

依賴產(chǎn)物只針對 真機 盈包,但調(diào)試中使用了另一種 模擬器〈纪酰或者反過來了呢燥。

錯誤分析

真機和模擬器的平臺是不同的,符號也不同寓娩。


八叛氨、diff: /../Podfile.lock: No such file or directory


解決方案

方案一:重新pod install

方案二:刪除workspace、podfile.lock棘伴、Pods/寞埠、~/Library/Developer/Xcode/DerivedData

方案三:

1、運行sudo gem install cocoapods-deintegrate安裝快速解除項目cocopods依賴的庫

2焊夸、安裝成功后仁连,cd到你項目的更目錄運行pod deintegrate解除項目cocopods依賴

3、運行pod install,重新安裝cocopods

錯誤分析

Cocoapods的鍋……


九阱穗、Flutter Bitcode


解決方案

在podfile中禁止bitcode

錯誤分析

Flutter相關(guān)集成是不支持bitcode的饭冬,所以需要將相關(guān)產(chǎn)物的bitcode功能關(guān)閉。如果你的現(xiàn)有工程中倉庫眾多颇象,有的倉庫是必須bitcode的伍伤,這樣的話就需要每次pod install之后再在工程配置中手動設(shè)置回來,以下腳本放在podfile中可以解決此問題遣钳。

post_install do |installer|

????????installer.pods_project.targets.each do |target|

????????????????if target.name =="App" || target.name =="Flutter"

????????????????????????target.build_configurations.each do |config|

????????????????????????????????config.build_settings['ENABLE_BITCODE'] ='NO'

????????????????????????end

????????????????end

????????end

end


十、module importing failed: ('invalid syntax', ('temp.py',xxx


解決方案

執(zhí)行以下命令

brew update

brew uninstall --ignore-dependencies libimobiledevice ios-deploy cocoapods

brew uninstall --ignore-dependencies usbmuxd

brew install --HEAD usbmuxd

brew unlink usbmuxd

brew link usbmuxd

brew install --HEAD libimobiledevice

brew install ideviceinstaller ios-deploy cocoapods


十一麦乞、Flutter集成到現(xiàn)有工程后蕴茴,性能問題


解決方案

用Release產(chǎn)物集成

問題分析

為了實現(xiàn)Hot refresh功能,F(xiàn)lutter在Debug下做了很多工作姐直,影響了性能倦淀,可以通過修改

FLUTTER_BUILD_MODE的值("debug" => "release")

使用Release產(chǎn)物集成的方式屏蔽這部分影響。注意声畏,flutter_assets是需要同時更新的撞叽,Debug產(chǎn)物中含有kernel_blob.bin文件姻成,Release產(chǎn)物則沒有。


十二愿棋、iOS系統(tǒng)中科展,第一次從Native跳轉(zhuǎn)到Flutter頁面時,會出現(xiàn)LaunchScreen


解決方案

采用繼承糠雨、Category同名方法等方式才睹,覆蓋FlutterViewController的splashScreenView的get方法,直接返回成員變量甘邀,將中間的讀取LaunchScreen頁面過程覆蓋掉琅攘,甚至可以自定義自己的邏輯。

問題分析

Flutter的渲染是異步的松邪,第一次加載需要創(chuàng)建Application和頁面坞琴,無法及時返回結(jié)果,所以Flutter自己把這部分邏輯加到了SDK內(nèi)部逗抑,其實是為了解決 “純Flutter App首屏白屏” 問題剧辐,但給我們這種混編的App帶來了麻煩。


以上是我們到目前為止遇到的主要坑位锋八,以及解決方案和原因分析浙于,F(xiàn)lutter無論從性能還是人效方面來講,都會在熟悉之后節(jié)省不少成本挟纱,希望各位能從我們的經(jīng)驗中節(jié)省更多寶貴的時間羞酗。同時,也希望大家把更多的埋坑記錄發(fā)到評論里紊服,幫助友隊一起學(xué)習(xí)檀轨,一起成長。歡迎技術(shù)交流欺嗤!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末参萄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子煎饼,更是在濱河造成了極大的恐慌讹挎,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吆玖,死亡現(xiàn)場離奇詭異筒溃,居然都是意外死亡,警方通過查閱死者的電腦和手機沾乘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門怜奖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翅阵,你說我怎么就攤上這事歪玲∏ㄑ耄” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵滥崩,是天一觀的道長岖圈。 經(jīng)常有香客問我,道長夭委,這世上最難降的妖魔是什么幅狮? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮株灸,結(jié)果婚禮上崇摄,老公的妹妹穿的比我還像新娘。我一直安慰自己慌烧,他們只是感情好逐抑,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屹蚊,像睡著了一般厕氨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汹粤,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天命斧,我揣著相機與錄音,去河邊找鬼嘱兼。 笑死国葬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芹壕。 我是一名探鬼主播汇四,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼踢涌!你這毒婦竟也來了通孽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤睁壁,失蹤者是張志新(化名)和其女友劉穎背苦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體潘明,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡糠惫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了钉疫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡巢价,死狀恐怖牲阁,靈堂內(nèi)的尸體忽然破棺而出固阁,到底是詐尸還是另有隱情,我是刑警寧澤城菊,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布备燃,位于F島的核電站,受9級特大地震影響凌唬,放射性物質(zhì)發(fā)生泄漏并齐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一客税、第九天 我趴在偏房一處隱蔽的房頂上張望况褪。 院中可真熱鬧,春花似錦更耻、人聲如沸测垛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽食侮。三九已至,卻和暖如春目胡,著一層夾襖步出監(jiān)牢的瞬間锯七,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工誉己, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眉尸,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓巫延,卻偏偏與公主長得像效五,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子炉峰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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