iOS—百度导航踩坑记

吐槽一下

最近需要切换地图,从高德切换到百度,上一次已经切换了地图,现在就剩导航没换了,这次就换了,结果发现导航跟上次的地图SDK还冲突,不匹配,用pod 无法兼容导入,只能手动导入导航和匹配的地图SDK,真垃圾,BD现在真的是跟不上节奏,文档写的简单的要死,集成后问题一大堆,真他么的一万个***在奔腾,这么大的一家公司连自己的核心产品都搞不定了,做不好。别说什么用户使用体验了,N年前被导航坑了两次,果断放弃,唾弃。

iOS 百度导航SDK导入报错

image.png

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后,直接运行崩溃,

image.png

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)
找了几次百度,开始说:

初始化引擎时崩溃怀疑是openssl库冲突导致的,百度地图SDK从6.3.0版本开始升级openssl到1.1版本以上,与1.0版本不兼容。需要升级项目中的openssl到1.1版本以上或者使用6.2.0版本的百度地图sdk。

中间来回折腾了几次,刚才让用pod

地图用pod报的错误更多了

image.png

地图和导航都用pod也报错

WX20250102-113416@2x.png
WX20250102-113449@2x.png
WX20250102-134131@2x.png

真不知道这个导航到底是要怎么才能用呢?真的是折磨人

到现在还没有解决。

重新换成导航Demo里面的SDK,报下面的错误:

Undefined symbol: OBJC_CLASS$_MPSImageLanczosScale
Linker command failed with exit code 1 (use -v to see invocation)
对了一下Demo里面少了一个库:

MetalPerformanceShaders.framework


image.png

但是文档上也没写,需要这个库,也不知道是要干啥?阿西吧,真是无语了。

后来说导航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初始化才可以。

到此,百度导航的踩坑之路终于算是告一段落了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容