Flutter已经融入工程有一段时间了,由于团队人数较少,所以一直没有管和原有工程解依赖的问题,今天有时间正好把这个问题给搞了。

一、分析

首先,直接忽略上一篇《接入现有iOS项目》的所有步骤,直接创建flutter_module工程

flutter create flutter_module

注:flutter create flutter_moduleflutter create -t module my_flutter区别在于带module参数,创建出来的工程会把辅助用的androidios工程给隐藏掉,我们这里要涉及打包以及修改配置,就不需要带module参数了

其次,弄明白一件事官方wiki,里面用的两个脚本podhelper.rbxcode_backend.sh分别在PodfileBuild Phases里面

flutter_application_path = '../my_flutter/'
eval(File.read(File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed

这两个脚本的作用时什么呢?

1.podhelper.rb

这个脚本主要做了三件事:

  1. 通过Pod引入Flutter.framework(Flutter引擎),以及Flutter的插件注册表FlutterPluginRegistrant(创建的工程中GeneratedPluginRegistrant.{h,m}文件中)
  2. 引入.flutter-plugins的依赖
  3. 导入Generated.xcconfig配置,这里面放的是Flutter要用的环境变量(如:xcode_backend.sh开头就要用的$FLUTTER_ROOT

这里面最重要的就是Flutter.framework

2.xcode_backend.sh

这个脚本原本是放在Build Phases,在DebugRelease模式下分别会产出对应环境的Flutter产物(FlutterDebugProfileRelease三个模式)。并且里面还有一句代码是:

RunCommand cp -r -- "${app_framework}" "${derived_dir}"

我们现在把flutter模块独立了,于是在Debug的时候执行flutter run或者打包执行flutter build ios都会在ios/Flutter文件夹下产生一些文件,其中App.frameworkflutter_assets是我们最关心的。

也就是说xcode_backend.sh的作用是:

DebugRelease下构建出对应的Flutter产物,App.frameworkflutter_assetsApp.framework就是我们在lib下面写的Dart代码,flutter_assets就是我们资源)

把上面的产物拷贝到App包里

那么我们也得出了相应的结论,要解除依赖,就是需要把关键的三个文件拆出来就可以了:

  1. Flutter.framework
  2. App.framework
  3. flutter_assets

当然如果有FlutterPlugin则还需要FlutterPluginRegistrant,这个我们后面讲。

二、创建产物工程flutter_product

Flutter.frameworkApp.frameworkflutter_assets三个文件拷贝到这个工程。

注:一定要对应好XcodeFlutter的模式,如果XcodeDebug,那么需要Debug模式的Flutter产物,即:flutter run出来的App.frameworkflutter_assetsXcodeRelease则需要flutter build ios出来的App.frameworkflutter_assets。这个后续可以写个shell脚本来搞定。

编写**podspec**文件:

Pod::Spec.new do |s|

  s.name         = "FlutterModule"
s.version = "0.0.1"
s.summary = "A short description of FlutterModule." s.description = "FlutterModule" s.homepage = "http://EXAMPLE/FlutterModule" s.license = "MIT"
s.author = { "goingta" => "tanglei@doctorwork.com" } s.source = { :git => "", :tag => "#{s.version}" } #s.source_files = 'Classes','Classes/**/*.{h,m}'
s.vendored_frameworks = ['Module/App.framework','Module/Flutter.framework']
s.resource = ['Module/flutter_assets'] end

三、通过Pod引入Xcode工程

修改工程下的Podfile

pod "FlutterModule", :path => "../flutter_product"

注:我这里直接用的本地路径引入的(主要还是懒),团队开发应该是放在自己的私有pod库上。

至此,依赖就解决了,Native同学不需要关心Flutter模块,也不需要搭建Flutter环境,就可以开发了。而负责Flutter模块的同学也可以通过独立的工程单独开发,当然在大型团队开发过程中还有很多事情要做,这里只是第一步,后续把Plugin项目完成后出一篇完整文章。

Flutter踩坑日记:解除依赖的更多相关文章

  1. Flutter踩坑日记:接入现有iOS项目

    之前搞的Flutter版工具链已经弄完了,感兴趣的朋友可以围观下,Android版本dio库(v2.0.14)发送网络请求老是报错,去官方提了issue还没回,于是今天搞一下把Flutter模块接入到 ...

  2. Flutter踩坑日记:Tab导航栏保持子页面状态

    最近应邀票圈小伙伴躺坑Flutter,项目初步雏形完结.以原来的工具链版本为基础做了Flutter版本,不过后面还是需要优化下项目接入Redux,以及扩展一些Native方法. 这里记录一下在开发过程 ...

  3. Hexo搭建静态博客踩坑日记(一)

    前言 博客折腾一次就好, 找一个适合自己的博客平台, 专注于内容进行提升. 方式一: 自己买服务器, 域名, 写前端, 后端(前后分离最折腾, 不分离还好一点)... 方式二: 利用Hexo, Hug ...

  4. AI相关 TensorFlow -卷积神经网络 踩坑日记之一

    上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是g ...

  5. 人工智能(AI)库TensorFlow 踩坑日记之一

    上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是g ...

  6. hexo博客谷歌百度收录踩坑日记

    title: hexo博客谷歌百度收录踩坑日记 toc: false date: 2018-04-17 00:09:38 百度收录文件验证 无论怎么把渲染关掉或者render_skip都说我的格式错误 ...

  7. Hexo搭建静态博客踩坑日记(二)

    前言 Hexo搭建静态博客踩坑日记(一), 我们说到利用Hexo快速搭建静态博客. 这节我们就来说一下主题的问题与主题的基本修改操作. 起步 chrome github hexo git node.j ...

  8. flutter 踩坑总结

    导入第三方库踩坑小结: (编译器:VsCode) ( 打算在学习中,使用flutter重新自己的项目,遇到比较特殊的坑,就先记录一下,持续更新中) 1.把第三方库 写入pubspec.yaml文件中 ...

  9. JavaScript 新手的踩坑日记

    引语 在1995年5月,Eich 大神在10天内就写出了第一个脚本语言的版本,JavaScript 的第一个代号是 Mocha,Marc Andreesen 起的这个名字.由于商标问题以及很多产品已经 ...

随机推荐

  1. 团队项目之UML图设计---WeEdit

    团队信息: 学号: 姓名: 本次博客链接: 041602209 黄毓明(临时队长)  https://www.cnblogs.com/mingsonic/p/9820702.html 06160023 ...

  2. Codeforces812B Sagheer, the Hausmeister 2017-06-02 20:47 85人阅读 评论(0) 收藏

    B. Sagheer, the Hausmeister time limit per test 1 second memory limit per test 256 megabytes input s ...

  3. poj 2488 A Knight's Journey

    题目 题意:给出一个国际棋盘的大小 p*q,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. 因为要求字典序输出最小,所以按下图是搜索的次序搜素出来的就是最小的. 初始方向数组:i ...

  4. hihocode 1336 Matrix Sum 【二维树状数组】

    题目 两个操作: 1. Add x y value: Add value to the element Axy. (Subscripts starts from 0 2. Sum x1 y1 x2 y ...

  5. [php] php - json_encode 函数

    json_encode()函数, $arr= array("key"=>null); echo json_encode($arr);{"key":null ...

  6. E - Evaluate Matrix Sum

    Description Given a matrix, the elements of which are all integer number from 0 to 50, you are requi ...

  7. EntityFramework Core 学习扫盲

    0. 写在前面 1. 建立运行环境 2. 添加实体和映射数据库 1. 准备工作 2. Data Annotations 3. Fluent Api 3. 包含和排除实体类型 1. Data Annot ...

  8. jacoco初探

    # 背景 集团的代码覆盖率平台因为网络问题无法使用,只能自己研究下. 覆盖率是衡量自动化用例效果产品的一个指标,但只是一个辅助指标,覆盖率高并不意味着质量好,但覆盖率低却能说明一些问题, # 对比 覆 ...

  9. Centos7 下一键安装JDK和Maven

    JDK 1. 使用yum search java|grep jdk 查看jdk版本 2. 选择版本安装 yum install java-1.7.0-openjdk,如果用1.8的,只用改版本号即可. ...

  10. BZOJ 1011--[HNOI2008]遥远的行星(乱搞)

    1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 5684  Solved ...