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

    总结

    碰到问题不要紧张,也不要临时解决问题,一定要把本质弄清楚,这样问题自然就会引刃而解,此问题虽然花费了我不少时间,但是收益还是比较大的。

  • 相关阅读:
    练习四十:数组逆向输出
    练习三十九:数组插入排序
    Java awt组件间的继承关系
    java ArrayList
    java Scanner中的hasNext()方法
    java中String对象的存储位置
    java初始化块执行顺序
    java二维数组
    java数组变量
    Java数组初始
  • 原文地址:https://www.cnblogs.com/kingbo/p/11394631.html
Copyright © 2020-2023  润新知