uniapp ios原生插件开发,uniapp打包android和ios流程

  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库了,在HBuilderXmanifest.json配置下查VideoPlayer即可。

  这样,HBuilderXmanifest.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为整体文档,可包含WSLUniPluginandroid(官网标注为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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: