首页 APP开发 正文内容

UTS 开发 iOS 插件, config.json 通过 cocoapods 引入 .a库 (baidunavikit) 报错找不到类

2023年12月06日 , , 1,099

记录一个 UTS 插件引入 .a 库失败的解决方法。

问题描述

在 uni-app 里使用 UTS 语言开发 iOS 插件时,插件里的 config.json 通过 cocoapods 引入.a库(baidunavikit),运行时自定义基座正常,但是代码报错找不到类。

报错分析

报错库位置
报错库位置

BaiduNaviKit 这个 pod 库比较特别,代码用 OC 实现,把.a放到 pod 库里且没有包含 Modules 文件夹, 造成在原生应用中 Swift 文件也无法直接引用。

解决方案

百度官方给的在 Swift 引用方案是创建桥接文件。但是对应的 UTS 插件场景下,在 framework 中无法创建桥接文件,由于这是 pod 库,也无法自己创建 Modules 文件夹。

临时解决方案如下:

1.用分库形式引用BaiduNaviKit,代码如下:

{
"name": "BMKLocationKit",
"version": "2.0.9"
},{
"name":
"BaiduNaviKit/Map"
"version": "6.6.0"
}

2.将要使用的 libbaiduNaviOenSDK.a 这个.a库手动的放到插件 libs 目录下,注意要将其依赖的 libssl.alibcrypto.a 也一并放在该目录下:

baidunavikit 库目录位置
baidunavikit 库目录位置

3.将 libbaiduNaviOpenSDK.a 这个库用到的 .bundle 资源文件放到插件的 Resources 目录下:

Resources目录
Resources目录

4、在 uts 插件中使用 libbaiNaviOpenSDK.a 这个库时可直接使用其中的类,无需导入:

BNaviService setAgreePrivacy (false)

总结

BaiduNaviKit 这个 pod 库的 framework 部分可以使用 cocoaPods 引入,.a需要手动导入。