flutter-boot
上一篇文章记录了详细的flutter-boot集成的步骤,当然,想要混合开发也不是非要用这种方式,flutter官方文档给的方式也很棒,而且最近flutter1.12发布之后,集成方式也做了一些修改,更加的简洁便利,感兴趣的小伙伴可以去学习一下。本文主要记录一下,不管是用哪种方式集成,最后都需要把你写的dart代码打包到项目里,简单说就是开发完成肯定要打包给测试呀~~
shell打包
电脑上有一套完整的jenkins构建环境,也是很久之前搭建好的,也一直在平时的开发中使用,本文就不在详细介绍jenkins的东西了,可以去看我之前的文章,里面有记录了一份比较详细的shell打包脚本。
xcode_backend.sh
构建dart代码主要是用了flutter库里面的xcode_backend.sh脚本,这个脚本的路径如下:
"$FLUTTER_ROOT"/packages/flutter_tools/bin/xcode_backend.sh
下面是我自己的一点儿理解,可能有不对的地方,希望看过文章的小伙伴可以指出来。
构建dart代码应该是有下面两个步骤:
- Run Flutter Build Script
- BuildApp
//脚本中的源码 可以看到xcode中执行的是 xcode_backend.sh build 所以会调用BuildApp方法
if [[ $# == 0 ]]; then
# Backwards-compatibility: if no args are provided, build.
BuildApp
else
case $1 in
"build")
BuildApp ;;
"thin")
ThinAppFrameworks ;;
"embed")
EmbedFlutterFrameworks ;;
esac
fi
- 根据build_mode 构建Flutter.framework ,App.framework
- 主工程依赖Flutter.framework ,App.framework
以上只是一个比较简略的流程,实际这份脚本配合着podfile还做了很多工作
问题记录
本地native工程和flutter工程都编译通过之后,开始在jenkins服务器上构建,本以为“按理来说”是不会有任何问题的。
然后构建了好多次,一直在报错,其实只报了一个错误
这个错误信息还是很好理解的,在xcode_backend.sh也做了详细的注释,就是构建的时候用了xcode中配置的configration,flutter只支持Debug/Profile/Release这三种,而且构建的时候只能用release,导致了构建失败。
但是我们打包不可能只打release的包呀,除了Debug/Profile/Release,还有几个自定义的宏用来打包,那怎么能保证构建flutter的时候只用release呢。。。
尝试各种改改改啊,下面是我亲测有效的一种方式,改法还是来自xcode_backend.sh中的注释
# This means that if someone wants to use an Xcode build config other than Debug/Profile/Release,
# they _must_ set FLUTTER_BUILD_MODE so we know what type of artifact to build.
可以设置一个FLUTTER_BUILD_MODE的宏供xcode_backend.sh执行的时候使用,设置方式如下:
添加一个User-Defined
然后值设置为release
如果看到文章的小伙伴有别的解决方式欢迎一起学习讨论,如果有遇到别的问题,也欢迎一起学习讨论~~