首页 > 其他分享 >SDK与项目使用同样的三方依赖库如何解决符号冲突问题

SDK与项目使用同样的三方依赖库如何解决符号冲突问题

时间:2024-12-16 21:25:36浏览次数:3  
标签:三方 __ MutableAttributedStringHook PPDNSMappingManager 符号 symbol NS SDK

  1. 使用公共依赖,项目和SDK都依赖同一个库,这样就需要沟通和协调,一旦需要升级改动,也许会牵一发而动全身,就是都得跟着改的意思
  2. 各自维护,谁挖的坑谁填,这样的好处就不会相互牵连,职责相对明确清晰,坏处就是少了复用性,增加冗余

具体实施:

  1. 做成公共组件,由项目宿主(壳工程)依赖,各SDK能够读取到符号即可
  2. sdk全局修改库的类前缀,方法名前缀,方法函数限定作用域范围

以下是一个案例

SDK里依赖其他三方库的一种解法,通过全局宏定义替换类名符号,不过这个只针对OC库(因为是宏定义),如果是.a静态库似乎并不管用,不用手动全局替换类名,这样似乎也是解决依赖冲突的一种思路,更粗暴的方式是直接改库的类名和方法名,c函数加static等, 宏替换这种思路比较灵活,无需改变调用代码,相对来说对原代码改动小点

// 原理是 ## 前后拼接字符串的宏魔法
// Namespaced Header
#ifndef __NS_SYMBOL
// We need to have multiple levels of macros here so that __NAMESPACE_PREFIX_ is
// properly replaced by the time we concatenate the namespace prefix.
#define __NS_REWRITE(ns, symbol) ns ## _ ## symbol
#define __NS_BRIDGE(ns, symbol) __NS_REWRITE(ns, symbol)
#define __NS_SYMBOL(symbol) __NS_BRIDGE(APMSDK, symbol)
#endif

//比如存在这样一个类 可能接入方也有这个类 SDK的话只能加前缀或者提出来作为公共依赖
// 这里就是`PPDNSMappingManager`这个类 在这个sdk里 加了`APMSDK`这个类前缀也就是所谓的命名空间,这样处理之后,尽管是同一个库,编译的时候也不会出现符号冲突报错了
// 实际上的类名应该被修改为: APMSDK_PPDNSMappingManager 但是并不影响使用 调用的时候仍然使用`PPDNSMappingManager`去调用 只是代码颜色变成了宏定义的摸样

// Classes 
#ifndef PPDNSMappingManager
#define PPDNSMappingManager __NS_SYMBOL(PPDNSMappingManager)
#endif

本质是替换符号,Category也是替换括号内的那个名字, 本类是系统类肯定不能改的

比如 #import "NSMutableAttributedString+MutableAttributedStringHook.h"

#ifndef MutableAttributedStringHook
#define MutableAttributedStringHook __NS_SYMBOL(MutableAttributedStringHook)
#endif

//其中`MutableAttributedStringHook`是宏定义字符串,实际上是加上`APMSDK_`前缀了
@implementation NSMutableAttributedString (MutableAttributedStringHook)

标签:三方,__,MutableAttributedStringHook,PPDNSMappingManager,符号,symbol,NS,SDK
From: https://www.cnblogs.com/wgb1234/p/18611116

相关文章

  • 24.11.12 特殊符号与正则表达式
    特殊符号;;命令的分隔符[root@oldboyedu~]#pwd;whami;whichpwo/root-bash:whami:未找到命令which:nopwoin(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin)&&&&前面命令必须执行成功,才会往后执行[root@oldboyedu~]#llwang.txt&&ec......
  • 如何理解符号引用和直接引用?
    我们知道在JVM中类加载总共使用5步组成的,而类的生命周期总共有7个阶段,如下图所示:其中每步的含义如下:1.加载加载(Loading)阶段是整个“类加载”(ClassLoading)过程中的一个阶段,它和类加载ClassLoading是不同的,一个是加载Loading另一个是类加载ClassLoading,所以不要把......
  • ARMS 用户体验监控正式发布原生鸿蒙应用 SDK
    作者:杨兰馨(楠瑆)背景2024年10月22日,华为正式发布了原生鸿蒙操作系统(HarmonyOSNEXT)。原生鸿蒙实现了系统底座全部自研,系统的流畅度、性能、安全特性等方面显著提升,也实现了操作系统的自主可控。目前,已有超过15000个鸿蒙原生应用和元服务上架,为了进一步优化用户的使用体验,......
  • 【前端开发】如果你使用的第三方库有bug,你会怎么办
    在当今的前端工程化领域,第三方库的使用已经成为标配。然而,不可避免的是,这些库可能会存在bug,或者是库的一些功能并不能满足需要,需要修改库的某个功能,或添加功能。当遇到这种情况时,我们应该如何应对?本文将介绍三种解决第三方库bug的方法,并重点介绍使用patch-package库来修复bug的全......
  • 【开源系列】JustAuth:小而全而美的第三方登录开源组件
    推荐阅读:《专为智能无人系统打造的边缘实时感知SDK库!-SpireCV》我们在企业开发中,常常需要实现登录功能,而有时候为了方便,就需要集成第三方平台的授权登录。如常见的微信登录、微博登录等,免去了用户注册步骤,提高了用户体验。为了业务考虑,我们有时候集成的不仅仅是一两个第三方......
  • Easysearch Java SDK 2.0.x 使用指南(一)
    各位Easysearch的小伙伴们,我们前一阵刚把easysearch-client更新到了2.0.2版本!借此详细介绍下新版客户端的使用。新版客户端和1.0版本相比,完全重构,抛弃了旧版客户端的一些历史包袱,从里到外都焕然一新!不管是刚入门的小白还是经验丰富的老司机,2.0.x客户端都能让你开发效率......
  • CentOS 7 常见系统符号
    CentOS7常见系统符号基础符号系列(元字符)美元符号:$用于取出变量中的内容[root@yu~]#echo$PS1[\u@\h\W]\$用于取出指定列的信息(awk)表示用户命令提示符,普通用户表示一行的结尾$(),表示命令执行结果留下,用于其它命令调用。叹号符号:!用于表......
  • golang:第三方库:用jordan-wright/email发送邮件
    一,安装第三方库:$goget-ugithub.com/jordan-wright/emailgo:downloadinggithub.com/jordan-wright/emailv4.0.1-0.20210109023952-943e75fe5223+incompatiblego:addedgithub.com/jordan-wright/emailv4.0.1-0.20210109023952-943e75fe5223+incompatible二,代码:1,发送......
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(8)
    1.问题描述:在AGC中,推送服务的消息回执新建成功后,有一个有效期1,这个有效期是什么意思,过期后,会影响什么呢?2,这个有效期是否可以修改成一直不过期?解决方案:有效期是应用接收回执服务器的CA证书有效期时间,证书过期将导致您无法接收消息回执,Push并不可以修改时间,需要及时更换回执服......
  • Web CAD工程应用程序图形引擎-HOOPS Communicator SDK 24.8
    适用于Web上的工程应用程序的图形引擎HOOPSCommunicator图形引擎可加速Web应用程序开发,提供高级3DWeb可视化功能,用于在Web浏览器中渲染大型3D模型。升级到HOOPSWeb平台可添加准确、快速的CAD数据导入。3D网络图形库HOOPSCommunicatorSDK为软件开发人......