1. webView
webview打包为H5时,不能正常通讯,需要用原生的window.postMessage进行。
// iframe往主程序发消息
iframe.parent.postMessage('消息体可以是字符串或者对象', "*")
// 主程序往iframe发消息
iframe.postMessage('消息体可以是字符串或者对象', "*")
2. 天地图
天地图在uniapp打包为H5时,在Android可以正常展示,在iOS端不可以。
排查了很久是天地图script的问题。如果你的h5域名是http的。那你的script的天地图地址也要http。如果你的H5域名是https,那天地图地址也要https。
出现这个问题的原因是Android没有那么严格,而iOS比较严格。
3. 日期解析兼容性问题
uni-app 中 iOS 平台上 JavaScript 日期解析的兼容性问题及解决方案
遇到了一个关于日期解析的问题。在实现显示日期的功能时,从后端 API 获取到的日期字符串格式为 “YYYY-M-D”(例如 “2025-6-26”),期望通过 JavaScript 的 Date 构造函数将其转换为日期对象,以便后续格式化和显示。
然而,发现在变异额到 iOS 平台上运行时,传入这种格式的日期字符串会导致 Date 构造函数返回 NaN(Not a Number),表示解析失败。而在 Android 和 Web 平台上,同样的代码却能正常解析并返回正确的日期对象。
根据 ECMAScript 规范,日期字符串应该符合 ISO 8601 格式,完整的格式为 "YYYY-MM-DDTHH:mm:ss.sssZ",其中:
- "YYYY" 表示四位数的年份
- "MM" 表示两位数的月份 (01-12)
- "DD" 表示两位数的日期 (01-31)
- "T" 是日期和时间的分隔符
- "HH" 表示两位数的小时 (00-23)
- "mm" 表示两位数的分钟 (00-59)
- "ss" 表示两位数的秒 (00-59)
- ".sss" 表示三位数的毫秒 (000-999)
- "Z" 表示时区,可以是 "Z" (UTC) 或者 "+HH:mm" 或 "-HH:mm" 的形式
然而,在实际开发中,我们经常会使用简化的日期格式,如 "YYYY-MM-DD" 或 "YYYY-M-D"。大多数现代浏览器和 JavaScript 引擎能够正确解析这些简化格式,但 iOS 平台的 JavaScript 引擎对日期字符串的解析要求更加严格,需要严格遵循 ISO 8601 格式。
iOS 平台的 JavaScript 引擎要求日期字符串中的月份和日期部分必须是两位数,并且要用零填充。因此,"2025-06-26" 这样的格式能够被正确解析,而 "2023-6-26" 则会解析失败,返回 NaN。
解决方案
创建一个辅助函数 formatDateString,用于将日期字符串转换为 ISO 8601 兼容的格式。
export function formatDateString(dateString) {
// 注意这里是.,因为后端返回的是‘2025.6.26’格式,如果是‘2025-6-26’,则要将.换成-
const dateParts = dateString.match(/(\d{4}).(\d{1,2}).(\d{1,2})/);
if (dateParts) {
const year = dateParts[1];
const month = dateParts[2].padStart(2, '0');
const day = dateParts[3].padStart(2, '0');
return `${year}-${month}-${day}`;
}
return dateString;
}
使用
const newDate = new Date(formatDateString(dateStr))
4. iOS打包后上架应用商店报版本问题
上传的时候报:
这是别人提的:
按照官方文档:uniapp.dcloud.net.cn/tutorial/ap…
现实是我的Hbuilder是最新版本4.66。打包出来还是17.5的版本。
解决方案
#删除node_modules
rm -rf node_modules/
#升级uni-cli到最新版本
pnpm run uvm
#重新安装所有软件包
pnpm install
最后在HBuilder上重新进行ios云打包
done!!
5. 应用提交到华为商店时报审核不过
您的应用被系统检测出存在安装失败功能问题,影响用户体验。
解决方案
阅读反馈信息:测试环境中设备为:nova7pro harmonyOS 2.0.0。我发现nova7pro harmonyOS 2.0.0是基于Android10的。API等级是29,而uniapp的默认API版本是30,所以需要调整API等级为29重新打了一个生产包。
6. 点击打包时报“缺少相关配置,查看如何解决”
第一步需要将原生隐私弹出勾选
第二步:在源码视图里添加:
done!!