Flutter 打包报错 : Unknown FLUTTER_BUILD_MODE: xxx
概要
在集成flutter 工程之后,我们的工程在debug 和release 模式下都没什么问题,一切都很顺利。但是我们在打企业包的时候却出现了错误:
Showing Recent Errors Only
:-1: ERROR: Unknown FLUTTER_BUILD_MODE: beta_enterprise.
其中,我们的企业包配置如下 Beta_Enterprise:

一开始其实我知道flutter里面有:release、debug 和profile 三种打包模式,所以考虑是不是由于 只能支持这三种模式?我们的工程也只能配置Debug、Release和Profile 三种模式?
但是另外一想:其他公司企业版本也很多,如果只支持这三种也太不专业了,因此慢慢研究了其打包脚本的原理,具体处理问题如下。
问题处理
第一步:从我集成flutter工程脚本入手
我使用的是 flutter channel master 最新的方式集成方式
Podfile 文件配置:
####Flutter###
flutter_application_path = '../../Flutter/flutter_project'. //这里填写的host 工程和flutter工程相对路径
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb') target 'myApp' do
use_frameworks! install_all_flutter_pods(flutter_application_path)
...
end
按住 cmd+B 之后iOS 工程在 Targets-> Build Parses 之中会自动生成 [CP-User] Run Flutter Build Script 这个脚本,脚本内容如下:
set -e
set -u
source "${SRCROOT}/../../Flutter/flutter_rokid/.ios/Flutter/flutter_export_environment.sh"
"$FLUTTER_ROOT"/packages/flutter_tools/bin/xcode_backend.sh build
其中 "$FLUTTER_ROOT" 是我们安装flutter 时候 设置的环境变量,只要找到你自己的安装目录即可,然后通过整个路径找到 xcode_backend.sh 文件
第二步:分析脚本运行逻辑
我们看下里面一句比较关键的一段代码:
xcode_backend.sh 代码片段
local build_mode="$(echo "${FLUTTER_BUILD_MODE:-${CONFIGURATION}}" | tr "[:upper:]" "[:lower:]")"
local artifact_variant="unknown"
case "$build_mode" in
*release*) build_mode="release"; artifact_variant="ios-release";;
*profile*) build_mode="profile"; artifact_variant="ios-profile";;
*debug*) build_mode="debug"; artifact_variant="ios";;
*)
EchoError "========================================================================"
EchoError "ERROR: Unknown FLUTTER_BUILD_MODE: ${build_mode}."
EchoError "Valid values are 'Debug', 'Profile', or 'Release' (case insensitive)."
EchoError "This is controlled by the FLUTTER_BUILD_MODE environment variable."
EchoError "If that is not set, the CONFIGURATION environment variable is used."
EchoError ""
EchoError "You can fix this by either adding an appropriately named build"
EchoError "configuration, or adding an appropriate value for FLUTTER_BUILD_MODE to the"
EchoError ".xcconfig file for the current build configuration (${CONFIGURATION})."
EchoError "========================================================================"
exit -1;;
esac
上面脚本中我们找到以下关键两句:
local build_mode="$(echo "${FLUTTER_BUILD_MODE:-${CONFIGURATION}}" | tr "[:upper:]" "[:lower:]")"
local artifact_variant="unknown"
case "$build_mode" in
*release*) build_mode="release"; artifact_variant="ios-release";;
上面这句脚本的含义是:我们在打包时候,是使用Xcode中的"Configuration"配置的名字 需要包含:*release*,*debug*,*proflie*,字段即可, 比如: test_release 会自动打包出release模式,再比如,ent_Debug 会默认为debug 默认进行打包;
其实到这里为止我们已经知道问题的答案: 只要将 beta_enterprise 改成 beta_release_enterprise 即可
:-1: ERROR: Unknown FLUTTER_BUILD_MODE: beta_enterprise.
总结
碰到问题不要紧张,也不要临时解决问题,一定要把本质弄清楚,这样问题自然就会引刃而解,此问题虽然花费了我不少时间,但是收益还是比较大的。
Flutter 打包报错 : Unknown FLUTTER_BUILD_MODE: xxx的更多相关文章
- 解决xcode10打包报错:That command depends on command in Target ‘xxx’:scrpit phase"[CP] Copy Pods Resources"
问题:使用xcode10打包报错,提示 error:Multiple commands produce ‘xxxx/xxx.app’ 1)Target ‘xx’ has create director ...
- springboot项目POM文件第一行报错 Unknown Error
改成 war 不错了,但是打包麻烦 pom 文件报错 UnKnown Error第一次碰到这个问题,花了几个小时才解决,除了UnKnown 没有任何提示.网上搜的大部分情况都不是我遇到的. 还是没有解 ...
- scp使用加密算法报错unknown cipher type
为了提高scp的传输速度指定了scp的加密算法为arcfour $ scp -c arcfour localFile userName@remoteIP:remoteFile 得到报错unknown ...
- webpack 打包报错:One CLI for webpack must be installed. These are recommended choices, delivered as separate packages
webpack 打包报错: One CLI for webpack must be installed. These are recommended choices, delivered as sep ...
- 端口报错listen eaddrinuse:::xxx
端口报错 listen eaddrinuse:::xxx 表示这个端口被占用 结束正在使用此端的程序即可.
- maven install 打包 报错 Cannot run program "gpg.exe": CreateProcess error
打包报错, mvn install后加上参数-Dgpg.skip,例如:mvn install -Dgpg.skip 即可解决. 我们也可以去掉 这个 插件 <plugin> ...
- EF5+MVC4系列(2) EF5报错 无法确定“XXX”关系的主体端。添加的多个实体可能主键相同
情景:用户表和订单表是一对多的关系,即 一个 Userinfo 对应对应有 多个 Order表 如果我在EF中,先创建一个用户,然后创建3个订单,然后关联这1个用户和3个订单的关系,毫无问题. ...
- vue-cli 打包报错:Unexpected token: punc (()
vue-cli 打包报错: ERROR in static/js/vendor.ed7d2353f79d28a69f3d.js from UglifyJs Unexpected token: punc ...
- [one day one question] webpack 打包报错 Cannot assign to read only property 'exports' of object '#<Object>'
问题描述: webpack 打包报错 Cannot assign to read only property 'exports' of object '#<Object>',这怎么破? 解 ...
随机推荐
- Flink 配置文件详解
前面文章我们已经知道 Flink 是什么东西了,安装好 Flink 后,我们再来看下安装路径下的配置文件吧. 安装目录下主要有 flink-conf.yaml 配置.日志的配置文件.zk 配置.Fli ...
- FreeBSD_11-系统管理——{Part_9-SVN}
一.使用 svn / svnlite 代替 freebsd-update 及 portsnap 等常规工具更新系统及 ports 源码 二.安装可信 ca 机构列表 cd /usr/ports/sec ...
- Error: EBUSY: resource busy or locked, symlink "xxx" 的解决方法
上面是报错信息. 解决方法:当我们在npm i 安装依赖的时候,会遇到这个Error: EBUSY: resource busy or locked, symlink....的问题.解决的 办法就是关 ...
- springboot上传图片大小限制
背景:springboot项目上传图片超过1M报错,经了解,springboot默认上传文件1M 需求:更改默认配置,控制上传文件大小 方法:①更改配置文件(经试验不可行,不知道为什么):②更改启动B ...
- JDK8新特性之方法引用
什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用. 如: List<String> list = Arrays.asList(&q ...
- 天道神诀--IPSAN实现多链路以及多路径安装
# linux6 环境需求 ISCSI服务端: 2张网卡,足够的磁盘空间 iscsi客户端: 2张网卡(与服务端网段相同) ISCSI服务端配置: 与1张网卡配置主要差别在于配置文件中的允许访问网段, ...
- Size Assert
判断返回内容的大小
- Flask理论基础(一)视图函数和URL反转函数(url_for)
一.视图函数 1.1 基本用法试图函数是 app.route 或者 bp.route(蓝图)装饰器装饰的函数.该函数实现了对URL路径的转换,也就是路由功能,例如下面代码定义了默认url ‘/’ 和‘ ...
- Keil5-建立第一个STM32工程
此致:特别感谢作者Lomo-chen所写的文章给我的帮助,我尝试做了一下,成功了,今天整理一下. 一.建立文件夹: 1.在桌面或其他盘建立一个文件夹,此处名称为Test,用来存放工程程序. 2.在Te ...
- Ansible介绍
第一章 ansible服务介绍 1.1 ansible批量管理服务概述 是基于python语言开发的自动化软件工具 是基于SSH远程管理服务实现远程主机批量管理 1.2 ansible批量管理服务意义 ...