跳过主要内容
教程

Capgo 环境最佳实践:使用__CAPGO_KEEP_1__应用程序ID进行一键式环境

A practical guide to avoid duplicate app IDs and fragile runtime flags by using Capgo channels for staging, QA, and production in Capacitor apps.

文章来源

马丁·多纳迪厄

作者

瓦莱里亚

审稿人

乔丹

编辑

Capgo 环境最佳实践:使用__CAPGO_KEEP_1__应用程序ID进行一键式环境

Teams通常选择三种移动环境的方法:

  1. 两个应用ID(生产+预发布)
  2. 一个应用ID+动态运行时环境切换
  3. 一个应用ID+Capgo频道

前两种方法可以工作,但它们会带来长期的摩擦。在实际团队中,Capgo频道模型通常是最干净的。

为什么会出现重复的应用ID

使用 com.myappcom.myapp.beta 看起来很简单,但你很快就会出现重复:

  • 两个发布管道
  • 两个推送ID、深度链接和权限映射
  • 两个分析和崩溃身份
  • 环境配置不一致,开发环境与生产环境之间的行为不一致

您需要管理两个产品,分别在不同的商店控制台、团队和内部QA指南中

为什么在运行时切换配置会变得混乱

通常情况下,使用一个应用程序ID + 运行时切换模式会导致您的应用程序在启动时读取环境变量或标志,并动态重新路由API、密钥和更新行为

直到

  • QA开始绕过预期流程,因为配置状态过时
  • 有人在生产环境中使用了错误的端点
  • 环境漂移导致难以复现的错误
  • 您需要在用户设备上调试“这个二进制文件使用哪个配置版本?”

随着每个发布的复杂性不断增长,团队的速度也会减慢

The Capgo way: one app ID, many channels

Capgo makes environment control explicit through channels:

  • 保持一个生产应用 ID 在 App Store / Play 中。
  • 将一个本机二进制文件发布到“shell”(直到本机更改需要重新构建为止)。
  • 通过渠道路由行为,而不是通过重复的应用标识。

在实践中,这意味着:

  • production: 所有用户
  • staging: 内部 QA 和发布候选人
  • beta: 邀请的测试者
  • hotfix: 紧急修复跟踪

您的 TestFlight/Play 内部测试应用可以永久留在那里。 您可以在那里反复通过 __CAPGO_KEEP_0__ 更新 JS/CSS/资产,而无需发布新的本机应用。 staging forever. You do JS/CSS/asset updates there repeatedly through Capgo without publishing a new native app.

2) 每个渠道的本机二进制文件

Your last native binary stays the same for many JS iterations:

bun run build
bunx cap sync
# generate Xcode/Android Studio archives as usual

You only rebuild the native binary when you actually changed native surface area.

2) 为环境使用专用通道

发布更新使用通道:

bun run build
bunx @capgo/cli deploy --channel staging

测试QA,修复问题,然后推广:

bunx @capgo/cli promote vX.Y.Z --channel production

如果您喜欢明确的版本控制:

bunx @capgo/cli deploy vX.Y.Z --channel staging
bunx @capgo/cli promote vX.Y.Z --channel production

3) 保持 TestFlight “始终为预生产”

在 iOS 工作流中,这意味着您的 TestFlight 构建可以与预生产更新相关联:

  • 不频繁提交每个 JS 变更的本机提交。
  • QA 始终通过预发布通道验证近生产code。
  • 生产用户只接收推广的生产通道包。

4) 只在受控工作流中使用通道切换

对于高级团队,暴露受控的频道切换选项给QA/管理员:

import { CapacitorUpdater } from '@capgo/capacitor-updater';

await CapacitorUpdater.setChannel({
  channel: 'staging',
  triggerAutoUpdate: true
});

这不是必须的。大多数团队从仪表板中使用频道 assignments,并且仅在内部用户中切换频道,而不是所有客户。

运维清单

  • 仅有一个应用 ID(无重复的生产/测试 ID)
  • 仅有一个原生构建管道
  • 频道映射文档(staging, beta, production, hotfix)
  • CI/CD 中的推广路径被强制执行
  • 仅在原生变化时重建原生
  • 回滚测试频繁

实用益处

这种方法可以移除环境漂移,减少构建频率,提高修复速度:

  • QA 可以获得真实的二进制文件(无假的“测试应用”身份)
  • 你的 TestFlight 路径保持稳定,
  • 你的团队避免了 “两个 App ID 债务”,
  • 你可以快速通过 Capgo 推送许多 JS-only 修复。

最终结果是更简单的管理: fewer artifacts、cleaner telemetry 和发布操作中更少的惊喜。

继续阅读 Capgo 环境最佳实践:使用一个移动 App ID 进行分级发布

如果你正在使用 Capgo 环境最佳实践:使用一个移动 App ID 进行分级发布 来规划通道路由和分级发布,连接它到 Channels for the implementation detail in Channels, Channels Channels 频道 为频道的实现细节 测试版解决方案 为测试版解决方案中的产品工作流程 版本定位解决方案 为版本定位解决方案中的产品工作流程

Capacitor 应用的实时更新

当一个 web 层面的 bug 在 live 状态时,通过 Capgo 来发布修复,而不是等待几天的 app store 审批。用户在后台接收更新,而原生改变仍然在正常的审批路径中

来自 Martin 的人性化支持

立即开始

最新博客文章

Capgo 给您所需的最佳见解来创建一个真正专业的移动应用