下面以创建一个物体检测插件为例。
开发环境:
1. 解压 SDK
2. 创建一个插件,放到 HBuilder-uniPluginDemo 目录下
3. 配置依赖
打开 HBuilder-uniPlugin.xcodeproj
将 ObjectDetector.xcodeproj 拖到工程里这这个位置
配置支持最低支持 iOS13
配置为生成静态库
配置头文件依赖
配置 target 依赖,让 HBuilder 依赖 ObjectDetector, 链接 ObjectDetector 生成的静态库
4. 配置 appkey
更改一下 bundle id, 还有签名, 尝试运行
去官网 申请 appkey, 填写到 plist 中
创建一个 app, 名字叫 ObjectDetector,获取对应的 appid 和 appkey
Bingo! 恭喜你,现在可以运行了,下面进行插件代码的开发
5. 写插件代码
我用到了 swift5, 需要配置一下版本,现在默认是 swift6
6. 验证插件是否好用
HBuilderX 新建工程, 名字叫 ObjectDetector, 与我们上面获取 appkey 和 appid 的应用名字一致
vue 版本选 2, 选 3 原生回调给 js 的 eventName 对不上
根据接口定义,写一个 nvue 文件
生成本地资源
拷贝资源文件
保证这两个 appid 一致
配置插件
运行 HBuilder , Bingo! 成功了~
注意:
每次重新编译 HBuilderX 生成新的资源拷贝到 apps 目录,需要删除 app,重新运行,避免 js 更新不及时。
7. 插件打包
插件包结构
|-- 插件id // 插件包是一个以插件id命名的文件夹
|-- android // 存放 android 插件所需要的依赖库及资源文件
|-- ios // 存放 ios 插件所需要的依赖库及资源文件
|-- package.json // 插件配置文件
我们只打包 iOS 的
编译静态 framework, 选择 release 模式, 然后 build
结合资源文件,以及 framework 文件,生成打包
package.json 文件内容
{
"name": "object_detection",
"id": "object_detection",
"version": "0.1",
"description": "摄像头物体检测插件",
"_dp_type": "nativeplugin",
"_dp_nativeplugin": {
"ios": {
"plugins": [
{
"type": "component",
"name": "object-detector-view",
"class": "ObjectDetectorComponent"
}
],
"frameworks": [
"AVFoundation.framework",
"Vision.framework",
"CoreML.framework"
],
"integrateType": "framework",
"deploymentTarget": "13.0",
"embedSwift": true,
"validArchitectures": [
"arm64"
],
"resources": [
"yolov8n.mlmodelc"
]
}
}
}
8. 本地使用插件
在 HBuilderX 的工程中,创建一个 nativeplugins文件夹,将打包的插件发进去
选择本地插件
自定义基座打包
填写信息,证书、描述文件,证书密码,打包
打包后使用自定义基座运行,运行成功即证明,插件是好用的~
9. 不断尝试与排错,恭喜你,插件开发难不倒你了
工程使用的代码在这里