创建环境特定配置
支持平台: iOS、Android
许多软件开发团队在软件开发生命周期中会使用不同的环境。不同环境之间的配置可能有所不同,例如 Bundle ID、深度链接方案、图标和启动屏幕等。
Capacitor 配置文件处理 Capacitor 工具和插件配置的高级选项。iOS 方案(schemes)和 Android 产品变体(product flavors)允许开发者为不同环境提供不同的应用值。通过结合这两者,开发者可以使用 Capacitor CLI 为不同环境构建应用。
本指南将引导你设置一个 QA 环境配置,同时保留开箱即用的默认环境配置。为了演示每个环境之间的差异,两个环境的应用程序名称和 Bundle ID 将有所不同。
准备 Capacitor 应用
你需要一个已添加 iOS 和 Android 平台的 Capacitor 应用。如果你已有现成的包含这两个平台的 Capacitor 应用,请跳过本节。
根据你的偏好,你可以将 Capacitor 添加到现有 Web 应用程序或使用 Ionic Framework 创建新的 Capacitor 应用。
Capacitor 应用必须使用 TypeScript 进行配置。本指南使用 capacitor.config.ts 来动态导出不同的配置。
在向项目添加任何原生平台之前,你必须至少构建一次 Capacitor 应用。
npm run build
构建完成后,你可以添加平台。
npm install @capacitor/ios @capacitor/android
npx cap add ios
npx cap add android
设置新的 iOS 方案
创建新的 Xcode 目标
首先在 Xcode 中打开原生 iOS 项目:npx cap open ios。
- 在项目导航器面板中进入项目设置。在_目标_部分,右键单击“App”目标并选择复制以复制现有目标。
- 单击新的“App copy”目标并按
Enter键重命名。将目标名称设置为“App QA”。
此过程创建了额外的“App copy”方案,并添加了一个名为 App copy-Info.plist 的新文件。
你可以在此链接找到关于 iOS 目标的更多信息。
重命名新方案和 Plist 文件
- 从方案菜单中选择管理方案...。
- 找到“App copy”方案并按
Enter键重命名。将名称设置为“App QA”并关闭对话框。 - 在项目导航器面板中找到“App copy-Info”文件并按
Enter键重命名。将文件名设置为“App QA-Info.plist”。 - 返回项目设置。确保选中“App QA”目标,打开_构建设置_部分。向下滚动到打包部分,将 Info.plist 文件条目更改为“App QA-Info.plist”。
iOS 项目现在有两个可运行方案:“App”和“App QA”。Capacitor 配置文件允许你在 run 命令期间指定要构建的方案。
你可以在此链接找到关于 iOS 方案的更多信息。
设置环境特定值
返回项目设置的_常规_部分。确保选中“App QA”目标,并更改显示名称和Bundle 标识符。
确保这些值与默认“App”目标中存在的值不同。目标特定值存储在目标关联的 Info.plist 文件中。按照本指南,该文件是 App QA-Info.plist。
更新 Podfile 并同步应用
退出 Xcode;你可以在后续步骤中使用你喜欢的 IDE。
打开 /ios/App/Podfile 并复制“App”目标的代码块,将重复条目中的“App”替换为“App QA”,如下所示:
...snip...
target 'App' do
capacitor_pods
# 在此处添加你的 Pods
end
target 'App QA' do
capacitor_pods
# 在此处添加你的 Pods
end
运行 npx cap sync 以同步“App QA”目标的插件。
添加 iOS 特定的 Capacitor 配置
创建了 QA 环境的目标和方案后,需要更新 Capacitor 配置以使用它们。
将以下属性添加到 capacitor.config.ts 中的配置对象:
ios: {
scheme: 'App QA',
}
scheme 属性告诉 Capacitor 在 run 命令中使用哪个 iOS 方案。测试一下:运行 npx cap run ios,你会看到应用程序名称不同了。
设置 Android 产品变体
修改应用的 Gradle 文件
Android 项目包含多个 build.gradle 文件;需要修改以设置产品变体的文件位于 /android/app 文件夹中。
打开 /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 不提供“默认”变体。在本指南中,非 QA 环境称为“dev”。
applicationIdSuffix将在 Bundle ID 末尾追加.qa。manifestPlaceholders是在AndroidManifest.xml中可用的值。
注意: 你可以自由修改 Bundle ID 和显示名称值。
你可以在此链接找到关于 Android 产品变体的更多信息。