uni-app IOS应用在一次热更新后,再进行原生应用的覆盖安装会卡死在启动页

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

uni-app IOS应用在一次热更新后,再进行原生应用的覆盖安装会卡死在启动页

开发环境 版本号 项目创建方式
Mac Apple M1 Max HBuilderX

产品分类:
uniapp/App

PC开发环境操作系统:
Mac

手机系统:
iOS

手机系统版本号:
iOS 17

手机厂商:
苹果

手机机型:
苹果所有手机

页面类型:
vue

vue版本:
vue2

打包方式:
云端

App下载地址或H5网址:
https://apps.apple.com/cn/app/%E6%B6%A6%E8%8D%AF%E5%95%86%E5%9F%8E/id6449767332

操作步骤:

老版本应用, 打开之后,热更新下载至热更最新版本,再打开应用通过应用商店下载至最新版本,APP卡死在启动页。

预期结果:

老版本应用, 打开之后,热更新下载至热更最新版本,再打开应用通过应用商店下载至最新版本,APP正常访问

实际结果:

老版本应用, 打开之后,热更新下载至热更最新版本,再打开应用通过应用商店下载至最新版本,APP卡死在启动页。

bug描述:

IOS应用在进行一次热更新后,再进行原生应用的覆盖安装会卡死在启动页


1 回复

针对你提到的uni-app在iOS平台上热更新后,原生应用覆盖安装导致卡死在启动页的问题,这通常涉及到热更新机制与原生应用的兼容性问题。下面是一些可能的解决方案,主要通过代码案例来展示如何检查和调整相关配置,以尝试解决这个问题。

1. 清理缓存和临时文件

热更新可能留下了旧的缓存或临时文件,这可能导致应用启动异常。在AppDelegate中,你可以添加代码来清理这些文件。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 清理热更新缓存
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachePath = [paths objectAtIndex:0];
    NSError *error;
    [[NSFileManager defaultManager] removeItemAtPath:cachePath error:&error];
    if (error) {
        NSLog(@"Error removing cache: %@", error);
    }
    
    // 继续其他启动逻辑
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

2. 检查热更新逻辑

确保热更新的逻辑正确无误,特别是关于资源文件和代码文件的替换。以下是一个简化的热更新流程示例:

// 在uni-app中,你可以通过如下方式触发热更新
if (window.uni && window.uni.downloadFile) {
    const updateUrl = 'https://your-server.com/update.zip'; // 热更新包地址
    window.uni.downloadFile({
        url: updateUrl,
        success: (res) => {
            const tempFilePath = res.tempFilePath;
            // 解压并替换旧文件
            window.uni.unzip({
                src: tempFilePath,
                dst: `${window.uni.env.USER_DATA_PATH}/update`,
                success: () => {
                    // 重启应用以应用更新
                    plus.runtime.restart();
                }
            });
        }
    });
}

3. 调试原生代码

使用Xcode的调试工具来跟踪应用的启动过程,特别是关注启动页之后的代码执行。你可以在关键位置添加断点,检查变量的状态,以及是否有异常抛出。

4. 检查第三方库和插件

如果你使用了第三方库或插件,确保它们也支持热更新。有些库可能需要在热更新后进行特定的初始化或清理工作。

5. 更新uni-app和依赖

确保你的uni-app框架和所有相关依赖都是最新的,因为旧版本可能包含已知的bug或不支持某些特性。

通过上述步骤,你应该能够定位并解决应用启动卡死的问题。如果问题依旧存在,可能需要更深入地分析应用的日志或咨询uni-app的官方支持。

回到顶部