uni-app 云端打包 plus.runtime.getProperty 获取 versionCode 在 ios 平台出现错误

uni-app 云端打包 plus.runtime.getProperty 获取 versionCode 在 ios 平台出现错误

开发环境 版本号 项目创建方式
Mac 11.4 HBuilderX
iOS IOS 14

产品分类:uniapp/App


PC开发环境操作系统:Mac


HBuilderX类型:正式


HBuilderX版本号:3.1.18


手机系统:iOS


手机系统版本号:IOS 14


手机厂商:苹果


手机机型:iphone 12


页面类型:vue


打包方式:云端


示例代码:

await new Promise((resolve, reject) => {  
    plus.runtime.getProperty(plus.runtime.appid, info => {  
        // console.log(info,plus.runtime.versionCode)  
        versionCode = parseInt(info.versionCode)  
        Sysinfo = info  
        resolve(info)  
    })  
})

更多关于uni-app 云端打包 plus.runtime.getProperty 获取 versionCode 在 ios 平台出现错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html

20 回复

此问题产生的原因是由于安心打包的时候 manifest.json 配置文件没有替换成功导致的,HBuilderX 3.2.0 版本已修复此问题

更多关于uni-app 云端打包 plus.runtime.getProperty 获取 versionCode 在 ios 平台出现错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html


是 versionName 还是 versionCode? 把 ipa 包上传一下看看

都没获取对,比如我当前版本versionName是1.1.4 versionCode是114,那么我通过plus.runtime.getProperty获取到的是1.1.1和111此版本是我当时app store发布的版本

附件无法上传 大小限制了

回复 6***@qq.com: 传网盘发下链接

回复 DCloud_iOS_XHY: 包里的info.plist中的对应都没问题,只有通过api获取的有问题

回复 6***@qq.com: 你这个包是自己使用离线SDK打的包吧,应用资源 manifest.json 中版本好写的就是 1.1.1 另外,我看你今天上午使用云打包过,那个包是正常的吧

回复 DCloud_iOS_XHY: 我都是云打包的。。用的安心打包功能,现在的版本我不敢确定,因为我在自定义基座上是好的

回复 DCloud_iOS_XHY: info.plist中是1.1.4吧

回复 6***@qq.com: 回复 DCloud_iOS_XHY: 我看了,manifest.json中确实是1.1.1,但是info.plist中是1.1.4,我用的安心打包,我这里只有在源码中的manifest.json中才能修改版本

回复 DCloud_iOS_XHY: 不过最新打包的是正常了

回复 DCloud_iOS_XHY: 最新版本的是好了,能确定的是6月27号之前打的包都是这种情况,Pandora中的manifest.json的版本都是1.1.1

回复 DCloud_iOS_XHY: 我测出来了,连续升版本安心打包就会出现这个问题,你们测测看吧

目前连续升版本的安心打包,iOS会有包里的manifest.json不会替换为新版本manifest.json的问题,
如:当前安心打包1.1.1版本,之后又打包1.1.2版本(安心打包),就会出现1.1.2版本内部plus.runtime.getPerporty获取的
版本号为1.1.1(因为包里的apps目录中的manifest.json没有进行替换),具体结果还要等官方回复

好的,我们按照这个方式在排查一下问题

7月27日,这个问题还没有修复。 我遇到了

我现在不用安心打包这个功能了,还是使用传统打包

回复 6***@qq.com: 3.2.0版本已修复此问题

在 iOS 平台使用云端打包时,plus.runtime.getProperty 获取 versionCode 出现错误是因为 iOS 的版本号机制与 Android 不同。iOS 使用 CFBundleVersion(构建版本号),而 Android 使用 versionCode(整型版本代码)。在 iOS 上,versionCode 可能返回 null 或未定义,导致 parseInt 转换出错。

解决方法:

  1. 检查返回值类型:在 iOS 中,info.versionCode 可能不存在,建议使用 info.version(对应 CFBundleShortVersionString,即用户可见的版本号)或检查 info 对象中的其他属性。
  2. 添加平台判断:通过 uni.getSystemInfoSync().platform 判断当前平台,在 iOS 上使用 info.version 替代 versionCode
  3. 错误处理:在解析前添加类型检查,避免 parseInt 对非数值操作。

示例修改:

plus.runtime.getProperty(plus.runtime.appid, info => {
    let versionCode;
    if (uni.getSystemInfoSync().platform === 'ios') {
        versionCode = info.version; // 使用版本字符串
    } else {
        versionCode = parseInt(info.versionCode) || 0;
    }
    // 处理 versionCode
});
回到顶部