Replies: 1 comment 4 replies
-
It's a quite common situation. And I have been asked before. The acceptable solutions in my option are two:
|
Beta Was this translation helpful? Give feedback.
4 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景
我们的iOS项目,上层使用的是oc语言,底层有一个C++库,这个C++库以静态库的方式集成到iOS工程中。
最开始只有上层iOS使用mmkv,我们构建mmkv的iOS版本,一切正常,后来底层C++库也希望能够使用mmkv,而且这个C++库还会在Android、pc(Window/MacOS)上集成使用。
问题
如果底层C++库也希望使用mmkv,有以下方案可以集成到工程中,但都会有问题。
方案1:底层C++库集成mmkv
如果底层C++库自己打包一份mmkv代码,并集成到C++库中,iOS上层同样集成了mmkv,会有符号冲突、包增量、启动耗时等问题。
方案2:上层iOS和底层C++库集成相同的一份MMKVCore
由于MMKVCore中包含了部分iOS平台的代码,构建MMKVCore时会使用宏区分开,例如同一个接口,构建产物在C++平台参数类型是std::string,在iOS平台就是NSString
如果构建C++版本的MMKVCore,则会丢失iOS平台相关的代码,这个C++版本的MMKVCore无法在iOS上使用,也就无法共用同一份MMKVCore代码。
方案3:iOS层提供接口给底层C++库调用
iOS上层提供mmkv wrap层给底层C++调用,但由于底层C++库有自己的demo工程,无法运行和调试代码,研发效率也会大打折扣
方案4:修改MMKVCore,同时生成C++和iOS两个平台的代码
底层C++库使用C++版本的MMKVCore,但在生成底层C++库的产物时,strip掉MMKVCore的符号,上层iOS打包生成同时包含C++和iOS的MMKVCore,最终链接时,使用上层的符号
这个方案需要修改MMKVCore的代码,让其能够同时生成两个平台的代码,但改动比较大,同步github代码增加成本,稳定性可能会受到影响,风险和难度较大
预期
以上的方案都有一些问题,想请问对于这个场景,是否有一些比较好的建议,或者未来是否有相关的规划。
Beta Was this translation helpful? Give feedback.
All reactions