概要

在集成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的更多相关文章

  1. 解决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 ...

  2. springboot项目POM文件第一行报错 Unknown Error

    改成 war 不错了,但是打包麻烦 pom 文件报错 UnKnown Error第一次碰到这个问题,花了几个小时才解决,除了UnKnown 没有任何提示.网上搜的大部分情况都不是我遇到的. 还是没有解 ...

  3. scp使用加密算法报错unknown cipher type

    为了提高scp的传输速度指定了scp的加密算法为arcfour $ scp -c arcfour localFile userName@remoteIP:remoteFile 得到报错unknown ...

  4. 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 ...

  5. 端口报错listen eaddrinuse:::xxx

    端口报错 listen eaddrinuse:::xxx 表示这个端口被占用 结束正在使用此端的程序即可.

  6. maven install 打包 报错 Cannot run program "gpg.exe": CreateProcess error

    打包报错, mvn install后加上参数-Dgpg.skip,例如:mvn install -Dgpg.skip   即可解决. 我们也可以去掉 这个 插件   <plugin>    ...

  7. EF5+MVC4系列(2) EF5报错 无法确定“XXX”关系的主体端。添加的多个实体可能主键相同

    情景:用户表和订单表是一对多的关系,即 一个 Userinfo  对应对应有 多个 Order表   如果我在EF中,先创建一个用户,然后创建3个订单,然后关联这1个用户和3个订单的关系,毫无问题. ...

  8. vue-cli 打包报错:Unexpected token: punc (()

    vue-cli 打包报错: ERROR in static/js/vendor.ed7d2353f79d28a69f3d.js from UglifyJs Unexpected token: punc ...

  9. [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>',这怎么破? 解 ...

随机推荐

  1. SPOJ VFMUL - Very Fast Multiplication (FFT)

    题目链接:VFMUL - Very Fast Multiplication Description Multiply the given numbers. Input n [the number of ...

  2. 【android】获取本机ip地址

    方法是利用网址:http://pv.sohu.com/cityjson?ie=utf-8,返回String类型的ip地址: public static String getNetIp() { Stri ...

  3. TortoiseGit密钥设置

    需要用到TortoiseGit的puttykey generator工具来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥. 1.    安装完成TortoiseGit后 ...

  4. 高级UI晋升之布局ViewGroup(四)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从LinearLayout.RelativeLayout.FrameLa ...

  5. 【POJ】1287 Networking

    题目链接:http://poj.org/problem?id=1287 题意:n个点,m条网线长度.求构成网络的最小网线长度. 题解:最小生成树裸题.套板子. 代码: #include<iost ...

  6. canvas的基础入门

    canvas是定义在浏览器上的画布.它不仅仅是一个标签元素更是一个编程工具是一套编程的接口.利用它可以开发出很多东西,比如动画,游戏,动态的图表等富有变现力和感染力的应用.还可以开发出绚丽的3D动态效 ...

  7. LNMP部署

    部署企业LNMP架构 源码包:nginx-* ; mysql-* ; php-* ; boost-* ; zend-loader-php5.6-linux-* ;yum软件: pcre-devel z ...

  8. elasticsearch 父子文档(十一)

    说明 需求 一个产品多个区域销售 每个区域有自己的价格, 方式1冗余行,a 产品分别在  area1 area2 area3区域销售 a产品就会生成3条产品数据 搜索id去重就行了,但是问题就是 聚合 ...

  9. 笔记43 Spring Web Flow——订购披萨应用详解

    一.项目的目录结构 二.订购流程总体设计 三.订购流程的详细设计 1.定义基本流程pizza-flow.xml <?xml version="1.0" encoding=&q ...

  10. python 进程与线程 精要

    程序与进程 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程. 程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次 ...