Swift项目引入百度地图SDK过程中踩过的坑

项目中原本使用了高德地图,最近为了做一个小探索需求需要引入查找附近人的雷达功能,高德没有而百度有,遂打算引入百度地图看看效果。n年前在OC中引入百度地图过程中遇到过的问题也就是Key不匹配时显示不出地图之类的问题。这次在Swift上遇到的比较麻烦,网上没有找到合适的答案,记录一下。

问题1:通过pod引入百度地图,执行pod install时,报错:target has libraries with conflicting names: libcrypto.a.

分析:
我们发现百度地图中使用的加密库llibcrypto.a跟七鱼客服中的libcrypto.a重名,进而引发了cocoapod(https://github.com/CocoaPods/CocoaPods)报错,可以参考这里:https://github.com/CocoaPods/CocoaPods/issues/6502
遗憾的是现在pod已经更新到1.4.0,这个问题也没能被解决。
cocoapod帮我们管理第三方库,也就是下面的形式:
这里写图片描述
对于App开发者来说,需要而且仅需要关心的是其引用的A.framework和B.framework中是否有重名的函数,有的话会出现Link error。至于A.framework,B.framework内部引入的.a文件,已经被编入其函数内部,是否重名都没有关系。

测试了一下,如果将cocoapod去掉后,直接使用A.framework和B.framework是没有问题的,像下面这样:
这里写图片描述

解决方法:
1,先将pod中七鱼客服中的libcrypto.a备份到其他地方,然后从xcode中将其删除(删除文件,删除引用没用)。
2,执行pod install,已经不报错了,百度地图可以正常被安装。
3,将备份的libcrypto.a还原至七鱼客服sdk的位置。
4,编译链接正常。

问题2:手动添加百度地图sdk时,如果在bridging-header.h文件中添加其头文件,编译报错找不到该头文件;如果直接在.swift中import BaiduMapAPI_Base,编译报错:swift import no such module。

bridging-header.h

#import <BaiduMapAPI_Base/BMKBaseComponent.h>

分析:尝试了make clean,删除Dericed Data,还是不行,不知道是不是xcode的bug。最后还是通过pod引入了百度地图。

猜你喜欢

转载自blog.csdn.net/dangyalingengjia/article/details/79158763
今日推荐