【问题标题】:iOS8 framework library linking WITHOUT PodsiOS8 框架库链接没有 Pods
【发布时间】:2015-05-11 06:36:12
【问题描述】:

想象以下场景;

我正在开发一个需要 SomeLibrary(例如 AFNetworking)的可可触控框架。我的框架将被包含在可能也需要 SomeLibrary 的某人的项目中。 当我直接将 AFNetworking 包含到我的框架中(通过源代码或 Cocoapods)时,如何在不遇到这些讨厌的重复警告的情况下完成此操作?

我已经在两个项目(我的框架和一个包含我的框架的测试项目)上使用 Cocoapods 进行了尝试,但这也会导致重复代码警告。

当我没有将AFNetworking添加到我的框架开发项目中时,编译器找不到需要的文件,这就是我无法构建它的原因。我尝试将 AFNetworking 的源代码直接包含到主项目中,并使用 pod,但在这两种情况下,框架项目中的 AFNetworking/AFNetworking.h 导入都失败了。

如何在不为我的框架制作 pod 的情况下做到这一点(这不是一个真正的选择)?

我找到了这个相关的答案,但我不知道为框架项目设置什么搜索路径才能找到主项目的库; https://stackoverflow.com/a/23123725/1069487

任何帮助将不胜感激!

【问题讨论】:

    标签: ios objective-c xcode6 cocoapods ios-frameworks


    【解决方案1】:

    您必须构建与静态库链接的框架。

    1. 您将 AFNetworking 构建为一个静态库(这将为您提供一个 .a 文件作为 AFNetworking.a)
    2. 您构建了链接到静态库的框架。但请注意,该库不会嵌入到您的框架中(在 iOS 上无法将静态库包含到框架中)。您的框架能够使用 AFNetworking API,因为它与它相关联。
    3. 任何使用您的框架并使用您的框架的 AFNetworking 方法的项目都需要与静态库 AFNetworking.a 链接,您应该将其作为独立文件提供在您的框架旁边。

    更多详情请参见 iOS 框架:https://github.com/jverkoey/iOS-Framework

    【讨论】:

    • 虽然这似乎是一个解决方案,但我认为它不是一个可行的解决方案。作为框架供应商,我真的无意向我的客户提供 AFNetworking 库,因为这可能会对他们当前的开发过程产生严重影响。想象一下,他们在项目中使用 CocoaPods,包括一个用于 AFNetworking 的 pod。使用您描述的方法基本上会打破他们对他们的依赖关系,并会迫使我在我的客户可能感兴趣的库发生更改时更新 AFNetworking 静态库。
    • 因此,您应该将 AFNetworking 的源代码包含到您的项目中,并重构 AFNetworking 类和全局函数/变量(例如添加您的首字母:AIAFNetworking),这样它们就不会与另一个导入的 AFNetworking 冲突在最终用户的项目中。方法名称可以保留,因为它们附加到名称将被更改的类。
    • 也考虑过这一点,但老实说,这是一个相当丑陋的解决方案。老实说,我无法想象这个问题不能很好地解决(不知何故将我的框架指向主要项目的依赖项),因为它可能是一个相当普遍的问题。
    • 也许来自 Objective-C 的 @compatibility_alias 可以帮助你。请参阅此 SO 主题:stackoverflow.com/questions/178434/…
    • 这使得重新命名 AFNetworking 的源代码对未来的更新更加友好。不知道那个。仍然想知道这是否真的是解决这些依赖问题的最后手段。
    猜你喜欢
    • 2015-08-04
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    相关资源
    最近更新 更多