flutter

5 阅读3分钟

Flutter mixmin 是一种代码复用机制,它允许将一组方法注入到类中,以便在多个类中重复使用这些方法,Mixin类似其他编程语言中的混入或特质 mixin 是通过with关键字将其混入到类中的,一个类可以同时混入多个mixin 

iOS和flutter混编 Flutter以一个三方库的形式集成到项目的教程

1. 第一步:编译flutter二进制框架(.xcframework)目的是将你的flutter模块代码(dart代码、插件等)连同flutter引擎一起,编译成iOS原生项目可以识别的静态库或动态库框架

核心原理:flutter build ios-framework 命令会依次执行以下命令操作

  • 编译Dart代码: 将你的Dart代码编译成机器码
  • 打包引擎:将编译好的代码与特定模式(Debug/Profile/Release)的flutter引擎打包在一起
  • 处理插件: 如果你的flutter模块使用了任何包含原生代码的插件,这个命令页将会每个插件编译成独立的框架
  • 生成XCFramework: 最终生成支持模拟器和真机(通过Machi-o胖二进制或XCFramwwork)的.xcframework文件,方便xcode管理

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

  • Debug/ :包含调试信息,适合开发阶段使用。体积最大,性能最低。
  • Profile/ :用于性能分析。
  • Release/ :最终发布给用户的版本,经过优化,体积最小,性能最高。

ios_frameworks/

└── Release/                     # 以Release模式为例
├── Flutter.xcframework       # Flutter 引擎核心 (必须)
├── App.xcframework           # 你的Dart业务代码 (必须)
├── FlutterPluginRegistrant.xcframework # 插件注册中心 (如果有插件)
└── ... (其他插件的.xcframework)         # 每个插件一个`
  • Flutter.xcframeworkFlutter引擎。这是Flutter的运行时,包含了Skia渲染引擎、Dart虚拟机等,所有Flutter模块都需要它
  • App.xcframework你的Dart业务代码。这是 lib/main.dart 等代码编译后的二进制文件
  • 各个插件的.xcframework:每个Flutter插件的原生代码都被编译成一个独立的框架

注意:为不同的构建配置(Debug/Release)使用对应的框架非常重要。如果在Release配置下混入了Debug框架,可能会导致应用性能下降或包含不必要的调试符号

**2: 第二步:**将框架打包成私有Cocoapods

创建一个podspec文件,将这些二进制文件打包成一个名为xxSDK的pod ,以便原生项目可以通过pod install 轻松集成

CocoaPods 不仅仅是管理源码,它也支持通过 vendored_frameworks 字段来分发预编译好的二进制框架。我们只需要创建一个描述文件(.podspec),告诉CocoaPods这些框架在哪,以及一些基本的元数据即可。

JFlutterResidentSDK/

├── JFlutterResidentSDK.podspec # Pod 的描述文件

└── Frameworks/ # 存放所有编译好的 .xcframework

├── Release/                     # (可选) 按模式划分子目录
│   ├── Flutter.xcframework
│   ├── App.xcframework
│   └── ...
└── ... 

编写podspec文件




Pod::Spec.new do |s|

1. 基础元数据

s.name = 'JFlutterResidentSDK' # Pod 名称 s.version = '1.0.1.233' # 版本号 s.summary = 'A Flutter module packaged as a Pod.' s.description = 'Pre-built Flutter frameworks for iOS.' s.homepage = 'your.company.com' s.license = { :type => 'MIT' } # 根据实际情况填写 s.author = { 'Your Company' => 'email@company.com' } s.source = { :git => 'your.git.repo', :tag => s.version } # 代码仓库地址

2. 平台和部署目标

s.platform = :ios, '11.0' # 最低支持版本,与Flutter引擎要求一致

3. 关键:声明预编译的 vendored frameworks

这里告诉CocoaPods,这些 .xcframework 需要被集成到项目中

s.vendored_frameworks = [ "Frameworks/Release/Flutter.xcframework", "Frameworks/Release/App.xcframework", "Frameworks/Release/FlutterPluginRegistrant.xcframework", # 在这里添加所有其他插件的 .xcframework 路径 # "Frameworks/Release/shared_preferences.xcframework", ]

4. (重要) 处理Flutter引擎的依赖

Flutter.xcframework 本身是动态库,需要确保它被正确嵌入

CocoaPods 会处理 vendored_frameworks 的签名和嵌入,通常无需额外配置

end