flutter-項(xiàng)目多環(huán)境配置以及打包

背景:主要是為了研究iOS打不同渠道的包,但是涉及到不同環(huán)境配置,先走下多環(huán)境配置的流程

1.新建一個空項(xiàng)目:

image.png

2.新建launch.json 文件

image.png

3.修改配置文件,增加環(huán)境變量:

image.png
APP_ENV:

定義了一個叫” APP_ENV“的環(huán)境變量,可以通過代碼獲取” APP_ENV“的值,根據(jù)值去配置對應(yīng)環(huán)境的url等。

對應(yīng)的值為dev、test、uat、prod分別對應(yīng)開發(fā)、測試、uat、生產(chǎn)環(huán)境。如有需要,可自定義其他的環(huán)境。

flutterMode:
  1. debug 模式
    用途:默認(rèn)的調(diào)試模式,用于開發(fā)階段。
    特點(diǎn):
    啟用完整的調(diào)試功能(如熱重載、斷點(diǎn)調(diào)試、Dart DevTools 等)。
    代碼未優(yōu)化,包含斷言和調(diào)試信息,方便快速定位問題。
    性能較低,但適合快速迭代開發(fā)。
  2. profile 模式
    用途:性能分析模式,用于優(yōu)化應(yīng)用性能。
    特點(diǎn):
    保留部分調(diào)試功能,但移除了開發(fā)階段的調(diào)試工具(如熱重載)。
    代碼部分優(yōu)化,支持性能分析工具(如 Observatory、Flutter Performance 面板)。
    性能接近 Release 模式,適合測試應(yīng)用在真實(shí)設(shè)備上的運(yùn)行表現(xiàn)23。
  3. release 模式
    用途:正式發(fā)布模式,用于生成最終上架版本。
    特點(diǎn):
    代碼完全優(yōu)化(包括 AOT 編譯),移除了所有調(diào)試信息。
    性能最高,包體積最小。
    不支持調(diào)試工具,僅用于測試應(yīng)用最終發(fā)布狀態(tài)的表現(xiàn)。
4.json文件配置后可選擇debug對應(yīng)的模式直接運(yùn)行代碼:
image.png
5.代碼中如何根據(jù)環(huán)境變量去配置對應(yīng)的url等:env.dart 代碼如下:
// 配置環(huán)境變量類
class EnvConfig {
  final String envName;
  final String envHttpUrl;
  final String envTcpIp;
  final int envTcpPort;

  EnvConfig(
      {required this.envName,
      required this.envHttpUrl,
      required this.envTcpIp,
      required this.envTcpPort});
}

class Env {
  // 獲取launch.json中配置的環(huán)境變量的值
  static const _appEnv = String.fromEnvironment("APP_ENV", defaultValue: 'dev');

  // 獲取當(dāng)前環(huán)境配置
  static EnvConfig get envConfig => _getEnvConfig();
  // 根據(jù)環(huán)境變量獲取對應(yīng)的配置
  static EnvConfig _getEnvConfig() {
    switch (_appEnv) {
      case "test":
        return _testConfig;
      case "uat":
        return _uatConfig;
      case "prod":
        return _proConfig;
      default:
        return _devConfig;
    }
  }

  // 開發(fā)環(huán)境
  static final EnvConfig _devConfig = EnvConfig(
      envName: "development",
      envHttpUrl: "https://devxxxx:/api/v1",
      envTcpIp: "192.168.1.68",
      envTcpPort: 28799);

  // 測試環(huán)境
  static final EnvConfig _testConfig = EnvConfig(
      envName: "test",
      envHttpUrl: "http:testxxxx:3000",
      envTcpIp: "192.168.1.75",
      envTcpPort: 1573);
  // uat環(huán)境
  static final EnvConfig _uatConfig = EnvConfig(
      envName: "uat",
      envHttpUrl: "http:uatxxxx:3000",
      envTcpIp: "192.168.1.75",
      envTcpPort: 1573);

  // 生產(chǎn)環(huán)境
  static final EnvConfig _proConfig = EnvConfig(
      envName: "production",
      envHttpUrl: "http:proxxxx:3000",
      envTcpIp: "192.168.1.75",
      envTcpPort: 1573);
}

6.如何使用:
    final httpUrl = Env.envConfig.envHttpUrl;
    print('當(dāng)前環(huán)境httpUrl=$httpUrl');
7.打包:

當(dāng)配置了多個configurations后,肯定希望能根據(jù)APP_ENV值去打不通環(huán)境的包(比如可掃碼安裝的包、發(fā)布到appstore的包)

執(zhí)行命令:

flutter build ipa --release --dart-define=APP_ENV=uat/dev/test/prod

這里的一定是--release ,APP_ENV的值根據(jù)需要設(shè)置uat/dev/test/prod


image.png

1.是命令
2.是生成的可以archive文件的地址
3.是直接上傳appstore的ipa包,這個包不可以直接上傳到類似蒲公英并生成二維碼使用,如果想生成可掃碼安裝的包,需要另外的方式,方式如下:

從2的地址中找到對應(yīng)的文件:


image.png

拷貝到平時直接用xcode打包生成包的路徑:


image.png

這樣就可以在xcode中看到了


image.png

剩下的流程就是平時的打包流程:


image.png

這種方式打出的包就可以生成二維碼并安裝了,當(dāng)然你也可以選擇App Store Connect 的方式直接用xcode上傳到appstore并提交審核。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容