【问题标题】:Reachability 2.2 vs 3.0 (Tonymillion)可达性 2.2 与 3.0 (Tonymillion)
【发布时间】:2012-07-24 03:50:27
【问题描述】:

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

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

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

他通过 Cocoa Pods 安装它。见spec

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

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

但是我们得到了错误:

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

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

所以可达性 2.2 有声明:

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

但是,Reachability 3.0 有以下声明:

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

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

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

谢谢

【问题讨论】:

  • 尽可能使用苹果的库,因为它们不太可能改变。
  • 但是,其他 ARC 兼容。许多开发者都在使用它!
  • -fno-objc-arc简单编译苹果的库。
  • Apple 的 Reachability 与 ARC 兼容,可通过 pod 'AppleReachability' 获得

标签: objective-c ios reachability


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2020-07-05
    • 2020-01-29
    • 1970-01-01
    相关资源
    最近更新 更多