uniapp开发Android、iOS的一些踩坑记录

961 阅读4分钟

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打包后上架应用商店报版本问题

上传的时候报:

c88b5427a06e2ab7fa8dd17930da8b5.jpg

这是别人提的:

42f879356b4059735fbbb72a9f134e4.png

按照官方文档:uniapp.dcloud.net.cn/tutorial/ap…

1752725006031.png

现实是我的Hbuilder是最新版本4.66。打包出来还是17.5的版本。

解决方案

#删除node_modules
rm -rf node_modules/

#升级uni-cli到最新版本
pnpm run uvm

#重新安装所有软件包
pnpm install

最后在HBuilder上重新进行ios云打包

done!!

5. 应用提交到华为商店时报审核不过

您的应用被系统检测出存在安装失败功能问题,影响用户体验。

890037eb5e3a1fe3290a6445e3e7b60.jpg

解决方案

阅读反馈信息:测试环境中设备为:nova7pro harmonyOS 2.0.0。我发现nova7pro harmonyOS 2.0.0是基于Android10的。API等级是29,而uniapp的默认API版本是30,所以需要调整API等级为29重新打了一个生产包。

1753413003884.png

6. 点击打包时报“缺少相关配置,查看如何解决”

第一步需要将原生隐私弹出勾选

image.png

第二步:在源码视图里添加:

image.png

done!!