uni-app iOS系统热更新后,再从AppStore更新整包,第二次打开会卡在启动页,杀掉后台重新打开也卡启动页,卸载后重新到AppStore下载安装无此问题

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app iOS系统热更新后,再从AppStore更新整包,第二次打开会卡在启动页,杀掉后台重新打开也卡启动页,卸载后重新到AppStore下载安装无此问题

信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Mac
PC版本号 13.4.1
HBuilderX类型 正式
HBuilderX版本号 4.29
手机系统 iOS
手机版本号 iOS 17
手机厂商 苹果
手机型号 iphone 15 plus
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

iOS app 热更新过,再从AppStore更新整包,第二次打开会卡在启动页,杀掉后台重新打开也是卡再启动页,卸载后重新到AppStore下载安装无次问题

预期结果:

ios app热更新后,再从应用市场更新整包,可以正常打开

实际结果:

iOS app 热更新过,再从AppStore更新整包,第二次打开会卡在启动页,杀掉后台重新打开也是卡再启动页,卸载后重新到AppStore下载安装无次问题

bug描述:

iOS app 热更新过,再从AppStore更新整包,第二次打开会卡在启动页,杀掉后台重新打开也是卡再启动页,卸载后重新到AppStore下载安装无次问题


1 回复

针对你提到的uni-app在iOS系统上热更新后再通过App Store更新整包导致卡在启动页的问题,这通常是由于热更新缓存与整包更新内容不一致所导致的冲突。为了解决这个问题,可以在代码中添加一些逻辑来处理热更新和整包更新的兼容性问题。以下是一个可能的解决方案,主要涉及到在启动时检查并清理可能的热更新缓存。

解决方案概述

  1. 检测是否为首次启动或版本更新:通过比较当前应用的版本号与上次保存的版本号来判断是否为首次启动或版本更新。
  2. 清理热更新缓存:如果是首次启动或检测到版本更新,则清理热更新相关的缓存文件。

代码实现

// 在App.vue的onLaunch方法中添加以下逻辑
export default {
  onLaunch() {
    const platform = uni.getSystemInfoSync().platform;
    if (platform === 'ios') {
      // 获取当前应用的版本号
      const currentVersion = uni.getSystemInfoSync().version;
      
      // 尝试从本地存储中获取上次保存的版本号
      const lastVersion = uni.getStorageSync('lastAppVersion') || '';
      
      // 判断是否为首次启动或版本更新
      if (currentVersion !== lastVersion) {
        // 清理热更新缓存
        this.cleanHotUpdateCache();
        
        // 更新本地存储中的版本号
        uni.setStorageSync('lastAppVersion', currentVersion);
      }
    }
    
    // 其他启动逻辑...
  },
  
  methods: {
    cleanHotUpdateCache() {
      // 这里假设热更新缓存存储在本地文件系统中
      // 根据实际情况调整路径和文件名
      const cacheDir = uni.env.USER_DATA_PATH + '/hotupdate/';
      const fs = wx.getFileSystemManager();
      
      // 获取目录下文件列表
      fs.readdir({
        dirPath: cacheDir,
        success: res => {
          res.files.forEach(file => {
            // 删除每个文件
            fs.unlink({
              filePath: cacheDir + file,
              success: () => {
                console.log(`Deleted file: ${cacheDir + file}`);
              },
              fail: err => {
                console.error(`Failed to delete file: ${cacheDir + file}`, err);
              }
            });
          });
        },
        fail: err => {
          console.error('Failed to read directory', err);
        }
      });
    }
  }
}

注意事项

  • 上述代码假设热更新缓存存储在应用的本地文件系统中,具体路径和文件名可能需要根据实际情况调整。
  • 在实际项目中,可能需要更复杂的缓存管理逻辑,比如区分不同版本的缓存文件。
  • 确保在清理缓存之前,应用的其他部分不会尝试访问这些缓存文件,以避免潜在的错误。

通过上述方法,可以在应用启动时检测版本变化并清理可能的热更新缓存,从而避免在通过App Store更新整包后出现卡在启动页的问题。

回到顶部