背景:主要是为了研究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:
- debug 模式
用途:默认的调试模式,用于开发阶段。
特点:
启用完整的调试功能(如热重载、断点调试、Dart DevTools 等)。
代码未优化,包含断言和调试信息,方便快速定位问题。
性能较低,但适合快速迭代开发。 - profile 模式
用途:性能分析模式,用于优化应用性能。
特点:
保留部分调试功能,但移除了开发阶段的调试工具(如热重载)。
代码部分优化,支持性能分析工具(如 Observatory、Flutter Performance 面板)。
性能接近 Release 模式,适合测试应用在真实设备上的运行表现23。 - 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并提交审核。