背景
目前大多數(shù)公司都是已經(jīng)開發(fā)多年的原生或混合開發(fā)項(xiàng)目,如果新增模塊想要使用flutter進(jìn)行開發(fā),就需要用到flutter的混合開發(fā)。
應(yīng)公司要求將能重用的flutter plugin放到flutter mudule中,然后將flutter module編譯成framework,最后再將編譯好的framework,放到原生并做好與原生的通訊及橋接再次封裝成原生framework,給用戶的原生項(xiàng)目直接使用。
詳細(xì)步驟分為兩步:
1.將flutter module編譯成framework
2.將flutter module編譯出來的framework,放到原生并邏輯橋接后,再次封裝成framework
項(xiàng)目結(jié)構(gòu)說明
1.重用的plugin依賴 -> 網(wǎng)絡(luò)庫plugin
2.網(wǎng)絡(luò)庫plugin依賴 -> 原生封裝的網(wǎng)絡(luò)庫framework及其他framwork(沒有直接使用flutter的那套網(wǎng)絡(luò)請(qǐng)求)
flutter module的創(chuàng)建及引入方式見這里
一.flutter module編譯成framework
//編譯命令
/*
output=后面是編譯出來的framework存放的地址,可自行存放
*/
//生成三種模式,生成目錄見圖1
1.flutter build ios-framework --output=some/path/MyApp/Flutter/
//只生成release模式,目錄圖1去掉debug及profile
2.flutter build ios-framework --no-debug --no-profile --output=./Flutter/
/*
將 Flutter 框架作為一個(gè) CocoaPods 的 podspec 文件分發(fā)
其實(shí)就是將Flutter.xcframework以pod形式集成
注:可以根據(jù)自己需求,生成對(duì)應(yīng)模式
如:flutter build ios-framework --cocoapods --no-release --no-profile --output=./Flutter/
*/
3.flutter build ios-framework --cocoapods --output=some/path/MyApp/Flutter/


溫馨提示
如果不知道flutter build ios-framework后面還可增加什么參數(shù),可使用flutter build ios-framework -h進(jìn)行查看-h其實(shí)就是--help,搜索如下圖,可指定不生成debug、profile、release,默認(rèn)是三個(gè)都會(huì)生成,其他也可自行選擇

1.flutter build ios-framework之后,報(bào)錯(cuò)如下
意思就是我XX_common.framework的pod配置有錯(cuò)誤,但是沒有具體報(bào)出來,

那就執(zhí)行讓其輸入詳細(xì)報(bào)錯(cuò)信息,執(zhí)行命令后面加-v
flutter build ios-framework --cocoapods --no-release --no-profile --output=./Flutter/ -v
詳細(xì)報(bào)錯(cuò)如下

是因?yàn)橛行┪覀冊(cè)木W(wǎng)絡(luò)庫framework沒有加載

2.將打出來Flutter.podspec及多個(gè)xcframework庫,引入到原生的封裝庫中
(1)在Podfile文件中動(dòng)態(tài)引入Flutter.framework,如下圖

(2)在原生framework項(xiàng)目引入上個(gè)步驟生成的多個(gè)xcframework時(shí),
TARGETS->General->Frameworks and Libraries里面全部設(shè)置為Embed & Sign ,否則最后編譯出來的原生framework會(huì)找不到對(duì)應(yīng)的庫,最終生成example.framework

(3)原生example.framework編譯完成后,將最終的example.framework引入到最終使用的原生項(xiàng)目中,步驟(1)的Podfile配置仍然需要
當(dāng)你開始調(diào)用example.framework并且運(yùn)行的時(shí)候,會(huì)發(fā)現(xiàn)還是無法找到某個(gè)framework庫,這是因?yàn)閑xample.framework嵌套的靜態(tài)庫不會(huì)動(dòng)態(tài)的把依賴的靜態(tài)庫 link 到這個(gè)項(xiàng)目,Framework 嵌套與依賴看這里
我們需要手動(dòng)將這些xcframework鏈接
TARGETS->General->Frameworks and Libraries


并且根據(jù)framework本身的打包設(shè)置,來設(shè)置Embed,

設(shè)置錯(cuò)誤會(huì)報(bào)如下錯(cuò)


到此,所有踩坑過程結(jié)束,歡迎大家指正