最近开发的SDK要提供给客户公司uniapp应用使用,本着写个插件demo就可以了,结果还是耗了小两天。插件开发的主要流程可以参考官网iOS原生插件开发。
开发流程简单总结下就是以下三方面:
1. iOS端制作一个framework或.a插件,然后放在uniapp给你提供的插件开发工程下(和DCTestUniPlugin同目录),在framework或.a里编写功能类。(如果插件内要使用SDK,在插件项目下创建framework目录导入SDK文件,同时引用到build phases->Link Binary with Libraries,然后在插件主体工程引用到build phases->Link Binary with Libraries和Embed Frameworks)
2. uniapp端除了写业务代码,其次就是制作插件包,放到项目的nativeplugins目录下,编写插件包内的package.json文件。然后在manifest.json下的app原生插件页添加插件
3. iOS端插件开发完成后生成framework或.a文件,放入uniapp端插件包ios目录下,如果插件有资源文件放到ios/BundleResources目录下,资源文件不用在package.json内配置,可以直接用。
包含使用的SDK及bundle资源的插件包目录
xcode调试流程(control和Hbuilder-uniPlugin-info文件配置官网都有,不细说):
1. uniapp端 点击 发行->原生App本地打包->生成本地打包App资源 会在unpackage/resources目录下生成当前uniapp项目的appId对应的目录文件。这个目录文件可以理解为uniapp业务代码运行的js文件。
2. iOS 端 在插件开发工程下找到Hbuilder-Hello/Pandora/apps目录,该目录下只能有一个appId对应的目录文件夹,用uniapp端生成的appId目录文件替换掉。
3. 运行插件工程项目。
uniapp端运行时,插件包更新后,最好重新制作自定义基座(点击 运行->运行到手机或模拟器->制作自定义调试基座)。
不难但耗时的问题:
1. 首次调用原生插件方法,会报SDK的某些类里的UI渲染不在主线程,结果导致卡顿,这里要注意下UNI_EXPORT_METHOD_SYNC和UNI_EXPORT_METHOD这两个导出方法的使用。
2. 插件使用的原生SDK内部使用有bundle资源文件,这里如果是xcode开发阶段调试的话,将bundle文件引用到插件主体工程的build phases->copy bundle resources即可。如果是uniapp端运行,在插件包iOS目录下创建BundleResources文件夹,将bundle文件放在该目录下即可。