Repository navigation
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:
|
4 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
背景
我们的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代码增加成本,稳定性可能会受到影响,风险和难度较大
预期
以上的方案都有一些问题,想请问对于这个场景,是否有一些比较好的建议,或者未来是否有相关的规划。
All reactions