我有自己的静态库,包括用于检查互联网连接的可达性。
我在静态库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或其他东西?
由于
答案 0 :(得分:0)
我知道这已经很晚了,但我也遇到了一个问题,因为我相信其他人正在尝试构建可再发行的库。
没有"最佳方式"不幸的是,避免这个问题,但有办法,只取决于你的用例。
低技术,可能是高维护和努力的方法是重命名您使用的所有pod中的所有类。通过为所有类提供唯一的前缀,您几乎保证您的"客户"集成静态库不会使用相同的名称,特别是在您的情况下,如果他们使用pod,则不会有相同的类名,从而避免冲突。
其他方法将涉及后编译类名称munging,这将更易于维护,但需要更深入的技术知识,如何对目标文件和链接器映射执行此类操作。对不起,我还没有这个产品化了!
希望我不会忽视一个更简单优雅的解决方案,但这就是我所处的位置。