原生插件分类
插件分为2种:
- 原生语言插件
原生语言插件有分为2类:
module API接口插件
这种插件是API插件,有同步或异步APIUI component 组件插件
这种插件是UI视图组件,需要在nvue页面上使用
- UTS插件
如果是从插件市场下载的示例项目demo,统一先刷新项目的AppID
1. 集成步骤
1. 插件集成到项目
- 原生语言插件集成
-
在uniapp插件市场的插件详情页面,点击右上角"试用"按钮,绑定要试用的项目
-
在HBuilderX的项目,manifest.json -> App原生插件配置 -> 云端插件里选择要试用的插件
- UTS插件集成
-
点击插件网页右上角“试用”按钮,接着选择要试用插件的项目AppId,接着点击“导入到HBuilderX”,自动打开HBuilderX,选择项目后会自动下载插件到modules文件夹下
2. 升级项目的应用版本名称和应用版本号,这点很重要,不升级的话Android不会安装自定义基座,具体看安装自定义基座时的控制台输出
-
如果有本地自定义基座,先删除本地自定义基座,重新制作自定义基座
-
自定义基座做好后,删除手机设备上原有的app,运行基座选择刚刚做好的自定义基座
-
先删除手机上已有的app,然后使用自定义基座运行到手机
开发和打包
- 开发测试自定义基座就可以
- 原生App-云打包,原生插件是收费的需要先购买后打包
- 原生App-本地打包(即:离线打包),原生插件是收费的需要先联系插件作者取得插件离线包后即成到原生项目里才能打包
需要注意的问题:
- 页面中需要用到原生插件里的UI组件component(如:<wrs-arcfacevideo></wrs-arcfacevideo>),本页面需要需要试用nvue,没有用到原生插件里的UI组件的页面可以不用nvue,如:
video_recognize.nvue:
<template>
<div>
<wrs-arcfacevideo>
</wrs-arcfacevideo>
</div>
</template>
- 页面中用到了原生插件的module组件,需要先引入后试用,如:
<script>
// 先引入
var arcface = uni.requireNativePlugin("wrs-arcface");
........
methods: {
activeEngine: function() {
// 后使用
arcface.activeEngine(options, (resp) => {});
}
</script>
打包常见错误
- Undefined symbols for architecture arm64: _objc_msgSend$
如:
Undefined symbols for architecture arm64:
\"_objc_msgSend$componentsSeparatedByString:\", referenced from:
-[NSObject(Dictionary) propertyType:] in WRSTuyaPlugin(NSObject+Dictionary.o)
\"_objc_msgSend$containsString:\", referenced from:
-[NSObject(Dictionary) propertyType:] in WRSTuyaPlugin(NSObject+Dictionary.o)
\"_objc_msgSend$stringByReplacingOccurrencesOfString:withString:\", referenced from:
-[NSObject(Dictionary) propertyType:] in WRSTuyaPlugin(NSObject+Dictionary.o)
\"_objc_msgSend$stringWithUTF8String:\", referenced from:
-[NSObject(Dictionary) propertyName:] in WRSTuyaPlugin(NSObject+Dictionary.o)
-[NSObject(Dictionary) propertyType:] in WRSTuyaPlugin(NSObject+Dictionary.o)
这是因为由于ios ide xcode 14以后最低支持ios 11了,xcode 14制作的包在xcode 13就报这个错
这是因为Xcode14会优化减少代码的二进制,实质是通过 objc_msgSend,提取为一个 helper func(selector stub),通过这一优化减少了 2%的二进制大小,并且这一优化在 Xcode14 自动启用。所以就导致xcode13无法理解从而报错。
解决方案
在manifest.json里增加"deploymentTarget" : "11.0"
/* ios打包配置 */
"ios" : {
"idfa" : false,
"privacyDescription" : {
"NSPhotoLibraryUsageDescription" : "选择图片使用相册权限需要您的授权",
"NSCameraUsageDescription" : "选择图片使用相机权限需要您的授权",
"NSPhotoLibraryAddUsageDescription" : "选择图片使用相册权限需要您的授权",
"NSMicrophoneUsageDescription" : "选择图片使用MIC权限需要您的授权"
},
"dSYMs" : false,
"deploymentTarget" : "11.0" //可选,字符串类型,iOS支持的最低版本
},