可达性2.2对3.0(Tonymillion)

时间:2012-07-25 16:29:15

标签: objective-c ios reachability

我有自己的静态库,包括用于检查互联网连接的可达性。

我在静态库http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html

中使用了Reachability 2.2版本

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

他通过Cocoa Pods安装它。请参阅spec

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

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

但是我们收到了错误:

+[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或其他东西?

由于

1 个答案:

答案 0 :(得分:0)

我知道这已经很晚了,但我也遇到了一个问题,因为我相信其他人正在尝试构建可再发行的库。

没有"最佳方式"不幸的是,避免这个问题,但有办法,只取决于你的用例。

低技术,可能是高维护和努力的方法是重命名您使用的所有pod中的所有类。通过为所有类提供唯一的前缀,您几乎保证您的"客户"集成静态库不会使用相同的名称,特别是在您的情况下,如果他们使用pod,则不会有相同的类名,从而避免冲突。

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

希望我不会忽视一个更简单优雅的解决方案,但这就是我所处的位置。