美文网首页
现有ios项目集成flutter项目

现有ios项目集成flutter项目

作者: jianshufei | 来源:发表于2021-04-10 21:52 被阅读0次

    -注意:原生和flutter项目在一个目录下(同级)

    1.创建项目

    flutter create -t module 名称

    (在flutter的模块项目中包含有一个隐藏的.android和.ios目录这个目录下是可运行的Android和iOS项目,我们的flutter代码还是在lib下编写,注意在.android和.ios目录下都有一个Flutter目录,这个是我们flutter的库项目了。也就是Android用来生成aar,iOS用来生产framework的库。如果我们用flutter create xxx 生成的纯flutter项目是没有这个Flutter目录的)

    2.修改原生项目Podfile添加如下

    此路径为Podfile的相对路径
    

    flutter_application_path = '../flutter项目名称/'
    eval(File.read(File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)

    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)
    

    3.原生项目添加shell脚本

    "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build
    "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed
    

    2.xcode_backend.sh

    该脚本主要负责:
    1.构建 App.framework 以及 Flutter.framework 产物
    2.根据编译模式(debug/profile/release)导入对应的产物
    3.编译 flutter_asset 资源
    4.把以上产物 copy 到对应的构建产物中

    这个脚本原本是放在Build Phases,在Debug和Release模式下分 别会产出对应环境的Flutter产物(Flutter有Debug,Profile,Release三个模式)。并且里面还有一句代码是:
    RunCommand cp -r -- "{app_framework}" "{derived_dir}"
    我们现在把flutter模块独立了,于是在Debug的时候执行flutter run或者打包执行flutter build ios都会在ios/Flutter文件夹下产生一些文件,其中App.framework和flutter_assets是我们最关心的。

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

    在Debug和Release下构建出对应的Flutter产物,App.framework,flutter_assets(App.framework就是我们在lib下面写的Dart代码,flutter_assets就是我们资源)
    把上面的产物拷贝到App包里

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

    Flutter.framework
    (Flutter 引擎库。与编译模式(debug/profile/release)以及 CPU 架构(arm*, i386, x86_64)相匹配)

    App.framework
    (App.framework : Flutter 工程产物(包含 Flutter 工程的代码,Debug 模式下它是个空壳,代码在 flutter_assets 中)。)

    flutter_assets
    (包含 Flutter 工程字体,图片等资源。在 Flutter1.2 版本中,被打包到 App.framework 中。)

    当然如果有FlutterPlugin则还需要FlutterPluginRegistrant

    lib*.a & .h 头文件 : FlutterPlugin 静态库(包含在 iOS 端的实现)

    4.修改原生项目bitCode 为 NO

    5.原生项目Podfile文件下执行pod install

    完成!

    相关文章

      网友评论

          本文标题:现有ios项目集成flutter项目

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