跳过主要内容
教程

将每个Pull Request转换为可安装的预览

停止等待TestFlight处理。Capgo PR预览让QA、PM和利益相关者在一分钟内在真实设备上测试功能。

马丁·多纳迪厄

马丁·多纳迪厄

内容营销人员

将每个Pull Request转换为可安装的预览

每个移动开发团队都经历过这种痛苦:功能准备就绪,但将其传递给利益相关者意味着要穿越TestFlight或Google Play beta review迷宫。应该花几分钟时间,但却变成了等待、安装和管理beta版本的几个小时。

如果您的生产应用程序可以直接从任何Pull Request中拉取最新的更改,并将其直接应用到设备上,而无需重新安装或等待应用商店延迟?

这就是 PR预览 开启。开发者打开 pull request 时,GitHub Action 会创建一个专门的更新频道并发布更改。已安装应用程序的任何人都可以切换到该频道,测试该功能,然后切换回他们已经有的应用程序 - 不需要离开他们已经有的应用程序。

TestFlight 问题

测试移动功能的传统工作流程如下:

  1. 开发者打开 PR - Code 等待审查
  2. 等待 TestFlight - 处理时间 15-30 分钟
  3. 找到并安装 - 测试者搜索正确的构建
  4. 测试和重复 - 每次更改都需要等待

这会造成瓶颈。QA 等待构建而被阻塞。产品经理无法快速验证功能。开发者在等待反馈时会失去上下文。行业估计,这会导致每个 PR 的生产力损失约为 340 美元。

How PR Previews Work

PR 预览使用 Capgo 的频道系统来创建每个 PR 的更新流。以下是流程:

  1. PR 打开或更新 - GitHub 动作触发
  2. 上传包 - 您的 JS/CSS 更改将发送到一个 PR 特有的频道
  3. 评论发布 - 测试者在 PR 中接收指示
  4. 即刻测试 - Switch 频道,测试,Switch 回

无需新应用安装。无需 TestFlight 延迟。同一生产应用可以从不同的更新频道拉取。

设置 PR 预览

在您能够实现 PR 预览之前,需要先配置您的项目使用 Capgo Live Updates。请遵循 如果您还没有,请遵循 Capgo 快速入门指南 如果您还没有,请遵循 __CAPGO_KEEP_0__ Actions 工作流

GitHub Actions Workflow

关键是 .github/workflows/pr-preview.yml:

name: PR Preview
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6

      - name: Setup Bun
        uses: oven-sh/setup-bun@v2

      - name: Install Dependencies
        run: bun install

      - name: Build
        run: bun run build

      # Create a channel named after your PR (may already exist on synchronize)
      - name: Create PR Channel
        id: create_channel
        continue-on-error: true
        run: bunx @capgo/cli@latest channel add pr-${{ github.event.pull_request.number }} --self-assign
        env:
          CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}

      # Upload the build to that channel
      - name: Upload to Capgo
        run: bunx @capgo/cli@latest bundle upload --channel pr-${{ github.event.pull_request.number }}
        env:
          CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}

      # Post a comment with testing instructions (only on PR open)
      - name: Comment on PR
        if: github.event.action == 'opened'
        uses: actions/github-script@v7
        with:
          script: |
            github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: ${{ github.event.pull_request.number }},
              body: '📱 **Test this PR on device:**\n\nOpen your app and switch to channel: `pr-${{ github.event.pull_request.number }}`\n\nUse the shake menu or call `setChannel()` from your app.'
            })

在创建频道时使用标志。这使得测试者能够在应用程序中切换到频道,使用 __CAPGO_KEEP_0__ --self-assign 设置 __CAPGO_KEEP_0__ Token setChannel() 前往您的 API 控制台

导航到设置 > Capgo 密钥

  1. __CAPGO_KEEP_0__ Capgo
  2. API
  3. 生成一个新的密钥 all 权限
  4. 将其添加为 CAPGO_TOKEN 在您的GitHub仓库密钥中

测试人员如何切换频道

测试人员有两种方式可以切换到PR频道:

选项1:摇动菜单(最简单)

在您的Capacitor配置中启用摇动菜单和频道选择器:

// capacitor.config.ts
const config: CapacitorConfig = {
  // ... your other config
  plugins: {
    CapacitorUpdater: {
      shakeMenu: true,
      allowShakeChannelSelector: true
    }
  }
};

测试人员摇动他们的设备以打开调试菜单,显示可用的频道列表并带有搜索栏。他们找到他们的PR频道(例如,)、点击选择它,应用程序自动下载并应用更新。当测试完成时,他们再次摇动并切换回生产。 pr-123摇动菜单自动处理整个流程:

通过

  1. 获取所有可自行assign的频道 listChannels()
  2. 显示频道并支持搜索特定PR
  3. 下载选定更新
  4. 提示重新加载,提供“立即重新加载”/“稍后”选项

选项2:自定义频道选择器UI

在您的应用中构建一个频道切换器,列出可用的PR频道并让测试者选择一个。这使用了两个关键API:

  • listChannels() - 获取所有具有自我赋值功能的频道
  • setChannel() - Switches the device to the selected channel
import { CapacitorUpdater } from '@capgo/capacitor-updater';

// Get all available channels (including PR channels)
async function getAvailableChannels() {
  const { channels } = await CapacitorUpdater.listChannels();

  // Filter to show only PR channels
  const prChannels = channels.filter(c => c.name.startsWith('pr-'));

  return prChannels;
}

// Switch to a specific PR channel
async function switchToChannel(channelName: string) {
  await CapacitorUpdater.setChannel({
    channel: channelName,
    triggerAutoUpdate: true  // Immediately check for updates
  });
}

// Return to production
async function switchBackToProduction() {
  await CapacitorUpdater.unsetChannel({});
}

// Get current channel
async function getCurrentChannel() {
  const { channel } = await CapacitorUpdater.getChannel();
  return channel;
}

使用这些基本组件,您可以创建一个简单的UI:

// Example: List PR channels and let user select
const channels = await getAvailableChannels();
const current = await getCurrentChannel();

// Display channels in your UI
channels.forEach(channel => {
  console.log(`${channel.name} ${channel.name === current ? '(current)' : ''}`);
});

// When user selects a channel
await switchToChannel('pr-123');

要查看完整的React组件示例,请参阅 我们的频道浏览文章.

清理PR频道

当PR被合并或关闭时,您将希望清理频道。添加另一个工作流程:

name: Cleanup PR Preview
on:
  pull_request:
    types: [closed]

jobs:
  cleanup:
    runs-on: ubuntu-latest
    steps:
      - name: Delete PR Channel
        run: bunx @capgo/cli@latest channel delete pr-${{ github.event.pull_request.number }}
        env:
          CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}

关闭PR后,这将移除频道,保持您的频道列表清洁。

版本兼容性

PR预览仅在JavaScript包与安装的原生版本兼容时才有效。如果您的PR包含原生code更改(新Capacitor插件,iOS/Android修改),测试人员将需要一个新的原生构建。

Capgo将自动检查版本兼容性。如果一个PR的包目标的是不同的原生版本,那么更新将不会被应用。这可以防止由于不兼容code而导致的崩溃。

对于需要原生更改的PR,您将需要分发一个新的TestFlight/Play Store构建。PR预览对于JavaScript、CSS和资产更改最有效,这些更改不涉及原生code。

谁从PR预览中受益

测试工程师

  • 上下文:Capgo解决方案营销页面。角色:短的UI标签或导航项。见于:页面解决方案/pr-preview.astro。消息键`solutions_pr_preview_teams_qa` (Solutions Pr Preview Teams Qa)。
  • 测试PR时立即测试特性
  • 在不重新安装的情况下切换多个PR
  • 在真实设备上验证修复和回归

不再等待TestFlight处理时间了!

  • 查看功能之前合并
  • 直接在PR中给出反馈
  • 确认实现与需求相符
  • 减少审查周期

开发者

  • 获取更快速的对变化的反馈
  • 即时演示功能给利益相关者
  • 使用特定用户来调试问题
  • 减少管理beta版本的时间

比较:传统版vs PR预览

方面 TestFlight/Beta Capgo PR预览
构建时间 15-30 分钟 小于1分钟
切换PR 5+分钟重新安装 10秒
设置复杂度 App Store凭证 一个工作流文件
清理 手动 自动
原生 code 必需 (仅 JS) 可选

最佳实践

  1. 明确命名频道: 使用 pr-{number} 约定以便识别
  2. 自动清理: PR 关闭时始终删除频道
  3. 限制访问: 只在 debug/staging 构建中启用 shake 菜单
  4. 记录过程: 在 PR 模板中添加测试指南
  5. 处理失败: 在发布评论之前检查渠道创建是否成功

什么时候不使用 PR 预览

PR 预览适用于 JavaScript/CSS 变更。如果您的 PR 包含:

  • 新 Capacitor 插件
  • iOS 原生 code 变更
  • Android 原生 code 变更
  • 影响原生构建的依赖更新

您需要传统的 TestFlight/Play Store 分发来处理这些变更。

与 Channel Surfing 结合使用

PR预览最好与 频道浏览结合使用。您的应用程序可以具有:

  • production - 对所有用户的稳定版本
  • beta - 对特定PR的功能预览
  • pr-123 - 对特定PR的早期访问

测试者可以在同一应用程序中切换到任何PR频道,测试功能,然后切回 - 所有这些都可以在同一应用程序中完成。

资源

结论

PR 预览将改变您的团队如何审阅和测试移动功能。您不再需要等待 TestFlight 处理和管理多个 beta 版本,测试人员可以在几秒钟内切换到任何 PR 通道,使用他们已经安装的应用程序。

设置很简单 - 只需一个 GitHub Actions 工作流文件 - 利益会在您的团队中积累。QA 不会被阻塞,产品经理可以更快地审阅,开发人员可以获得更快的反馈。

首先,将工作流添加到一个仓库中,看到它如何改变您的审阅流程。

继续阅读 Turn Every Pull Request Into an Installable Preview

如果您正在使用 Turn Every Pull Request Into an Installable Preview 来规划通道路由和阶段性发布,连接它到 Channels context Capgo release channels feature name. Page/area: Capgo solutions marketing page. Role: Short UI label or navigation item. Seen in: page solutions/white-label.astro. Message key `solutions_white_label_visual_cell2_value` (Solutions White Label Visual Cell2 Value). 为 Channels 的实现细节 Channels 为 Channels 的实现细节 Beta 测试解决方案 为 Beta 测试解决方案中的产品工作流程 版本目标解决方案 为版本目标解决方案中的产品工作流程

实时更新Capacitor应用

当一个web层bug处于活跃状态时,通过Capgo将修复推送到用户,而不是等待几天的应用商店审批。用户在后台接收更新,而原生变化仍然在正常的审批路径中。

来自马丁的人性化支持

立即开始

最新博客

Capgo gives you the best insights you need to create a truly professional mobile app.