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' doeval(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" thin2、上架提交商店报错处理
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
假如写不对的地方请指出,或者者有更好的方式望不吝赐教!
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS混编Flutter优化&注意