iOS老項目集成Flutter最新混編方案

Flutter升級到1.8.3版本之后,網上查到一些混編方案已經不能再使用,經過兩天的采坑,整理出最新混編方案。

網上有兩種混編方案,一種官方提供的方案 傳送門:

1. 官方方案的優缺點

(1)優點:

不需要每次 Run 起來之后,先進行 同步flutter代碼(組件化Flutter后,因為組件化后flutter代碼已經變為framework,所以每次進來需要先熱更新同步代碼)

不需要單獨搞一個組件進行集成,管理組件的版本,發布等。

(2)缺點:

會非常耦合工程,需要修改工程配置,添加 BUILD PHASE 調用 flutter 中xcode_backend.sh腳本去編譯Flutter。(最新官方方案已解決)

如果使用pod管理,那么還需修改xcconfig配置。(最新官方方案已解決)

因為需要調用 Flutter 的編譯腳本,所以這種方式集成后,團隊內所有組員電腦和打包機,都必須安裝Flutter環境才能編譯成功。

2.咸魚大神提供的一種方案 傳送門:

(1)優點:

不需修改 原有 xcconfig 配置。

不需要添加 Run Script 腳本。

運行不需要依賴 Flutter 環境。

(2)缺點

需要單獨管理一個 flutter私有索引庫。

開發加載 Flutter 頁面 首次需要熱更新 進行刷新同步 Flutter 代碼。

ps:官方提供的方案更加適合單獨人員開發,咸魚大神提供的方案更加適合團隊協作,本人是單獨開發,所以這里具體介紹官方最新的方案.

準備工作:需要flutter1.8.3以上環境以及pod,如果flutter低于1.8.3終端運行flutter grade升級flutter

步驟1:

終端打開需要集成flutter的iOS項目同級目錄運行 flutter create -t module flutter_module


創建flutter模塊

創建完成后的目錄結構應該是這樣的:


目錄結構

步驟二:在原生項目Podfile中添加

flutter_application_path = '../flutter_module/'

? load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')

install_all_flutter_pods(flutter_application_path)

如果之前沒有使用過pod,在原生項目目錄下終端運行pod init指令自動生成Podfile文件


Podfile文件內容

添加完后運行pod install

步驟3:

因為flutter不支持bitcode,所以要關閉原生項目bitcode


關閉bitcode編碼

至此,flutter已經集成進原生項目中,command+b編譯項目。

我集成到這里,發現項目會報錯,以及引入#import <Flutter/Flutter.h>頭文件會提示文件路徑無法找到,解決方案使用VSCode或者Android studio打開flutter模塊項目運行一次,或者終端打開flutter模塊路徑下運行

flutter clean

flutter run

因為第一次運行項目,有時flutter.framework尚未生成,導致項目報錯或者路徑未找到,并不是必現,尚未找到具體原因,如果有人找到原因,請留言告知。


原生代碼修改:

AppDelegate.h修改:

繼承FlutterAppDelegate

AppDelegate.m修改:

初始化flutterEngine

flutter入口:


flutter入口

原生與flutter交互:


OC代碼


flutter代碼


flutter代碼


flutter熱更新:

終端打開flutter模塊路徑下運行flutter attach然后使用xcode運行項目


輸入r更新頁面

代碼Demo

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容