1. 程式人生 > >Swift專案引入百度地圖SDK過程中踩過的坑

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引入了百度地圖。