flutter、Oc混编

踩坑:

1. 为什么非得把flutter项目克隆下来,才能集成?

flutter 用的是flutter module模式开发的,所以嵌入iOS项目中的时候需要把flutter 克隆到自己的电脑上,很奇怪,一开始自己想不明白为什么不能直接把framework给我直接用呢,后来在开发中慢慢理解了一些:

1.native 的pod中需要导入flutter,意思是flutter需要打包成组建化导入native
2.每次flutter修改完成后,需要重新flutter build/run,run这个过程会把App.framework引用到native中,这时候运行iOS才是最新的flutter工程
3.如果以flutter插件的形式开发,应该是可以直接给native包使用的,目前没试过。

2. 电脑配置flutter

按照官网的配置一步一步是比较简单的,不过要注意的一点是环境变量的配置问题
flutter 安装配置还是比较人性化,毕竟google做出来的,使用flutter doctor 一步步查看问题就好了,注意需要安装homebrew,有点稍微费时间,最痛苦的问题是:如果你有两台电脑开发,需要配置两遍,而且一单更新,两台电脑都要更新,这样就回到了第一个问题,如果直接以插件形式给原生就省了很多事情。

3.开发过程中

相对于不同方向的开发人员学习flutter的难度,因为公司端上的同学都在学习,我的感受是:iOS>android>Web。也许不准,大家可以学一下试试。
疑惑:dart如果分类是不是面向对象语言?我觉得应该是一种更高一层简单易用的基于面向对象方式的语言。
继承和泛型使用是最多的,重载也使用很多。
所有子类都会重写父类的属性。(这点很费解,明明属性一样,赋值都一样,为什么还是要重写)

1.开发过程中,不是很难,没有iOS、android那样强的逻辑性,还是比较简单的,看开发文档基本都可以解决,一种样式有太多种实现方式,本人做flutter的时候思想还是iOS思想,很难转变,这一点我们不同方向的同学开会比对过,不过哪一种实现方式都是可以的。
2.flutter导入一些三方框架是真的容易。
3.flutter提供的控件也是蛮细心的,内部已经继承了你想要的样式功能,这点让我一个做iOS的喜欢的不得了,以后flutter也许会发布更多的控件吧
4.native与flutter数据交流这块挺有意思,有单向通道和双向通道,原生跳转flutter是通过注册路由的形式来完成的。可以好好研究下FlutterMethodChannelFlutterEventChannel,挺有意思的。

4.打包

打包的时候遇到过挺多问题:

1. 打出来的包会包含模拟器的 x86_64 这样的架构,release包是不允许的,所以我们要把这个架构去掉。这里我明确的告诉大家应该去哪里删除掉: 你安装 flutter的sdk的位置 flutter⁩ ▸ ⁨⁨bin⁩ ▸ ⁨cache⁩ ▸ ⁨artifacts⁩ ▸ ⁨engine⁩ ▸ ⁨ios-release⁩ ▸ ⁨Flutter.framework⁩。

在这里执行 lipo -remove x86_64 Flutter -o Flutter 然后打包就没问题了。

我想吐槽下网上的答案:我搜了一下,千篇一律,所有的答案感觉都是copy一人之手,而且这个人也没说明具体是哪的flutter.framework,所以很费劲,因此找不到具体路径,所以网上的所有这个答案的都是错误的。而且还传遍了整个网络,我想说你们copy 的时候能不能自我实验一下???

2. 有些flutter三方框架,原本就有的情况下总是在build的时候not found file。我看了下pod中引入这些三方库的路径,堆叠的文件夹套文件夹有10个之多,这样的引用方式总觉得怪怪的。发现这个问题的时候,建议大家flutter clean 然后在flutter build ios 最后在flutter run。如果还是找不到,那就删了三方框架重新flutter pub get吧,具体问题具体分析.
3. 我这几天遇到的问题,不支持armv7架构

Failed to verify bitcode in Flutter.framework/Flutter:
error: Cannot extract bundle from /var/folders/5h/mjbc_z1n7m91q21xw9_m217m0000gn/T/IDEDistributionOptionThinning.~~~4EpG5E/Payload/SunLands.app/Frameworks/Flutter.framework/Flutter (armv7)
打这个包浪费了我好久的时间,然而自己看了log,发现是自己flutter和native 支持的机械有出入,导致这样的问题,那就好解决了,把两个支持的架构都调成一样的就没问题了嘛,然后再一打包果然没问题。
我还是要吐槽下网上的答案,千篇一律,全是把bitcode关掉!我希望大家不要在抄了,自己的问题自己解决,每个人解决方式不一样,实验了在写,抄有什么用,装?

本人目前涉及flutter还不是很广,以后还会更新。

你可能感兴趣的:(flutter、Oc混编)