• <ul id="cgeq2"></ul>
  • 歡迎您光臨深圳塔燈網絡科技有限公司!
    電話圖標 余先生:13699882642

    網站百科

    為您解碼網站建設的點點滴滴

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

    發表日期:2018-11 文章編輯:小燈 瀏覽次數:12969

    一、運行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”

    錯誤分析

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

    注:所在目錄 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開發環境或者沒有安裝Flutter插件的Android Studio,會報這個錯誤。Flutter是Google開發的移動開發SDK,為了方便,基于自己的IDE開發了Flutter插件,以方便集成過程。在Flutter生成雙端產物的時候,需要經過插件做一些操作。

    三、Android license status unknown


    解決方案

    執行 “flutter doctor --android-licenses” 命令

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


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


    解決方案

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

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

    方案三:看看你的FlutterPluginRegistrant產物是否存在,是否更新了

    錯誤分析

    問題本質是Plugin的方法沒有找到,也可能是Plugin本身就沒有注冊成功。老版本的Flutter SDK遇到這個問題可能是沒有觸發GeneratedPluginRegistrant.register(this),新版本的已經不需要手動觸發了。


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


    解決方案

    rm ./flutter/bin/cache/lockfile

    錯誤分析

    原因是在flutter編譯等操作運行過程中,會創建一個文件鎖,但是由于一些原因鎖沒有釋放導致的,而且一直無法釋放……


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


    解決方案

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

    方案二:如果集成方式是動態庫(.framework),說明在引用Flutter的工程中并沒有依賴成功,需要檢查Flutter.framework包內是否包含Headers文件夾,是否其中包含Flutter.h,另外就是Podspec和podfile是否正確。還有,Cocoapods必須1.5版本及以上。

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


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


    解決方案

    依賴產物只針對 真機 ,但調試中使用了另一種 模擬器。或者反過來了。

    錯誤分析

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


    八、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相關集成是不支持bitcode的,所以需要將相關產物的bitcode功能關閉。如果你的現有工程中倉庫眾多,有的倉庫是必須bitcode的,這樣的話就需要每次pod install之后再在工程配置中手動設置回來,以下腳本放在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


    解決方案

    執行以下命令

    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集成到現有工程后,性能問題


    解決方案

    用Release產物集成

    問題分析

    為了實現Hot refresh功能,Flutter在Debug下做了很多工作,影響了性能,可以通過修改

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

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


    十二、iOS系統中,第一次從Native跳轉到Flutter頁面時,會出現LaunchScreen


    解決方案

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

    問題分析

    Flutter的渲染是異步的,第一次加載需要創建Application和頁面,無法及時返回結果,所以Flutter自己把這部分邏輯加到了SDK內部,其實是為了解決 “純Flutter App首屏白屏” 問題,但給我們這種混編的App帶來了麻煩。


    以上是我們到目前為止遇到的主要坑位,以及解決方案和原因分析,Flutter無論從性能還是人效方面來講,都會在熟悉之后節省不少成本,希望各位能從我們的經驗中節省更多寶貴的時間。同時,也希望大家把更多的埋坑記錄發到評論里,幫助友隊一起學習,一起成長。歡迎技術交流!


    本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶學習參考,本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.juherenli.com/18392.html
    相關APP開發
     八年  行業經驗

    多一份參考,總有益處

    聯系深圳網站公司塔燈網絡,免費獲得網站建設方案及報價

    咨詢相關問題或預約面談,可以通過以下方式與我們聯系

    業務熱線:余經理:13699882642

    Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

    国产精品中文字幕在线观看| 国产69精品久久久久久人妻精品| 91精品国产一区二区三区左线 | 国产精品久久久99| 六月婷婷国产精品综合| 久9re热这里精品首页| 精品久久久久久99人妻| 国产精品久久久久久影视| 免费精品国偷自产在线在线| 日产精品久久久久久久性色| 亚洲精品中文字幕乱码三区| 国产精品久久久久久久午夜片| 国产精品线在线精品国语| 国产精品一久久香蕉国产线看| 999精品视频在线观看| 亚洲av永久无码精品国产精品| 精品国产成人在线| 四虎永久在线精品视频| 国产成人精品一区二区A片带套 | 国产精品内射后入合集| 久久精品亚洲男人的天堂| 日韩精品成人亚洲专区| 日日夜夜精品免费视频| 精品丰满人妻无套内射| www.国产精品.com| 97久久国产亚洲精品超碰热| 1313午夜精品久久午夜片| 亚洲国产综合精品中文第一区| 久久99国产精品久久久| 国产亚洲精品美女久久久| 国产综合精品久久亚洲| 国产精品无码不卡一区二区三区| 黄大色黄美女精品大毛片| 精品久久久无码人妻字幂| 亚洲中文字幕久久精品蜜桃| 亚洲爆乳无码精品AAA片蜜桃 | 国产精品青草久久| 国产最新精品视频| 视频一区二区精品的福利| 国产精品亚洲专区一区| 国产成人综合精品|