最近在做基础库建设及部分业务的重构工作。因为支持的业务方比较多,而且Pod库会在多个App中被使用,那么同一个Pod库如何在多端做差异化处理,以及具体做到什么粒度,在这里简单总结一下。
方案:
一、预编译宏
使用类似 #if __has_include 等预编译宏,做差异化处理。
适用场景:比如,某个类文件在A端有,在B端没有,那么就可以利用预编译宏来防止运行报 错。
二、接入层差异化配置
接入层或者适配层做区分。
适用场景:比如配置一个userInfo(数据模型),每个App端需要配置的值都不一样,可以采用这种方式,在接入层或者适配层抹平差异。
三、端参数区分
在公共库配置端参数,在pod库内部做判断使用。
适用场景:比如,同一按钮的处理事件在各个端有细微的差别,在A端可能需要弹一个弹框,而在B端可能只需要弹一个toast。类似这种细微的内部差异,可以通过端参数来进行区分,或者也可以通过配置预编译宏(Podfile或者.podspect中配置GCC_PREPROCESSOR_DEFINITIONS),思路是一样的。
四、配置subspect
区别比较大的话,可以拆分subspect。
适用场景:比如Pod库中有一个语音播报模块,而这个模块在A端和B端的业务逻辑大部分是不一样的,这个时候就可以拆分subspect,在A端引入subspectA,在B端引入subspectB。
选择方案的评价指标:
1、宿主端接入成本低
2、只维护一个分支
3、实现成本低
上边四种方案某种程度上都可以解决问题,但是,解决问题的侧重点不同,所以,要根据具体的业务场景选择合适的方案。