吐槽一下
最近需要切換地圖,從高德切換到百度,上一次已經(jīng)切換了地圖,現(xiàn)在就剩導(dǎo)航?jīng)]換了,這次就換了,結(jié)果發(fā)現(xiàn)導(dǎo)航跟上次的地圖SDK還沖突,不匹配,用pod 無法兼容導(dǎo)入,只能手動(dòng)導(dǎo)入導(dǎo)航和匹配的地圖SDK,真垃圾,BD現(xiàn)在真的是跟不上節(jié)奏,文檔寫的簡單的要死,集成后問題一大堆,真他么的一萬個(gè)***在奔騰,這么大的一家公司連自己的核心產(chǎn)品都搞不定了,做不好。別說什么用戶使用體驗(yàn)了,N年前被導(dǎo)航坑了兩次,果斷放棄,唾棄。
iOS 百度導(dǎo)航SDK導(dǎo)入報(bào)錯(cuò)

Undefined symbol: _CBCentralManagerOptionShowPowerAlertKey
Undefined symbol: OBJC_CLASS$_CBCentralManager
Linker command failed with exit code 1 (use -v to see invocation)
這個(gè)度娘說:
CBCentralManager 是 Core Bluetooth 框架(CoreBluetooth.framework)中的一個(gè)類,用于管理與藍(lán)牙設(shè)備的連接。如果你在項(xiàng)目中使用了 CBCentralManager 但沒有正確鏈接 Core Bluetooth 框架,
導(dǎo)入Core Bluetooth,問題確實(shí)沒有了,但緊接著下一個(gè)問題
iOS 百度地圖BMKMapManager初始化引擎崩潰
BOOL ret = [mapManager start:BaiduMapKey generalDelegate:self];
之前還沒有問題,接入導(dǎo)航SDK后,直接運(yùn)行崩潰,

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,又報(bào)這個(gè)錯(cuò)誤
383 duplicate symbols for architecture arm64
Linker command failed with exit code 1 (use -v to see invocation)
找了幾次百度,開始說:
初始化引擎時(shí)崩潰懷疑是openssl庫沖突導(dǎo)致的,百度地圖SDK從6.3.0版本開始升級(jí)openssl到1.1版本以上,與1.0版本不兼容。需要升級(jí)項(xiàng)目中的openssl到1.1版本以上或者使用6.2.0版本的百度地圖sdk。
中間來回折騰了幾次,剛才讓用pod
地圖用pod報(bào)的錯(cuò)誤更多了

地圖和導(dǎo)航都用pod也報(bào)錯(cuò)



真不知道這個(gè)導(dǎo)航到底是要怎么才能用呢?真的是折磨人
到現(xiàn)在還沒有解決。
重新?lián)Q成導(dǎo)航Demo里面的SDK,報(bào)下面的錯(cuò)誤:
Undefined symbol: OBJC_CLASS$_MPSImageLanczosScale
Linker command failed with exit code 1 (use -v to see invocation)
對(duì)了一下Demo里面少了一個(gè)庫:
MetalPerformanceShaders.framework

但是文檔上也沒寫,需要這個(gè)庫,也不知道是要干啥?阿西吧,真是無語了。
后來說導(dǎo)航cocoapods集成只需集成BaiduNaviKit-All就可以,里面包含了基礎(chǔ)地圖;地圖這邊不需要集成MetalPerformanceShaders.framework;你的項(xiàng)目需要集成MetalPerformanceShaders.framework才能編譯通過的話,應(yīng)該是其他庫需要引入;我感覺說的也不靠譜,拿事實(shí)說話
最終解決:
重新使用pod安裝:
// 集成Navi包-與BaiduMapKit沖突,導(dǎo)航只需要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包
另外項(xiàng)目配置記得要仔細(xì)檢查,
BMKBaseHTTPManager setRetryPolicyLogMessagesEnabled:
像這種類似的報(bào)錯(cuò),按照文檔上面的配置
終于算是跑起來沒問題了,改點(diǎn)代碼而已。
調(diào)起導(dǎo)航
-(void)makeSureNavi{
// [self initNaviSDK];
if (self.isRouteSuccess) {
[BNaviService_UI showPage:BNaviUI_NormalNavi delegate:self extParams:@{BNaviUI_NormalNavi_TypeKey:@(BN_NaviTypeReal)}];
} else {
[self startRoutePlan];
}
}
不能在用的地方再初始化導(dǎo)航,無效果,不走回調(diào),需要提前在AppDelegate初始化才可以。
到此,百度導(dǎo)航的踩坑之路終于算是告一段落了。