美文网首页
flutter 混合工程自动化(一)

flutter 混合工程自动化(一)

作者: 今年27 | 来源:发表于2022-12-08 11:31 被阅读0次

我们一般开发flutter与原生项目混合开发,需要flutter工程向原生提供一个flutter module,然后将原生工程下新建一个Podfile,并将其修改一下

# Uncomment the next line to define a global platform for your project
flutter_application_path = '../flutter_module'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')

platform :ios, '9.0'

target 'NativeDemo' do
  install_all_flutter_pods(flutter_application_path)
  use_frameworks!

  # Pods for NativeDemo

end

然后pod install
然后就可以在iOS工程里面开发了

 FlutterViewController* vc = [FlutterViewController new];
 [self presentViewController:vc animated:YES completion:nil];

但是这样做会有个问题,Native工程师会存在一下三个问题:
1,需要flutter环境
2,flutter版本必须与flutter开发人员一致
3,flutter的安装路径也必须一致

普通的混合工程

所以需要混合工程自动化来解决这个问题,早期的flutter开发工程师需要手动的去抽取.ios文件夹下的App.frameworkFlutter.framework,但是在flutter 1.12之后,flutter已经支持快捷命令来抽取,具体过程如下:
1.flutter工程师需要:

flutter build ios-framework --output=../flutter_app

flutter_app文件夹下会生成三个子文件夹
Debug:调试版本,可以运行在模拟器
Profile:高性能的调试版本,只支持真机
Release:发布版本,只支持真机
他们文件夹下分别都会有App.frameworkFlutter.framework,提供对应的版本给原生工程师即可
2.原生工程师需要:
1.导入flutter_app文件夹
2.修改target的build settings下的Framework Search Paths
在里面添加$(PROJECT_DIR)/flutter_app/Debug
3.在工程里新建一个group名字叫Frameworks
4.将App.frameworkFlutter.framework脱出Frameworks文件夹下
选中copy if needed

这样原生工程师在没有flutter环境的情况下照样可以运行flutter 代码。

但是如上方法是有缺陷的,因为对于iOS开发者,每次都需要去拉去Flutter.framework,但是Flutter.framework的更新频率相对较低,而App.framework更新频率相对较高。而且,iOS工程大部分都已经拥有Cocopods了,所以我们可以用Cocopods混合工程。

Cocoapods混合工程

在终端输入

flutter build ios-framework --cocoapods --output=../flutter_app

那么Flutter文件夹下同样会生成DebugProfileRelease三个文件夹,不同的是里面只有App.framework,于此同时,里面会多一个Flutter.podspec文件,这个Flutter.podspec文件就是用来接入原生工程的。
Podfile里面增加一条

pod 'Flutter', :podspec=>'Flutter/Debug/Flutter.podspec'

然后pod install
App.framework拖入Framework文件夹下
Target->General下的Frameworks,Libraries,and Embedded Content 种的App.framework 的状态改为embed & sign
然后用Xcode运行即可

相关文章

网友评论

      本文标题:flutter 混合工程自动化(一)

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