iOS混合开发之uni-app本地打包集成到iOS原生项目

1.前言

    前端统一开发越来越多,公司为了大一统前端的所有页面显示问题,同时为节约人力资源成本,决定做前端统一开发的预研以及选型。

2.项目背景

    经过几次讨论后决定前端统一开发选型方案从以下几种方式进行:

  1. flutter
  2. reactnative
  3. uniapp
  4. ionic

各统一开发方案的优劣势与选型结果见文档:app技术选型.docx,提取码: qs6z

    根据实际情况我们选择了uni-app进行后续前端统一开发的语言。其中最重要的有以下几点:

  1. uni-app热度逐渐上升趋势非常明显
  2. uni-app使用vue技术,公司部门内部部分人员已有vue前端开发基础
  3. 中文文档,上手快

3.项目框架

  1. 前端开发框架: HbuilderX 2.5.1
  2. 前端页面开发参考文档:5+Appuni-app开发(ps:因为前期统一使用uni-app进行开发,但是后来发现uni-app在按照文档的方式调用原生NFC读写iOS 13.0以上才支持的功能时不起作用,后来决定采用插件的形式进行iOS原生代码开发,安卓还是按照原有方式进行开发。另外页面显示上你可以直接集成某些vue的页面组件进行开发使用,例如ColorUI
  3. App开发框架:Xcode
  4. 先看文档
  5. 多看文档
  6. 仔细看文档

4.从入坑到踩坑

4.1打包错误

  1. HbuilderX找不到iOS模拟器或真机
    解决方案:Xcode->Preferences->Command Line Tools选上然后重启IDE,如下图在这里插入图片描述
  2. 在演示App上正常显示,但是乱七八槽不确定的东西这么多我上架确定不会被拒吗?iOS创建最简工程参考iOS创建最精简离线打包工程,不要错误的参考了iOS离线打包,,也不要参考IOS平台5+SDK技术白皮书.docx(可以简单看一下,比较全但实际开发还是要看自己需求的,这明显不符合我的uni-app需求),不然你会在这条道路上越走越远。
  3. iOS创建工程运行时各种Error:根据error信息提示缺啥静态库动态库在下载的(5+ SDK下载)的SDK中找到补啥。
  4. 运行到模拟器或者真机弹框提示打包缺少XXX模块
    解决方案:参考5+ SDK下载中Excel表格:Feature-iOS.xls
  5. 使用uni-app iOS NFC读写功能时importClass(“NFCTagReaderSession”)失败
    解决方案:在manifest.json源码视图中添加framework,参考
  6. 开发原生插件请认准自己的项目类型,我的项目框架要去看uni-app,或者更详细的5+app-uniplugin-demo,不要看html5+,也不要看5+ SDK中的插件开发说明。不然你会错的莫名其妙不知所措。
  7. 自定义基座看iOS平台离线生成自定义基座
  8. 在HbuilderX中调用iOS原生插件方法不起作用,本地打包放到在Xcode中试试看!记得先删掉模拟器或真机上的旧基座。

4.2 运行错误

  1. 运行到模拟器或者真机发现弹窗提示各种莫名其妙的ABCD,如下图
    在这里插入图片描述
    解决方案:做一下国际语言本地化生成Localizable.strings。问题参考内容参考

  2. 启动图片未全屏?
    解决方案:info下添加启动图片,参考示例工程info.plist中的字段UILaunchImages

  3. 启动时黑屏,进入页面提示如下图
    在这里插入图片描述

  4. 加上liblibNavigator.a之后,项目报错提示如下图
    在这里插入图片描述
    解决方案:根据提示添加AssetsLibrary.framework、AVFoundation.framework、AddressBook.framework、CoreLocation.framework

  5. 最近提包到苹果市场后会有一个回馈邮件关于UIWebview使用废弃问题

ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs .

    解决方案:Appstore审核反馈废弃UIWebview APIs问题的说明

说两个个我耗时比较久的问题,也比较简单:

  1. 集成到Xcode中显示HbuilderX编译版本高于手机SDK版本,查看详情提示升级HbuilderX需要手动升级手机SDK进入uni-app运行环境版本和编译器版本不一致的问题
    解决方案:到HBuilderX官网下载最新的SDK重新集成到Xcode中
  2. uni-app中使用了uni.getLocation本地打包然后提交App Store总是得到一封ITMS-90683错误提示缺少NSLocationAlwaysUsageDescription的key,项目中没有用到持续定位但总是过不了,当我单独在本地基座中添加该隐私说明后App内授权弹框提示又不提示了。反复检查代码查看文档,也没有发现需要使用。
    解决方案:iOS云打包修改权限提示语NSLocationAlwaysUsageDescription 审核不过中按照该文档下评论修改为
"ios" : {
	"privacyDescription" : {
		"NFCReaderUsageDescription" : "需要使用您的NFC功能操作标签",
		"NSLocationWhenInUseUsageDescription" : "需要访问您的位置显示天气信息",
		"NSLocationAlwaysUsageDescription" : "需要访问您的位置显示天气信息",
		"NSLocationAlwaysAndWhenInUseUsageDescription" : "需要访问您的位置显示天气信息"
	}
}

然后在本地基座的info.plist中同样按先后顺序添加隐私权限发现成功了。

总结

总之一句话:还是多花时间仔仔细细看一下文档再去开发!

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页