iOS混編Flutter優化&注意

前段時間根據官方不是很新的混編wiki寫了一篇混編相關的demo文章,現在回看官方wiki。不知道優化了好幾個版本。針對網友的回復也有回復。但現在看來部分回復可能失效,也可能不是最優解,所以親自按照官方混編wiki優化了自己項目的混編,看看和之前有什么不同(前提是不需要修改官方flutter的混編源文件)

一、材料準備(不明白的可以先參考前一篇文章)

  • flutter環境
  • flutter module (注意文件路徑最好不要出現中文,否則flutter build可能會出現UTF8等報錯)
  • Xcode Debug/Release 配置文件
  • Pods (wiki教程最新,主要講這種方式)
對比之前Flutter.framework是通過pod本地引入

1、項目目錄命令行執行pod init,Podfile文件編寫以下代碼,后執行pod install

# 下面是復制官方demo的podfile內容修改:
# 這里寫你的flutter module相對路徑
flutter_application_path = '../flutter_module/'

# NewHybridDemo 是你的項目名,用你自己的,只要copy下一行代碼就行
target 'NewHybridDemo' do

eval(File.read(File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')),binding)

end

如果按官方的形式pod install總是報錯,請命令行指定到你flutter module目錄執行flutter packages get 完成后,在指回Xcode工程目錄執行pod install

2、配置文件編寫 (可以不用寫了,因為pod的時候已經引入了pod的配置文件中了)


使用pod的配置即可
pod的配置文件

3、Run Script

"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build

寫完執行Xcode build(cmd+B)操作,你會發現項目中并沒有生成framework等Flutter資源文件。因為默認情況下xcode_backend.sh將framework打包到了flutter module中路徑(flutter module)/.ios/Flutter中。

4、膠水文件導入方式(項目同級創建混編資源存放文件夾)


創建混編資源存放文件夾
  • 方式一:手動到(flutter module)/.ios/Flutter下將資源拖到剛創建好的Flutter文件夾下;
  • 方式二:修改xcode_backend.sh文件;
// 搜索  local derived_dir="${SOURCE_ROOT}/Flutter"
// 將它下面三行注釋
  local derived_dir="${SOURCE_ROOT}/Flutter"
  # if [[ -e "${project_path}/.ios" ]]; then
  #   derived_dir="${project_path}/.ios/Flutter"
  # fi
  RunCommand mkdir -p -- "$derived_dir"
  AssertExists "$derived_dir"
修改`xcode_backend.sh`文件
  • 方式三:RunScript寫cp代碼,將(flutter module)/.ios/Flutter下將資源使用命令行代碼copy到Flutter文件夾中;(建議使用,不用人工操作也不用擔心官方后續修改xcode_backend.sh文件更新flutter沖突。美滋滋~)
# 刪除本地Flutter文件夾
rm -rf -- "$SOURCE_ROOT/Flutter"
# 再生成Flutter文件夾
mkdir -p "$SOURCE_ROOT/Flutter"

# 編譯生成
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build

# 將膠水文件copy到本地文件夾
cp -r -- "$FLUTTER_APPLICATION_PATH/.ios/Flutter/flutter_assets" "$SOURCE_ROOT/Flutter"
cp -r -- "$FLUTTER_APPLICATION_PATH/.ios/Flutter/App.framework" "$SOURCE_ROOT/Flutter"
RunScript寫法

注意:如果使用pod方式做膠水文件的話,Flutter.framework就沒必要導入了,pod已經處理!
framework資源使用Create groups方式導入(導入完后記得到項目配置General - Embedded Binaries中將導入好的framework添加);
其他資源文件夾flutter_assets使用Creat folder references方式導入

General - Embedded Binaries

二、優化相關

1、framework包瘦身

xcode_backend.sh瘦身代碼

官方在xcode_backend.sh文件中已經有了瘦身的操作,只要在RunScript再添加一行代碼(build下面,有framework才能瘦身)即可解決。

# 瘦身
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" thin

2、上架提交商店報錯解決


Flutter.framework報錯

使用lipo命令查看Flutter.framework信息,確實又存在x86_64

lipo命令查看Flutter.framework信息

所以解決辦法就是將x86_64從framework中去除,使用lipo -remove 命令即可;方式也很多隨個人喜歡。這里我只說一種,如果用pod導入的話Flutter.framework文件路徑在(flutter module)/.ios/Flutter/engine/下。所以可以找到它,命令行剔除;我比較喜歡交給機器去幫我實現一些人為操作,所以我選擇放到RunScript去進行操作

if [[ "$CONFIGURATION" =~ "Release" ]];then
# Release環境刪除Flutter.framework "x86_64" 框架
lipo -remove "x86_64" "$FLUTTER_APPLICATION_PATH/.ios/Flutter/engine/Flutter.framework/Flutter" -output "$FLUTTER_APPLICATION_PATH/.ios/Flutter/engine/Flutter.framework/Flutter"
fi

但值得注意的是:Flutter.framwork 剔除了x86_64,虛擬機就跑不了了。所以我會放到Xcode Release環境再進行刪除。

三、本文參考

0、Demo-NewHybridDemo
1、官方混編wiki
2、官方混編demo
3、Flutter iOS減包方案
4、Need to explain how to build app for submission to app store #7888
5、Submit to App Store issues: Unsupported Architecture x86

如果寫不對的地方請指出,或者有更好的方式望不吝賜教!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,791評論 6 545
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,795評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,943評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,057評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,773評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,106評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,082評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,282評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,793評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,507評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,741評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,220評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,929評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,325評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,661評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,482評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,702評論 2 380

推薦閱讀更多精彩內容