问得好。
我并非在提供法律建议。我只是在分享那些为了确保 Capacitor 应用安全交付,在各团队中被广泛采用的实用方案。
关键的区别在于:
- 原生提交 对于新的原生行为和重大功能,仍然需要进行审核。
- Live Updates 用于在现有 App 范围内进行 JavaScript/Web 端的修复和调整。
iOS 和 Android 都可以采用这种模式,但你必须将其视为一种 符合政策的工作流,而非漏洞。
Apple 和 Google 允许什么(通俗版)
你可以将 Apple 和 Google 的界限看作是相似的:
- 你可以直接交付由嵌入式 Web 层 (HTML/CSS/JS) 解析的 code,而无需重新提交审核。
- 你不应利用该渠道添加会改变 App 用途的重大功能。
- 你不应仅通过 JS 来更改关键的安全或分发控制。
Apple 关于 WebKit/JavaScript 更新的官方指南是该模式的核心。Google 对 Web 更新的限制通常较少,但原则相同:将原生变更保留在 Native Build 中。
Capgo 适合做什么
Capgo 适用于:
- 修复 Web 端 Bug,
- 安全的 UI 文案、样式或流程修复,
- 现有页面的轻量逻辑修正,
- 面向内部 QA 的快速实验。
Capgo 不适用于:
- 添加权限或新的 Native 能力,
- 发布需要经过审核的核心功能,
- 更改签名、加密或包身份行为。
推荐的发布策略
请按两条路径思考:
方案 1:原生通道(应用商店审核)
以下情况请走常规的 Capacitor 发布流程:
- 新的插件更新,
- App Shell 或 manifest 变更,
- 权限更新,
- 平台特定功能变更。
这些需要:
bun run build
bunx cap sync
# then App Store / Google Play submission flow
方案 2:JS 通道(Capgo)
对于安全的小型运行时变更:
bun run build
bunx @capgo/cli deploy --channel staging
bunx @capgo/cli deploy --channel production
这样既能保持二进制文件本身稳定,又能快速迭代,无需上传新的二进制文件。
如何避免“糟了,这需要原生发布”
每次 Capgo 发布前,先过一遍这个快速检查:
- 该变更是否涉及新的原生依赖或权限?
- 它是否改变了应用宣称的功能?
- 它是否会改变身份验证或安全边界?
- 我们能否将其描述为不破坏兼容性的 JavaScript 修复?
如果 (1)-(3) 的回答为“是”,请提交原生版本。 如果仅 (4) 为“是”,请通过 Capgo 发送。
这对合规团队意味着什么
- 你可以将 App Store 审核额度留给更有意义的变更。
- 你可以保留回滚控制权并实现快速补丁。
- 通过在全量发布前在 channels 中测试更新,降低生产风险。
这与大型 Capacitor 项目在生产环境中的做法一致:仅针对 JS 修复进行快速更新,仅针对真实的二进制文件进行原生审核。
如果想更进一步,请结合基于 channels 的严格环境策略,确保 QA 不会收到生产环境的错误。这就是 Capgo 推荐的保持 staging、beta 和 production 环境纯净的原生方式。
继续阅读《如何更新 Capacitor JS 应用而无需重复应用商店审核》
如果你正在使用 如何更新 Capacitor JS 应用,而无需反复经过应用商店审核 要规划商店审核与分发,请将其与 @capgo/capacitor-in-app-review 有关 @capgo/capacitor-in-app-review 中的实现细节, 使用 @capgo/capacitor-in-app-review 有关《使用 @capgo/capacitor-in-app-review》中的原生能力, @capgo/capacitor-native-market 有关 @capgo/capacitor-native-market 中的实现细节, 使用 @capgo/capacitor-native-market 有关《使用 @capgo/capacitor-native-market》中的原生能力,以及 Capacitor OTA 更新:App Store 审核指南 有关 Capacitor OTA 更新:App Store 审核指南的实际背景。