跳过主要内容

Capgo Semver Tester

检查频道策略兼容性与native baseline

native版本发送到Capgo作为version_build,来自配置或native app元数据

分配给解析频道的bundle版本

输入两个语义版本号以查看比较

什么是 "本机基线版本"

本机基线版本是发送到 Capgo 的本机应用程序版本,当设备向更新服务器请求一个捆绑包时 version_build 在 Capacitor 应用程序中,这个值可以来自 CapacitorUpdater.versioncapacitor.config.*。如果没有设置该值,则插件会回退到 iOS 或 Android 的本机应用程序版本。不要假设它是你的 package.json 版本,除非你的构建复制该值到配置或本机元数据中。

Capgo 还在使用 version_name To know which downloaded bundle is currently installed. Channel semver policies such as major, minor, and patchversion_build.

Capacitor config

__CAPGO_KEEP_0__ config CapacitorUpdater.version 设置

当您希望应用程序发送一个明确的版本时。 优点:

易于在 iOS 和 Android 构建中保持一致。 缺点:

过时的配置可能会错误地报告版本,如果您忘记在原生发布之前更新它。

原生应用程序版本号使用平台版本号,例如 iOS CFBundleShortVersionString 或 Android versionName.

优点: 与 TestFlight、App Store、Play Store 或内部测试中安装的二进制文件匹配。

缺点: 更改它需要原生构建,并且如果发布设置发生漂移,则可能会根据平台不同。

打包目标

与远程捆绑版本、通道 Semver 规则或上传约束(例如 --native-version.

优点: 防止向旧应用二进制发送需要更新原生 code 的 JavaScript。

缺点: 规则太严格可能会阻止有效的更新,直到通道或捆绑元数据被调整。

为此测试者输入设备发送的原生基线 version_build然后与远程包 版本进行比较 你想要Capgo传递的版本。

为什么Capgo使用语义版本

语义版本 是软件开发中最广泛采用的版本控制标准。 通过使用semver,Capgo确保了在传递实时更新到你的Capacitor应用时的兼容性和安全性。

语义版本标准允许Capgo了解每个更新中包含的具体变化:

  • 补丁更新(1.0.0 → 1.0.1): 修复bug,安全自动应用
  • 次要更新(1.0.0 → 1.1.0): 新功能,向后兼容
  • 主要更新(1.0.0 → 2.0.0): 破坏性更改,需要原生应用商店发布

这防止Capgo将不兼容的更新发送到你的原生code,保护你的用户免受崩溃的影响,并确保你的应用保持稳定。

Flexible Semver Strategies: Beyond Basic Versioning

虽然 Semver 对其核心格式非常严格,但您可以使用 预发布标识符构建元数据:

🏷️ Build Metadata (+) - The "Cosmetic" Layer

1.2.0+20240315.142530
部署跟踪的时间戳
1.2.0+ui.refresh.dark-mode
UI 更新描述
1.2.0+build.4729.commit.a1b2c3d
CI/CD 构建号和 Git 提交

重要: 在版本顺序中忽略元数据 - 1.2.0+anything 等于 1.2.0 用于Capgo的更新逻辑。

🔧 预发布标识符(-)- 开发频道

1.3.0-beta.1
测试频道
1.3.0-hotfix.payment
紧急修复分支
1.3.0-feature.newapi
特性分支测试

注意: 预发布版本具有较低的顺序 1.3.0-beta.1 < 1.3.0

🎯 混合式方法 - 两者兼而有之

1.3.0-rc.1+ui.redesign.20240315
带有 UI 元数据和时间戳的发布候选版本

实用 Semver 使用案例 & 团队策略

🚀 快速启动 / 快速开发

0.1.0 - MVP 首发
0.2.0-beta.1 - 新功能测试
0.2.0+ui.v2 - UI 设计元数据
1.0.0 - 生产就绪

使用 0.x.x 进行预 1.0 开发,设计跟踪元数据

🏢 企业 / 受管制

2.1.0 → 季度发布
2.1.1+sec.patch.cve2024 → __CAPGO_KEEP_0__
2.2.0-rc.1+audit.ready → __CAPGO_KEEP_0__

严格遵循语义版本控制,包含合规元数据

🎮 游戏/创意应用

1.0.0+season.winter.2024 → 季节性内容
1.1.0+event.halloween → 事件驱动功能
1.2.0+assets.hd.remaster → 资产更新

内容追踪的创意元数据

⚡ 热修复策略

1.2.0 → 当前生产
1.2.1-hotfix.payment → 严重错误修复
1.2.1+urgent.20240315.1430 → 以时间戳发布

用于测试的预发布版本、用于部署跟踪的元数据

🌍 多平台战略

1.3.0+ios.optimized → iOS专属优化
1.3.0+android.material3 → Android设计更新
1.3.0+web.pwa.ready → PWA功能

相同版本,平台特定的元数据

🔄 CI/CD集成

1.4.0-alpha.1+build.123 → 自动化预发布
1.4.0+deploy.staging.456 → 阶段部署
1.4.0+prod.final.789 → 生产部署

自动化版本管理与部署元数据

💡 专业提示:
  • 使用构建元数据(+)进行跟踪、时间戳或外观信息,这些信息不会影响兼容性
  • 使用预发布标识符(-)为需要不同更新优先级的开发频道
  • 结合两者以获得最大灵活性: 1.2.0-beta.1+ui.dark.theme.20240315
  • 请记住:Capgo遵循semver优先级规则,因此请根据您的频道策略规划

重要:Capgo严格遵循语义版本

与npm的semver实现不同,Capgo严格遵循官方SemVer规范。npm的node-semver有已知的规范偏差,这可能导致 意外行为.

例如,npm处理版本号 1.0.0-alpha.1 与规范所需的方式不同。请参阅我们的 已报告问题 未被合并的修复尝试 .

有效语义版本

1.0.0 ✓ 标准发布
2.1.3-alpha ✓ 预发布
1.0.0-beta.1 ✓ 预发布带有数字
1.0.0+build.1 ✓ 构建元数据
1.0.0-rc.1+build.1 ✓ 完整版本

无效语义版本

v1.0.0 ✗ 不允许带有 'v' 的版本
1.0 ✗ 缺少补丁版本
1.0.0.0 ✗ 版本部分过多
1.0.0- ✗ 空的预发布
1.0.0+ ✗ 空的构建元数据

Capgo 更新行为

Minor 策略允许在同一主版本.次要版本线上进行补丁级别的更改,例如 1.0.0 -> 1.0.1
Patch 策略阻止 1.0.0 -> 1.0.1。它只允许后缀级别的更改,如 1.0.0-beta.1 -> 1.0.0-beta.2。
Major 策略阻止目标包装件的主版本号高于原生基线,例如 1.0.0 -> 2.0.0
降级保护使用全版本号优先顺序,因此稳定 1.0.0 比 1.0.0-beta.2 新

本工具遵循官方 语义化版本规范 与 npm 的实现不同