flutter-项目多环境配置以及打包

背景:主要是为了研究iOS打不同渠道的包,但是涉及到不同环境配置,先走下多环境配置的流程

1.新建一个空项目:

image.png

2.新建launch.json 文件

image.png

3.修改配置文件,增加环境变量:

image.png
APP_ENV:

定义了一个叫” APP_ENV“的环境变量,可以通过代码获取” APP_ENV“的值,根据值去配置对应环境的url等。

对应的值为dev、test、uat、prod分别对应开发、测试、uat、生产环境。如有需要,可自定义其他的环境。

flutterMode:
  1. debug 模式
    用途:默认的调试模式,用于开发阶段。
    特点:
    启用完整的调试功能(如热重载、断点调试、Dart DevTools 等)。
    代码未优化,包含断言和调试信息,方便快速定位问题。
    性能较低,但适合快速迭代开发。
  2. profile 模式
    用途:性能分析模式,用于优化应用性能。
    特点:
    保留部分调试功能,但移除了开发阶段的调试工具(如热重载)。
    代码部分优化,支持性能分析工具(如 Observatory、Flutter Performance 面板)。
    性能接近 Release 模式,适合测试应用在真实设备上的运行表现23。
  3. release 模式
    用途:正式发布模式,用于生成最终上架版本。
    特点:
    代码完全优化(包括 AOT 编译),移除了所有调试信息。
    性能最高,包体积最小。
    不支持调试工具,仅用于测试应用最终发布状态的表现。
4.json文件配置后可选择debug对应的模式直接运行代码:
image.png
5.代码中如何根据环境变量去配置对应的url等:env.dart 代码如下:
// 配置环境变量类
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中配置的环境变量的值
  static const _appEnv = String.fromEnvironment("APP_ENV", defaultValue: 'dev');

  // 获取当前环境配置
  static EnvConfig get envConfig => _getEnvConfig();
  // 根据环境变量获取对应的配置
  static EnvConfig _getEnvConfig() {
    switch (_appEnv) {
      case "test":
        return _testConfig;
      case "uat":
        return _uatConfig;
      case "prod":
        return _proConfig;
      default:
        return _devConfig;
    }
  }

  // 开发环境
  static final EnvConfig _devConfig = EnvConfig(
      envName: "development",
      envHttpUrl: "https://devxxxx:/api/v1",
      envTcpIp: "192.168.1.68",
      envTcpPort: 28799);

  // 测试环境
  static final EnvConfig _testConfig = EnvConfig(
      envName: "test",
      envHttpUrl: "http:testxxxx:3000",
      envTcpIp: "192.168.1.75",
      envTcpPort: 1573);
  // uat环境
  static final EnvConfig _uatConfig = EnvConfig(
      envName: "uat",
      envHttpUrl: "http:uatxxxx:3000",
      envTcpIp: "192.168.1.75",
      envTcpPort: 1573);

  // 生产环境
  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('当前环境httpUrl=$httpUrl');
7.打包:

当配置了多个configurations后,肯定希望能根据APP_ENV值去打不通环境的包(比如可扫码安装的包、发布到appstore的包)

执行命令:

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

这里的一定是--release ,APP_ENV的值根据需要设置uat/dev/test/prod


image.png

1.是命令
2.是生成的可以archive文件的地址
3.是直接上传appstore的ipa包,这个包不可以直接上传到类似蒲公英并生成二维码使用,如果想生成可扫码安装的包,需要另外的方式,方式如下:

从2的地址中找到对应的文件:


image.png

拷贝到平时直接用xcode打包生成包的路径:


image.png

这样就可以在xcode中看到了


image.png

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


image.png

这种方式打出的包就可以生成二维码并安装了,当然你也可以选择App Store Connect 的方式直接用xcode上传到appstore并提交审核。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容