吐槽一下
最近需要切换地图,从高德切换到百度,上一次已经切换了地图,现在就剩导航没换了,这次就换了,结果发现导航跟上次的地图SDK还冲突,不匹配,用pod 无法兼容导入,只能手动导入导航和匹配的地图SDK,真垃圾,BD现在真的是跟不上节奏,文档写的简单的要死,集成后问题一大堆,真他么的一万个***在奔腾,这么大的一家公司连自己的核心产品都搞不定了,做不好。别说什么用户使用体验了,N年前被导航坑了两次,果断放弃,唾弃。
iOS 百度导航SDK导入报错
Undefined symbol: _CBCentralManagerOptionShowPowerAlertKey
Undefined symbol: OBJC_CLASS$_CBCentralManager
Linker command failed with exit code 1 (use -v to see invocation)
这个度娘说:
CBCentralManager 是 Core Bluetooth 框架(CoreBluetooth.framework)中的一个类,用于管理与蓝牙设备的连接。如果你在项目中使用了 CBCentralManager 但没有正确链接 Core Bluetooth 框架,
导入Core Bluetooth,问题确实没有了,但紧接着下一个问题
iOS 百度地图BMKMapManager初始化引擎崩溃
BOOL ret = [mapManager start:BaiduMapKey generalDelegate:self];
之前还没有问题,接入导航SDK后,直接运行崩溃,
Thread 1: EXC_BAD_ACCESS (code=1, address=0x64)
BOOL ret = [mapManager start:BaiduMapKey generalDelegate:self];
Thread 1: EXC_BAD_ACCESS (code=1, address=0x64)
有说让other linker flags加上-all_load,又报这个错误
383 duplicate symbols for architecture arm64
Linker command failed with exit code 1 (use -v to see invocation)
找了几次百度,开始说:
初始化引擎时崩?;骋墒莖penssl库冲突导致的,百度地图SDK从6.3.0版本开始升级openssl到1.1版本以上,与1.0版本不兼容。需要升级项目中的openssl到1.1版本以上或者使用6.2.0版本的百度地图sdk。
中间来回折腾了几次,刚才让用pod
地图用pod报的错误更多了
地图和导航都用pod也报错
真不知道这个导航到底是要怎么才能用呢?真的是折磨人
到现在还没有解决。
重新换成导航Demo里面的SDK,报下面的错误:
Undefined symbol: OBJC_CLASS$_MPSImageLanczosScale
Linker command failed with exit code 1 (use -v to see invocation)
对了一下Demo里面少了一个库:
MetalPerformanceShaders.framework
但是文档上也没写,需要这个库,也不知道是要干啥?阿西吧,真是无语了。
后来说导航cocoapods集成只需集成BaiduNaviKit-All就可以,里面包含了基础地图;地图这边不需要集成MetalPerformanceShaders.framework;你的项目需要集成MetalPerformanceShaders.framework才能编译通过的话,应该是其他库需要引入;我感觉说的也不靠谱,拿事实说话
最终解决:
重新使用pod安装:
// 集成Navi包-与BaiduMapKit冲突,导航只需要BaiduNaviKit-All就可以了
pod 'BaiduNaviKit-All', '6.5.8'
如果还需要地图和工具类的话,自行选择:
# 可选组件
pod 'BaiduNaviKit-All/Map', '6.6.3' # 集成地图Map包
pod 'BaiduNaviKit-All/Navi', '6.6.3' # 集成Navi包
# pod 'BaiduNaviKit-All/WalkNavi', '6.6.3' # 集成WalkNavi包
pod 'BaiduNaviKit-All/TTS', '6.6.3' # 集成TTS包
pod 'BaiduNaviKit-All/Search', '6.6.3' # 集成地图Search包
pod 'BaiduNaviKit-All/Utils', '6.6.3' # 集成地图Utils包
另外项目配置记得要仔细检查,
BMKBaseHTTPManager setRetryPolicyLogMessagesEnabled:
像这种类似的报错,按照文档上面的配置
终于算是跑起来没问题了,改点代码而已。
调起导航
-(void)makeSureNavi{
// [self initNaviSDK];
if (self.isRouteSuccess) {
[BNaviService_UI showPage:BNaviUI_NormalNavi delegate:self extParams:@{BNaviUI_NormalNavi_TypeKey:@(BN_NaviTypeReal)}];
} else {
[self startRoutePlan];
}
}
不能在用的地方再初始化导航,无效果,不走回调,需要提前在AppDelegate初始化才可以。
到此,百度导航的踩坑之路终于算是告一段落了。