uni-app cli 云打包后的 IOS APP 某些函数无法运行,捕捉的异常无法定位问题所在

uni-app cli 云打包后的 IOS APP 某些函数无法运行,捕捉的异常无法定位问题所在

开发环境 版本号 项目创建方式
Mac 14.4.1 CLI

产品分类:uniapp/App

PC开发环境操作系统:Mac

手机系统:iOS

手机系统版本号:iOS 17

手机厂商:苹果

手机机型:iphone13pro

页面类型:vue

vue版本:vue2

打包方式:云端

CLI版本号:2.0.2-4000820240401001


示例代码:

async createEvent(eventInfo) {  
    try {  
        const { dateInfo, scheduleId, editInfo } = this;  
        const { takeTime, eventName } = eventInfo || {};  
        uni.showLoading({  
            title: `正在${scheduleId ? "更新" : "创建"}`,  
            mask: true,  
        });  
        if (scheduleId) {  
            await apiDeleteTemplateSchedule(scheduleId);  
            await apiCreateTemplateSchedule({  
                ...editInfo,  
                content: eventName || "临时日程",  
                timeZone: getDefaultTimeZone(),  
                title: eventName || "临时日程",  
                takeTime,  
            });  
        } else {  
            await apiCreateTemplateSchedule({  
                content: eventName || "临时日程",  
                end: dateToDateStr(dateInfo.endTime),  
                start: dateToDateStr(dateInfo.startTime),  
                timeZone: getDefaultTimeZone(),  
                title: eventName || "临时日程",  
                takeTime,  
            });  
        }  
        await this.fetchSchedule();  
        uni.hideLoading();  
        this.$refs.ScheduleCalendar.cancelSelected();  
        uni.$emit("calendarSetData", {  
            show: false,  
        });  
    } catch (e) {  
        const { dateInfo, scheduleId, editInfo } = this;  
        uni.showModal({  
            title: "Error",  
            content: JSON.stringify({  
                e,  
                dateInfo,  
                scheduleId,  
                editInfo,  
            }),  
            showCancel: false,  
        });  
    }

错误日志

[WX_KEY_EXCEPTION_WXBRIDGE] exception: TypeError: undefined is not an object (evaluating 'this.$vm.$destroy')  
@  
@  
callbackFromNative@  
@  
global code@  
------------uni-app runtime error------------  
stack:$remove[@weex-main-jsfm](/user/weex-main-jsfm).js:2:129087  
[@weex-main-jsfm](/user/weex-main-jsfm).js:2:123459  

[WX_KEY_EXCEPTION_WXBRIDGE] exception: TypeError: null is not an object (evaluating 'i.addEventListener')
 stack:addEventListenerToWebview[@app-service](/user/app-service).js:1:146692
[@app-service](/user/app-service).js:1:146576
[@weex-main-jsfm](/user/weex-main-jsfm).js:2:548258
[@weex-main-jsfm](/user/weex-main-jsfm).js:2:1418
map@[native code]

更多关于uni-app cli 云打包后的 IOS APP 某些函数无法运行,捕捉的异常无法定位问题所在的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

解决了,是条件编译的问题。 这两个条件编译只能在uts里面用 // #ifdef APP-IOS // #ifdef APP-ANDROID 如果要判断不同端,推荐大家用 // #ifdef APP-PLUS
const { platform } = uni.getSystemInfoSync();
const isIOS = platform === “ios”;
const isAndroid = platform === “android”;
// #endif

更多关于uni-app cli 云打包后的 IOS APP 某些函数无法运行,捕捉的异常无法定位问题所在的实战教程也可以访问 https://www.itying.com/category-93-b0.html


H5、微信小程序、安卓端正常运行。 IOS报错。

IOS只有在生产环境打包的时候会报错,自定义基座运行正常。

因为该问题仅在IOS打包后出现,有没有办法提供打包后的IOSAPP调试。不然每次都需要使用云打包加上uni.showModal()去调试,成本有点高。

收集的错误日志没办法定位到代码是哪里异常

在使用 uni-app CLI 进行云打包后,如果 iOS 应用中的某些函数无法正常运行,且捕捉的异常无法准确定位问题,可以按照以下步骤进行排查和解决:


1. 检查代码兼容性

  • iOS 限制:某些 JavaScript 或 API 在 iOS 上可能无法正常运行(例如 evalFunction 构造函数等)。确保代码在 iOS 环境中是兼容的。
  • 平台差异:使用 uni.getSystemInfoSync() 检查运行环境,确保代码在不同平台上表现一致。

2. 调试模式

  • 本地调试:在本地运行 uni-app 项目,使用 HBuilderX 或 Chrome DevTools 调试,确保代码在模拟器和真机上都能正常运行。
  • 日志输出:在关键代码处添加 console.loguni.showToast,观察函数执行情况。

3. 云打包日志

  • 下载日志:在云打包完成后,下载并查看打包日志,检查是否有编译或打包错误。
  • 调试符号:确保打包时开启了调试符号(Debug Symbols),以便在真机调试时能够定位问题。

4. 真机调试

  • 连接真机:将 iOS 设备连接到电脑,使用 Xcode 直接运行打包后的 .ipa 文件,查看控制台日志。
  • Xcode 调试:在 Xcode 中打开项目,设置断点,逐步调试代码,定位问题。

5. 异常捕获

  • 全局异常捕获:使用 uni.onErrorwindow.onerror 捕获全局异常,记录错误信息。
  • Promise 异常:使用 try-catchPromise.catch 捕获异步操作中的异常。
  • iOS 特定异常:某些 iOS 原生 API 可能抛出异常,确保使用 try-catch 包裹相关代码。

6. 插件或原生代码问题

  • 检查插件:如果使用了第三方插件,确保插件在 iOS 上兼容,并按照文档正确配置。
  • 原生代码:如果集成了原生代码,检查是否有 iOS 相关的权限或配置缺失。

7. 打包配置

  • 检查配置:确保云打包时的配置正确,例如 manifest.json 中的 app-plus 配置项。
  • 权限问题:检查是否有必要的权限(如网络、相机等)未在 manifest.json 中声明。

8. 更新 uni-app 和 HBuilderX

  • 版本问题:确保使用的 uni-appHBuilderX 是最新版本,避免已知的 Bug。
  • 依赖更新:更新项目依赖,确保所有第三方库兼容当前环境。

9. 联系官方支持

  • 反馈问题:如果问题仍未解决,可以在 uni-app 官方论坛或 GitHub 仓库提交问题,提供详细的错误日志和复现步骤。

10. 示例代码

以下是一个全局异常捕获的示例:

// 全局异常捕获
uni.onError((err) => {
  console.error('全局异常:', err);
  uni.showToast({
    title: '程序发生错误,请稍后重试',
    icon: 'none'
  });
});

// Promise 异常捕获
Promise.prototype.catch((err) => {
  console.error('Promise 异常:', err);
});
回到顶部