今是昨非

今是昨非

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

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集成回来,记得问题二还要修改。。。。编译运行,就可以了。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。