今是昨非

今是昨非

日出江花红胜火,春来江水绿如蓝

MapManagerSDK集成記錄

背景#

最近集成MapManagerSDK,遇到了幾個問題這裡記錄一下:

問題一:

對接文檔中提示的導入 GMObjC 算法 SDK 方式如下,導入後編譯不通過,提示:"sm2_plaintext_size" Too many arguments to function call, expected 3, have 4

pod 'GMObjC','3.0.0'

問題二:

導入MapManager後,QMUI 庫或者其他第三方庫,原本正常的,現在報錯編譯不通過。

問題三:

上面都解決了,編譯成功,一啟動就崩潰。

解決:#

問題一"sm2_plaintext_size" Too many arguments to function call, expected 3, have 4的解決很簡單,改為pod 'GMObjC',安裝最新版即可。

問題二,查看後,發現報錯的地方是屬性或者方法中使用了 debug 或者 release 定義變量。但是為什麼之前沒有問題,導入MapManagerSDK 後,就報錯了呢?仔細排查後發現,在MapManagerSDK 中MapService.h類,有如下代碼:


#define debug @"debug"
#define release @"release"

定義的宏沒有前綴區分,導致項目中其他使用到 debug 或 release 的地方都會報錯。所以這裡修改為如下代碼,就可解決。Ps:封裝第三方 SDK 時,對於定義的宏,如果必須要暴露外部使用的,一定要處理。


#define kDebugStr @"debug"
#define kReleaseStr @"release"

最後,問題三,上面的問題都解決後,編譯成功,一運行就崩潰,提示有內存泄漏。排查了好久,剛開始以為是有什麼依賴庫沒有導入;但是對比教程後,並沒有少導入三方庫。再後來以為是MapManager有問題,於是把MapManager移除,只留GMObjC發現還是一運行就崩潰。所以去查看GMObjCGithub,發現有這麼一段話:

GMObjC relies on OpenSSL 1.1.1 and above. CocoaPods does not support different versions of the same static library. If you encounter OpenSSL conflicts with third-party libraries, for example, Baidu MapKit depends on a lower version of the OpenSSL static library, a dependency conflict will occur.

意思是,GMObjC依賴了 OpenSSL,可能某些三方 SDK 也依賴了,會產生衝突,比如:百度地圖 SDK。恰好我的項目中就有百度地圖,會不會是這個問題,雖然一般來說衝突的表現是,編譯報錯;但萬一呢,於是把GMObjC從 Pod 方式改為使用 Carthage 導入,編譯運行發現好了。。。。果然是和百度地圖衝突了,好坑。。。

然後再把MapManager集成回來,記得問題二還要修改。。。。編譯運行,就可以了。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。