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
解决了,是条件编译的问题。
这两个条件编译只能在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 上可能无法正常运行(例如
eval、Function构造函数等)。确保代码在 iOS 环境中是兼容的。 - 平台差异:使用
uni.getSystemInfoSync()检查运行环境,确保代码在不同平台上表现一致。
2. 调试模式
- 本地调试:在本地运行
uni-app项目,使用 HBuilderX 或 Chrome DevTools 调试,确保代码在模拟器和真机上都能正常运行。 - 日志输出:在关键代码处添加
console.log或uni.showToast,观察函数执行情况。
3. 云打包日志
- 下载日志:在云打包完成后,下载并查看打包日志,检查是否有编译或打包错误。
- 调试符号:确保打包时开启了调试符号(Debug Symbols),以便在真机调试时能够定位问题。
4. 真机调试
- 连接真机:将 iOS 设备连接到电脑,使用 Xcode 直接运行打包后的
.ipa文件,查看控制台日志。 - Xcode 调试:在 Xcode 中打开项目,设置断点,逐步调试代码,定位问题。
5. 异常捕获
- 全局异常捕获:使用
uni.onError或window.onerror捕获全局异常,记录错误信息。 - Promise 异常:使用
try-catch或Promise.catch捕获异步操作中的异常。 - iOS 特定异常:某些 iOS 原生 API 可能抛出异常,确保使用
try-catch包裹相关代码。
6. 插件或原生代码问题
- 检查插件:如果使用了第三方插件,确保插件在 iOS 上兼容,并按照文档正确配置。
- 原生代码:如果集成了原生代码,检查是否有 iOS 相关的权限或配置缺失。
7. 打包配置
- 检查配置:确保云打包时的配置正确,例如
manifest.json中的app-plus配置项。 - 权限问题:检查是否有必要的权限(如网络、相机等)未在
manifest.json中声明。
8. 更新 uni-app 和 HBuilderX
- 版本问题:确保使用的
uni-app和HBuilderX是最新版本,避免已知的 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);
});

