Recently, I integrated the
MapManager SDK and encountered several issues. I will record them here:
The integration method of importing the GMObjC algorithm SDK as mentioned in the documentation is as follows. After importing, it fails to compile and prompts:
"sm2_plaintext_size" Too many arguments to function call, expected 3, have 4
MapManager, QMUI library or other third-party libraries that were previously working fine now throw compilation errors.
After solving the above issues, it compiles successfully but crashes immediately upon launch.
The solution to Issue 1
"sm2_plaintext_size" Too many arguments to function call, expected 3, have 4 is simple. Change it to
pod 'GMObjC' and install the latest version.
For Issue 2, upon inspection, it was found that the error occurred in properties or methods where debug or release variables were defined. But why didn't it have any issues before? After careful investigation, it was discovered that in the
MapManager SDK, in the
MapService.h class, the following code exists:
#define debug @"debug"
#define release @"release"
The macros defined here do not have a prefix to differentiate them, causing errors in other parts of the project where debug or release is used. So, modifying it to the following code will solve the issue. Ps: When encapsulating third-party SDKs, if macros that need to be exposed for external use must be handled properly.
#define kDebugStr @"debug"
#define kReleaseStr @"release"
Lastly, for Issue 3, after solving the above issues, it compiles successfully but crashes immediately upon running, indicating a memory leak. After a long investigation, it was initially thought that some dependency libraries were not imported. However, after comparing with the tutorial, it was found that no third-party libraries were missing. Then it was suspected that there might be an issue with
MapManager was removed, leaving only
GMObjC, and it was found that it still crashed upon running. So, I checked the Github page of
GMObjC and found the following statement:
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.
This means that
GMObjC depends on OpenSSL, and some third-party SDKs may also depend on it, causing conflicts, such as Baidu Map SDK. Coincidentally, my project also includes Baidu Map, so could this be the issue? Although conflicts usually result in compilation errors, just in case, I changed the way
GMObjC is imported from Pod to Carthage. After compiling and running, it worked... Indeed, it was a conflict with Baidu Map, what a pitfall...
Then I integrated
MapManager back, and don't forget to make the modification for Issue 2... After compiling and running, it worked fine.