0

我有自己的静态库,其中包括用于检查 Internet 连接的可达性。

我在我的静态库http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html中使用 Reachability 2.2 版本

其他开发人员将我的静态库添加到他的(第 3 方项目)中,该库已经具有其他 可达性(Pod 规范中的标签 3.0)

他通过 Cocoa Pods 安装了它。见规格

如您所见,这是 pod 中的最后一个版本。

好的,项目构建没有错误。

但是我们得到了错误:

+[Reachability reachabilityWithHostName:]: unrecognized selector sent to class 0x2c77fc

我花了很多时间来找出问题所在。

所以 Reachability 2.2 有声明:

+ (Reachability*) reachabilityWithHostName: (NSString*) hostName;

但是,Reachability 3.0 有以下声明:

+(Reachability*)reachabilityWithHostname:(NSString*)hostname;

不一样吗?!编译成功!看看“HostName”......是的,小“n”。当我们检查静态库中的主机可达性时,我们会得到无法识别的选择器。

我的问题是 -避免这个问题的最佳方法是什么?我是否应该强迫其他想要构建我的静态库的开发人员使用 Apple 的 Reachability 或其他东西?

谢谢

4

1 回答 1

0

我知道这已经晚了,但我也面临着一个问题,因为我相信其他任何试图构建可再分发库的人。

不幸的是,没有“最好的方法”来避免这个问题,但是有办法做到这一点,这取决于你的用例。

一种技术含量低、维护成本高且工作量大的方法是重命名您使用的所有 pod 中的所有类。通过给所有类一个唯一的前缀,您几乎可以保证集成静态库的“客户”不会使用相同的名称,特别是在您的情况下,如果他们使用 pod,那么它们将不会具有相同的类名,避免冲突。

其他方法将涉及编译后类名修改,这将更易于维护,但需要更深入的技术知识来了解如何对目标文件和链接器映射进行此类操作。对不起,我还没有产品化!

希望我没有忽略一个更简单和优雅的解决方案,但这就是我所在的地方。

于 2016-10-28T22:43:01.880 回答