uniapp ios原生插件开发,uniapp打包android和ios流程
iOS下的uniAPP原生插件是如何打包的?下面这篇文章就带大家说说iOS下uniAPP原生插件的打包流程,希望能帮到你!
UNI-APP开发(仿饿)开发课程:进入学习
废话开场:uniAPP包是云编译的,也就是说app下的iOS原生部分的代码需要提交到uni的后台进行编译,可以理解为uni服务器上有一个Xcode的运行环境。当然,云应该是用Xcode命令完成的。HBuilderX云编译时,所有本地原生库都会被压缩,然后打包到云中。最后将编译好的ipa包下载到本地,这样就可以安装了。
一、静态库的设置
你可以根据uni官网下载的Demo简单熟悉项目结构。
1、HBuilder-uniPlugin 主工程
其实可以大致理解为云端编译时cloudXcode的整个编译环境。为什么这么说?你可以看看这个项目的所有依赖项。
本地依赖有120那么多,因为,uni有云编译的成本。如果所有库都是开发者上传的话,编译资源会被大量占用,所以采用远程第三方库存储方式,这个在这里uni后台也可以知道。
iOS依赖的第三方库的版本描述
https://native support . d cloud . net . cn/AppDocs/use module/iOSModuleConfig/dependent library
所以在开发uni原生插件时,可以先检查远端是否有支持的第三方,避免重复导入时出现编译符号冲突的问题。
图示:比如插件需要哔哩哔哩IJKMediaFramework库(160M左右,确实很大)。然后,先查一下云编译有没有这个库。
发现已经存在,那么,这个时候就不需要提交本地的IJKMediaFramework库了,在HBuilderX的manifest.json配置下查VideoPlayer即可。
这样,HBuilderX的manifest.json配置会告诉云编译器将IJKMediaFramework添加到项目中。
2、DCTestUniPlugin 静态库工程
做静态库的时候,需要在这里设置静态库架构的支持。
设置在Build Setting-Architectures下。
并且注意编译的时候选择Any iOS Device。
静态库需要第三方库怎么办?
开发的时候肯定会遇到需要第三方库支持的情况,比如:AFNetWorking。这里我们先查了一下uni的远端是否支持,发现对应的静态库并没有改进。然后,我们需要把它上传到本地。
因为,自制的静态库最终还是要加载到APP的环境中。所以自制静态库依赖第三方的策略是将第三方库.a的文件添加到HBuilder-uniPlugin的主项目中。因为自制静态库需要头文件的引入,那么在DCTestUniPlugin的静态库项目下,Heard Search Paths处会添加头文件的引入。
HBuilder-uniPlugin主项目
DCTestUniPlugin静态库项目
二、配置 iOS 原生插件 package.json
所有功能都开发好了,下一步就是配置本地插件包。
具体打包步骤请参考以上链接。最终的文件目录结构如下:
1.Heard Search Paths为整体文档,可包含WSLUniPlugin和android(官网标注为ios而非ios)。
2.文档iOS包含所有需要的第三方库和自制静态库。
3.ios是相关配置。通过package.json,内部信息将告诉远程编译器加载哪些库以及它们的文件夹位置。当然也包括一些配置,比如哪些动态库需要签名(虽然可以自己做动态库,但是需要签名)。
三、 package.json 目录
{
Name: WSLUniPlugin ,//插件名称
ID: WSLUniPlugin ,//插件ID
版本: 1.0 ,
Description :函数描述,//这里是函数描述,添加后会显示在HBuilder下。
_dp_type:nativeplugin ,//本机组件类型
_dp_nativeplugin:{
ios: {
插件:[
{
Type: component ,//插件类型,无论是函数组件还是视图组件。
Name: wsl-component ,nvue文件中的tag标记
Class: WSLComponent //iOS本机对象类,从DCUniComponent继承
},
],
IntegrateType: framework ,//自制库类型
HooksClass“:”,其中声明了app lifecycle的hook对象,它也会响应appDelegate事件。
框架:[
LibAFNetworking.a ,//uni远程非储存库,需要标记声明。
Masonry.framework ,//Masonry是uni的远程库,不需要添加到ios文件夹中,否则编译时会出现符号重复错误。
],
embedFrameworks: [
IDLFaceSDK.framework ,//动态库
],
功能:
权利:
},
plists: {
}
},
plists: {
},
资产:[
WSLUniPlugin.xcassets//Image资源文件,其中填写了ios文件夹的相对路径。因为WSLUniPlugin.xcassets在ios文件中,所以直接写。
],
隐私:[
],
embedSwift: false,
DeploymentTarget: 8.0 ,//支持iOS版本
有效架构:[
Arm64//架构
],
参数:{
},
资源:[
WSLUniPlugin.bundle ,//这里是一些资源文件,比如bundle,ios文件夹的相对路径填在这里。因为WSLUniPlugin.bundle在ios文件里,所以直接写。
]
}
}
}以上是基本配置设置。因为uni每天的云编译次数是有限的(10次左右),而且包量要小于40M。超出次数每次2元,超出体积每100m 10元。是不是有点坑?这样每天的试错成本极高。所以,记录在这里。
推荐:《uniapp教程》以上是说iOS下uniAPP的原生插件是怎么打包的?(包装过程分享)详情请关注我们其他相关文章了解更多!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。