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阅读 198,603评论 5 465
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,422评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,478评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,116评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,037评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,832评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,075评论 3 389
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,685评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,976评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,028评论 2 315
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,830评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,584评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,101评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,229评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,521评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,121评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,314评论 2 339

推荐阅读更多精彩内容