StudySmarter - 学校与大学
课程、课件及订阅变更需经利益相关者审核的教育类 App。
- Google Play 安装量
- 650万
- 应用商店评分
- 4.8
您的 CI 会将每个 Pull Request 的 Web build 上传到专属的 Capgo channel。审核人员只需扫描 QR code 或在 App 中切换 channel 即可在设备上进行测试,且 channel 会在 PR 关闭时自动删除。若涉及 native code 的更改,仍需重新进行 Native Build。
问题
开发者提交 PR
代码已准备好进行审核,但目前还无法在真机上进行测试。
构建、签名并上传
有人需要为该分支构建 Native Build,进行签名,上传至 TestFlight 或 Play 测试轨道,然后等待处理。
邀请并安装
审核人员需要被添加为测试员,并安装对应的构建版本。
每个修复都要重复上述流程
针对 code 的每一条修改意见,都意味着一次新的构建、上传和安装。
即使只是修改了 JavaScript,每一轮审核仍需等待 Native Build。
每次 build
等待商店处理
你上传到 TestFlight 或 Play 测试轨道的每次 build,在测试人员安装前都需要经过处理。每个 build 都会经历这个过程。
每个 PR
都需要单独的 Native Build 进行测试
如果没有 Live Update,即使只是 Web 端的改动,审核人员也必须等待有人完成构建、签名并上传新的二进制文件后才能进行测试。
反馈滞后
审核时开发者已转向其他任务
当审核需要等待 build 时,反馈会延迟到达,导致开发者已在处理其他任务,且该分支也逐渐偏离了 main 分支。
工作原理
四个 CI 步骤:一次性设置 scoped key,每次 push 时 upload,分享预览,关闭时清理。以下所有命令均来自 Capgo 文档。
管理员为 CI 创建一个 App Preview API 密钥。它可以创建预览 channel 并 upload bundles,但无法更改您的默认或生产 channel。每个 App 仅限开启一次预览功能。
# once, run by an admin (not the preview key)
npx @capgo/cli@latest app set com.example.app --preview
App Preview API 密钥
每次 push 时,CI 会构建 Web App 并以唯一的 bundle 版本进行 upload。如果不存在,bundle upload --channel 会自动创建 pr-<number> channel 并将 bundle 与之关联。
npx @capgo/cli@latest bundle upload com.example.app \
--apikey "$CAPGO_PREVIEW_KEY" \
--path ./dist \
--channel "pr-$PR_NUMBER" \
--bundle "1.2.3-pr.$PR_NUMBER.$GITHUB_RUN_NUMBER"
在 channels 文档中查看 PR 预览
get-qr 会为该 channel 打印 QR code,或通过 --url 获取预览 URL,以便 CI 将其添加到 PR comment 中。
npx @capgo/cli@latest get-qr com.example.app \
--channel "pr-$PR_NUMBER" \
--apikey "$CAPGO_PREVIEW_KEY" \
--url
get-qr 参考文档
在 pull request closed 事件中运行此操作。使用 App Preview 密钥时,它只会删除该密钥创建的 channel 及关联的 bundle。
npx @capgo/cli@latest channel delete \
"pr-$PR_NUMBER" com.example.app \
--apikey "$CAPGO_PREVIEW_KEY" \
--delete-bundle \
--success-if-not-found
channel CLI 参考
两者都需要支持自助分配的 channel。App Preview key 无法设置此项,因此使用该 key 时,请分享 QR 预览或在控制台中设置设备覆盖。
在内部构建中开启摇一摇菜单。测试人员摇晃设备即可打开 Capgo 的测试菜单,摇一摇频道选择器则让他们选择频道。
// capacitor.config.ts (internal builds)
CapacitorUpdater: {
shakeMenu: true,
}
在开发者设置页面添加一个频道字段,并用 PR 频道名称调用 setChannel()。
import { CapacitorUpdater } from '@capgo/capacitor-updater'
await CapacitorUpdater.setChannel({
channel: 'pr-123',
triggerAutoUpdate: true,
})
setChannel() 参考
任何评审 Pull Request 的人都能在手机上查看,而不只是作者。
寻找符合您团队需求的解决方案
使用 Capacitor 构建的应用
学习、活动及社区类应用可以同时对 onboarding、练习、直播课程和订阅变更进行审核。通过 PR previews,产品、QA 和支持团队可以在合并代码前检查移动端就绪的 build。
课程、课件及订阅变更需经利益相关者审核的教育类 App。
活动流程需在合并前进行测试的实时互动类 App。
社区应用,其锦标赛和分析界面通过设备预览功能获得更好的开发体验。
CTO, 私有
“搭建过程不到一天。基于 Channel 的发布机制让我能在推送到生产环境之前,先在自己的设备上进行测试。”
nethead emeritors
“updater plugin 做得太棒了。对我来说运行非常完美,Live Update 极大地缩短了快速测试的周期。”
开发者,Webincode
“能把特定 Device ID 加入指定分组,并只向这些分组推送更改,太救命了。”
常见问题
为 CI 配置人员和代码评审人员提供直截了当的解答。
如果 PR 只改动了 Web 层,则不需要。评审人员只需安装一次 App,每个 PR 的 JavaScript、HTML、CSS 和 assets 都会推送到各自独立的 channel。如果 PR 添加了 plugin 或更改了原生 code,则需要进行 Native Build。可以在 CI 中运行 build 检查来检测此类变更。
哪些情况需要 Native Build使用 App Preview API key 则不会。它只能创建 preview channels、upload bundles,并且只能删除由其创建的 channel 和 bundle。它无法更改默认或主 channel。在 GitHub Actions 中,请在 pull_request 事件而非 pull_request_target 上运行 job,并将其限制在来自同一仓库的 PR。
App Preview API 密钥管理员只需运行一次 app set --preview 即可启用预览。之后,get-qr 会为该 PR channel 打印一个 QR code,而 --url 会打印 Web 预览 URL 和 deep link。直接将它们发布在 PR comment 中即可。
get-qr 参考文档可以在 pull request closed 事件中添加一个 job,运行带有 --delete-bundle 和 --success-if-not-found 参数的 channel delete 命令。使用 App Preview key,这会同时移除该 channel 及其关联的 bundle。对于早期 push 产生的 bundles,可以使用具有 delete 权限的 key 通过 bundle cleanup 进行清理。
CLI channel 引用支持。由于步骤均为 Capgo CLI 命令,因此可以在任何 CI 中运行。文档中提供了 GitHub Actions、GitLab CI、Bitbucket Pipelines 和 Azure DevOps 的集成指南。
CI/CD 集成在免费试用期间,将 upload、QR 和 cleanup 步骤添加到您的 CI 中,并在自己的 App 上进行测试。
体验 Capgo PR 预览:每个 Pull Request 都有专属的 live update channel。
来自 Martin 的人工支持
14 天无限免费试用。无需信用卡 14 天退款保证。随时取消。
14 天免费试用,无需信用卡。Native 变更仍需重新进行 Native Build。