Capawesome/App-Update iOS端当前版本与可用版本格式不一致问题求助
iOS端capawesome/app-update插件版本格式不一致问题解决
问题现象
使用capawesome/app-update插件时,iOS端返回的currentVersion与availableVersion格式不统一:
currentVersion仅为应用短版本号,示例:"1.0.0"availableVersion包含短版本号+Bundle Version(Build号),示例:"1.0.0 (25)"
需要在版本对比中纳入Bundle Version,但无法通过该插件直接获取当前应用的Bundle Version,同时不清楚格式差异的原因。
原因分析
- 插件获取
currentVersion时,读取的是iOS应用的CFBundleShortVersionString(用户可见的应用版本号) availableVersion直接取自App Store返回的完整版本信息,App Store默认返回包含CFBundleVersion(Build号)的格式,因此出现两者格式差异
解决方案
1. 获取当前应用的Bundle Version并统一格式
借助Capacitor官方的@capacitor/app插件获取当前应用的Build号,再拼接成与availableVersion一致的格式:
import { App } from '@capacitor/app'; import { AppUpdate } from "@capacitor/capacitor-app-update"; // 获取当前应用Build号 const appInfo = await App.getInfo(); const currentBuild = appInfo.build; // 获取插件版本信息并拼接完整版本 const updateInfo = await AppUpdate.getAppUpdateInfo(); const currentFullVersion = `${updateInfo.currentVersion} (${currentBuild})`; // 此时currentFullVersion格式与availableVersion一致,可直接对比
2. 拆分availableVersion进行精准对比
如果不需要统一格式,可拆分availableVersion,分别对比短版本号和Build号:
import { App } from '@capacitor/app'; import { AppUpdate } from "@capacitor/capacitor-app-update"; const updateInfo = await AppUpdate.getAppUpdateInfo(); const availableVersion = updateInfo.availableVersion; // 正则提取短版本号和Build号 const versionMatch = availableVersion.match(/^(.+) \((\d+)\)$/); if (versionMatch) { const availableShortVersion = versionMatch[1]; const availableBuild = versionMatch[2]; // 获取当前应用Build号 const appInfo = await App.getInfo(); const currentBuild = appInfo.build; // 分别对比版本号与Build号 if (availableShortVersion > updateInfo.currentVersion || availableBuild > currentBuild) { // 执行更新逻辑 } }
3. 插件配置检查(可选)
目前插件官方文档未提及控制availableVersion返回格式的配置项,因此上述两种方案为更可靠的解决路径。
内容的提问来源于stack exchange,提问作者jd314159
相关产品推荐
相关产品推荐

