这里有两种集成方式:

方式一

  • 官方方案

优点:该方案遵循flutter官方建议,规范性不言而喻

缺点: 此方案对团队开发不是很友好,需要求每名开发同学的电脑上都要配>置flutter环境。并且 iOS端开发与flutter端开发在代码纠缠性上会变得复杂化

主要过程:

cd 进入项目根目录上一层
flutter create -t module flutter_module
cd ./flutter_module
flutter build ios

Podfile文件修改:

# flutter混编配置
flutter_application_path = '../flutter_module/'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')

target 'XXXAPP' do
   use_frameworks!
 
   # flutter混编配置
   install_all_flutter_pods(flutter_application_path)

end

cd .. 
pod install

当您更改扑插件的依赖关系some/path/my_flutter/pubspec.yaml,你需要运行flutter pub get从some/path/my_flutter刷新列表插件读取的podhelper.rb脚本。然后pod install从再次 运行some/path/MyApp。
该podhelper.rb脚本将确保您的插件Flutter.framework和App.framework嵌入在您的项目中。

遇到的一些坑:

错误一:Command PhaseScriptExecution failed with a nonzero exit code

解决方法:xcode菜单file->Workspace Settings->Build System 选择Legacy Build System

错误二:x’x’x/Flutter.framework: Permission denied

解决方法:修改 $FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh 144Line

RunCommand find "${derived_dir}/engine/Flutter.framework" -type f -exec chmod a-w "{}" ;
改成
RunCommand find "${derived_dir}/engine/Flutter.framework" -type f -iname '.h' -exec chmod a-w "{}" ;

错误三:dyld: dyld cache load error: shared cache file open() failed
dyld: Library not loaded: @rpath/App.framework/App

模拟器无法运行 要用真机跑release模式

方式二

  • 以Pod的方式集成(咸鱼APP以这种方式)

优点: 对 Flutter 自身的构建流程改动较少并且较彻底第解决了本地耦合的问题; 解决了组件式开发的痛点,各自开发各自的代码,也不用要求每台电脑上都配置flutter环境
缺点: 集成方式上变得貌似更加繁琐,Flutter 内容的变动需要先同步到远程仓库再 同步到 Standalone 模式方能生效;且要各自打包维护iOS安卓的两套代码仓库供不同平台去拉取调用,Flutter中的依赖库配置可能存在一些坑

Flutter—原有项目集成Flutter