美文网首页
flutter module 编译成framework后进行二次

flutter module 编译成framework后进行二次

作者: angle_杰 | 来源:发表于2023-04-12 18:10 被阅读0次

背景

目前大多数公司都是已经开发多年的原生或混合开发项目,如果新增模块想要使用flutter进行开发,就需要用到flutter的混合开发

应公司要求将能重用的flutter plugin放到flutter mudule中,然后将flutter module编译成framework,最后再将编译好的framework,放到原生并做好与原生的通讯及桥接再次封装成原生framework,给用户的原生项目直接使用。

详细步骤分为两步:

1.将flutter module编译成framework
2.将flutter module编译出来的framework,放到原生并逻辑桥接后,再次封装成framework

项目结构说明

1.重用的plugin依赖 -> 网络库plugin
2.网络库plugin依赖 -> 原生封装的网络库framework及其他framwork(没有直接使用flutter的那套网络请求)

flutter module的创建及引入方式见这里

一.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 框架作为一个 CocoaPods 的 podspec 文件分发
其实就是将Flutter.xcframework以pod形式集成
注:可以根据自己需求,生成对应模式
如:flutter build ios-framework --cocoapods --no-release --no-profile --output=./Flutter/
*/
3.flutter build ios-framework --cocoapods --output=some/path/MyApp/Flutter/

Pasted Graphic 2.png Pasted Graphic 1.png

温馨提示
如果不知道flutter build ios-framework后面还可增加什么参数,可使用flutter build ios-framework -h进行查看-h其实就是--help,搜索如下图,可指定不生成debug、profile、release,默认是三个都会生成,其他也可自行选择

image.png
1.flutter build ios-framework之后,报错如下

意思就是我XX_common.framework的pod配置有错误,但是没有具体报出来,


image.png

那就执行让其输入详细报错信息,执行命令后面加-v

flutter build ios-framework --cocoapods --no-release --no-profile --output=./Flutter/ -v

详细报错如下


image.png

是因为有些我们原生的网络库framework没有加载

原因是App.framework 和 Flutter.framework,包含其他资源文件,无法打包为static framework;将其他库,可以通过在podSpec 中添加 s.static_framework = true,打包为static framework,然后重新执行命令即可打包成功 image.png
2.将打出来Flutter.podspec及多个xcframework库,引入到原生的封装库中

(1)在Podfile文件中动态引入Flutter.framework,如下图

image.png
(2)在原生framework项目引入上个步骤生成的多个xcframework时,
TARGETS->General->Frameworks and Libraries里面全部设置为Embed & Sign ,否则最后编译出来的原生framework会找不到对应的库,最终生成example.framework
image.png
(3)原生example.framework编译完成后,将最终的example.framework引入到最终使用的原生项目中,步骤(1)的Podfile配置仍然需要
当你开始调用example.framework并且运行的时候,会发现还是无法找到某个framework库,这是因为example.framework嵌套的静态库不会动态的把依赖的静态库 link 到这个项目,Framework 嵌套与依赖看这里
我们需要手动将这些xcframework链接

TARGETS->General->Frameworks and Libraries


image.png 对应项目目录的example.framework下的frameworks image.png

并且根据framework本身的打包设置,来设置Embed,


image.png

设置错误会报如下错


image.png image.png

到此,所有踩坑过程结束,欢迎大家指正

相关文章

网友评论

      本文标题:flutter module 编译成framework后进行二次

      本文链接:https://www.haomeiwen.com/subject/bfonddtx.html