uni-app iOS 白屏报错不能定位代码

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

uni-app iOS 白屏报错不能定位代码

开发环境 版本号 项目创建方式
Mac 13.5 (22G74) HBuilderX

示例代码:

附件中 chapter.js 报错的 e.apply

function Ff(e) {
    return function() {
        try {
            return e.apply(e, arguments)
        } catch (t) {
            console.error(t)
        }
    }
}

这个代码不是我写的,看起来是支付宝云请求的代码

操作步骤:

请查看附件

预期结果:

不回出现白屏

实际结果:

很多用户反馈打开就白屏

bug描述:

上线很多用户反馈 iOS 端出现白屏不能正常使用。【本地测试正常,线上 Android 也正常】

查看数据库表 uni-stat-error-logs 创建大量的错误信息,使用 sourcemap 不能定位代码位置,附件带文件

page_url:“uni-jsframework.js” [WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE] name:UniApp,arg:TypeError: undefined is not an object,exception :$@

以及

page_url:“pages/book/chapter/chapter.nvue” [WX_KEY_EXCEPTION_WXBRIDGE] [undefined:2:1056] TypeError: undefined is not an object (evaluating ‘e.apply’) js stack: @

这个问题我觉得是支付宝云的问题,因为自从阿里云切换到支付宝云后就大量出现这个问题。

ipafile.zip


4 回复

能不能出一个报错的解释说明,上传的 sourcemap 看起来跟这个报错没有什么关系


本地是否可以付现,切换成 demo 的阿里云是否正常,缩小下问题范围

我这边本地没能复现,只有线上用户反馈,主要是看不懂这个报错,不能定位具体的代码

针对uni-app在iOS设备上出现白屏报错且难以定位代码的问题,这通常是由于代码执行异常、资源加载失败或系统兼容性问题导致的。为了更有效地排查和修复这类问题,以下是一些实用的方法和相关的代码案例,帮助你定位和解决iOS白屏问题。

1. 启用远程调试

首先,确保你的uni-app项目已经启用了远程调试功能,这样你可以在开发者工具中实时查看和调试iOS设备上的日志。

// 在uni-app的manifest.json中配置
{
  "mp-weixin": { // 示例,其他平台类似配置
    "appid": "your-app-id",
    "setting": {
      "debug": true // 启用调试模式
    }
  }
}

注意:iOS远程调试通常依赖于Safari的开发者工具。

2. 捕获全局异常

在App的入口文件(如main.js)中,添加全局异常捕获,以记录可能的错误。

// main.js
Vue.config.errorHandler = function (err, vm, info) {
  console.error('Vue Error:', err, vm, info);
  // 可以将错误信息发送到服务器或保存到本地
};

window.onerror = function (message, source, lineno, colno, error) {
  console.error('Global Error:', message, source, lineno, colno, error);
  // 发送错误信息
};

3. 检查资源加载

确保所有必要的资源(如图片、字体、脚本等)都已正确加载,并且路径无误。

<!-- 示例:在Vue组件中引用静态资源 -->
<template>
  <div>
    <img src="/static/logo.png" alt="Logo">
  </div>
</template>

4. 兼容性检查

检查代码中是否有使用到不兼容iOS的API或特性。

// 示例:检查平台并做相应处理
if (process.env.PLATFORM === 'ios') {
  // iOS特定代码
} else {
  // 其他平台代码
}

5. 使用日志记录

在关键代码段添加日志记录,帮助定位问题发生的位置。

console.log('Entering function X');
try {
  // 执行关键代码
} catch (error) {
  console.error('Error in function X:', error);
}
console.log('Exiting function X');

结论

通过上述方法,你可以更有效地捕获和分析uni-app在iOS设备上的白屏报错。记得在发布前关闭调试模式和错误日志记录,以保护用户隐私和避免不必要的性能开销。如果问题依然存在,可能需要深入分析具体的代码逻辑或咨询uni-app社区和官方支持。

回到顶部