创建环境特定配置方案
支持平台: iOS, Android
在软件开发生命周期中,许多团队会使用不同的环境配置。不同环境可能需要不同的应用设置,例如包标识符(Bundle ID)、深度链接方案(deep-link scheme)或图标与启动屏等。
Capacitor 配置文件主要用于处理工具链和插件配置的高级选项。通过 iOS 的 schemes 和 Android 的 product flavors 机制,开发者可以为不同环境提供差异化的应用配置。结合这两者,开发者可以使用 Capacitor CLI 为不同环境构建应用。
本指南将演示如何基于默认配置,额外设置一套 QA 环境的配置方案。为展示环境差异,我们将使两个环境的应用名称和包标识符有所不同。
准备 Capacitor 应用
首先需要一个已添加 iOS 和 Android 平台的 Capacitor 应用。如已有现成项目,可跳过本节。
您可以选择:
注意:配置需使用 TypeScript 文件。本指南将使用 capacitor.config.ts
来动态导出不同配置。
添加原生平台前,必须先构建一次网页应用:
npm run build
构建完成后添加平台:
npm install @capacitor/ios @capacitor/android
npx cap add ios
npx cap add android
配置 iOS 多环境方案
创建新 Xcode 目标
打开 iOS 工程:npx cap open ios
- 在项目导航面板中进入项目设置
- 在 Targets 区域右键点击 "App" 目标,选择 Duplicate 复制目标
- 将新目标 重命名为 "App QA"
此操作会同时创建 "App copy" scheme 和 App copy-Info.plist
文件。
关于 iOS 目标的更多信息,可参考苹果官方文档。
重命名 scheme 和 Plist 文件
- 从 Scheme 菜单选择 Manage Schemes...
- 将 "App copy" scheme 重命名为 "App QA"
- 将 "App copy-Info.plist" 文件重命名为 "App QA-Info.plist"
- 在项目设置的 Build Settings 中,确保选中 "App QA" 目标,将 Info.plist File 指向 "App QA-Info.plist"
现在工程包含两个可运行方案:"App" 和 "App QA"。后续可通过 Capacitor 配置文件指定构建方案。
关于 iOS schemes 的更多信息,可参考苹果官方文档。
设置环境特定值
在项目设置的 General 标签页中:
- 确保选中 "App QA" 目标
- 修改 Display Name 和 Bundle Identifier
- 确保这些值与默认 "App" 目标不同
这些值会保存在对应 的 Info.plist
文件(本案例中为 App QA-Info.plist
)中。
更新 Podfile 并同步
退出 Xcode,打开 /ios/App/Podfile
文件,复制 "App" 目标的代码块并修改为:
...snip...
target 'App' do
capacitor_pods
# 在此添加您的 Pods
end
target 'App QA' do
capacitor_pods
# 在此添加您的 Pods
end
运行 npx cap sync
同步插件到 "App QA" 目标。
添加 iOS 特定配置
在 capacitor.config.ts
中添加:
ios: {
scheme: 'App QA',
}
scheme
属性指定了 run
命令使用的方案。测试运行 npx cap run ios
,可见应用名称已变更。
配置 Android 多环境方案
修改 Gradle 文件
打开 /android/app/build.gradle
,在 android
块内添加:
flavorDimensions "environment"
productFlavors {
dev {
dimension "environment"
manifestPlaceholders = [displayName:"My App"]
}
qa {
dimension "environment"
applicationIdSuffix ".qa"
manifestPlaceholders = [displayName:"My App - QA"]
}
}
配置说明:
- Android 没有"默认"flavor,非 QA 环境命名为 "dev"
applicationIdSuffix
会在包 ID 后追加.qa
manifestPlaceholders
可在清单文件中使用
注意: 可自由调整包 ID 和显示名称
关于 Android product flavors 的更多信息,可参考官方文档。
更新清单文件
将 AndroidManifest.xml
中 application
和 activity
节点的 android:label
改为:
<application
...snip...
android:label="${displayName}">
<activity
...snip...
android:label="${displayName}">
添加 Android 特定配置
在 capacitor.config.ts
中添加:
android: {
flavor: "qa",
},
测试运行 npx cap run android
,可见应用名称变化。
动态构建不同环境
导出环境特定配置
修改 capacitor.config.ts
:
import { CapacitorConfig } from '@capacitor/cli';
let config: CapacitorConfig;
const baseConfig: CapacitorConfig = {
appId: 'io.ionic.starter',
appName: 'My App',
webDir: 'build',
bundledWebRuntime: false,
};
switch (process.env.NODE_ENV) {
case 'qa':
config = {
...baseConfig,
ios: {
scheme: 'App QA',
},
android: {
flavor: 'qa',
},
};
break;
default:
config = {
...baseConfig,
ios: {
scheme: 'App',
},
android: {
flavor: 'dev',
},
};
break;
}
export default config;
当 NODE_ENV=qa
时,会使用 QA 环境的特定配置。
运行不同环境构建
QA 环境构建命令:
NODE_ENV=qa npx cap copy
NODE_ENV=qa npx cap run ios #NODE_ENV=qa npx cap run android
默认环境构建命令:
npx cap copy
npx cap run ios #npx cap run android
测试运行后,可见不同环境的应用名称差异。
扩展配置方案
本指南提供的基础方案可进一步扩展。Capacitor CLI 对 schemes 和 product flavors 数量没有限制,您可以根据 iOS 和 Android 的机制进行深度配置,甚至为不同环境配置不同的插件参数。可能性是无限的。