声明:以下操作都只针对古老的Object-C项目,swift项目有命名空间。
之前有朋友遇到需要合成两个APP,由于项目太大,需要解决命名冲突,而且时间不够,于是给提供了一个快速解决冲突的方法:动态库。
做法:
1、保留宿主app,将另一个app做成动态库,暴露唯一入口。
2、检查NSClassFrom、将反射引用替换成直接引用,一般不会太多。
3、处理图片冲突,建议用bundle包,宏定义子app的 "UIimage imageNamed:"方法即可。
注意:
1、 系统会提示 Class "xxxxx" is implemented in both "xxxxx"、"xxxxx",直接忽视,这是说明 xxxxx 这个类在两个执行文件里面都存在,但我们在编译的时候已经确定了使用哪一个class(#import "xxxxx" 导入的),所以不会有问题。
2、app内的执行文件都加在完成后会把所有的执行文件中的类注册到一张表中,所以通过反射会导致同名class选用出现混乱,也就有了步骤2的操作。