iOS—百度導(dǎo)航踩坑記

吐槽一下

最近需要切換地圖,從高德切換到百度,上一次已經(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ò)

image.png

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)行崩潰,

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,又報(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ò)誤更多了

image.png

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

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

真不知道這個(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


image.png

但是文檔上也沒寫,需要這個(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)航的踩坑之路終于算是告一段落了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容