MapManagerSDK集成记录

2023-10-16 09:56:34 浏览数 (2)

背景

最近集成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类,有如下代码:

代码语言:javascript复制

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

定义的宏没有前缀区分,导致项目中其他使用到debug或release的地方都会报错。所以这里修改为如下代码,就可解决。Ps:封装第三方SDK时,对于定义的宏,如果必须要暴露外部使用的,一定要处理。

代码语言:javascript复制

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

最后,问题三,上面的问题都解决后,编译成功,一运行就崩溃,提示有内存泄漏。排查了好久,刚开始以为是有什么依赖库没有导入;但是对比教程后,并没有少导入三方库。再后来以为是MapManager有问题,于是把MapManager移除,只留GMObjC发现还是一运行就崩溃。所以去查看GMObjC的Github,发现有这么一段话:

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

0 人点赞