背景:主要是為了研究iOS打不同渠道的包,但是涉及到不同環(huán)境配置,先走下多環(huán)境配置的流程
1.新建一個空項目:
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:
- debug 模式
用途:默認的調(diào)試模式,用于開發(fā)階段。
特點:
啟用完整的調(diào)試功能(如熱重載、斷點調(diào)試、Dart DevTools 等)。
代碼未優(yōu)化,包含斷言和調(diào)試信息,方便快速定位問題。
性能較低,但適合快速迭代開發(fā)。 - profile 模式
用途:性能分析模式,用于優(yōu)化應(yīng)用性能。
特點:
保留部分調(diào)試功能,但移除了開發(fā)階段的調(diào)試工具(如熱重載)。
代碼部分優(yōu)化,支持性能分析工具(如 Observatory、Flutter Performance 面板)。
性能接近 Release 模式,適合測試應(yīng)用在真實設(shè)備上的運行表現(xiàn)23。 - release 模式
用途:正式發(fā)布模式,用于生成最終上架版本。
特點:
代碼完全優(yōu)化(包括 AOT 編譯),移除了所有調(diào)試信息。
性能最高,包體積最小。
不支持調(diào)試工具,僅用于測試應(yīng)用最終發(fā)布狀態(tài)的表現(xiàn)。
4.json文件配置后可選擇debug對應(yīng)的模式直接運行代碼:
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并提交審核。