概要
在集成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.
總結
碰到問題不要緊張,也不要臨時解決問題,一定要把本質弄清楚,這樣問題自然就會引刃而解,此問題雖然花費了我不少時間,但是收益還是比較大的。