【问题标题】:iOS Framework build: what is the best practice to link with third-party libraries?iOS 框架构建:与第三方库链接的最佳实践是什么?
【发布时间】:2015-01-27 04:38:30
【问题描述】:

我正在为 iOS 构建一个框架,我的框架将 AFNetworking 作为依赖项。 那么包含 AFNetworking 的最佳实践是什么?阅读其他帖子(特别是这个问题here)我想出了三个选项:

  1. 将所有 .h.m 文件从 AFNetworing 复制到我的项目中,并用它编译我的框架。但是根据this 的说法,这可能会导致某些使用我的框架的第三方开发人员已经在使用 AFNetworking 并且会出现编译时错误,即某些类被声明了两次。

  2. 使用 CocoaPods 并将 AFNetworking 链接到我的框架。这导致了这个错误:-lPods 不是目标文件(不允许在库中)

  3. 构建类似 Aeris SDK 的东西,使用我的框架的第三方开发人员将负责将 AFNetworking 添加到他们的项目中。

我认为选项 3 是最好的,但我不知道该怎么做。如何开发调用 AFNetworking 类/方法但不包含在最终框架产品中的框架?

谢谢!

【问题讨论】:

    标签: ios objective-c afnetworking


    【解决方案1】:

    在您的库中使用第三方库是一种非常糟糕的做法。
    理想情况下,您应该避免这样做。

    但如果你真的需要它,你可以定义并为类名添加前缀。
    参考这篇文章Avoiding dependency collisions in iOS static library managed by CocoaPods

    【讨论】:

    • 我支持“CocoaPods”方法!
    【解决方案2】:

    好的。我决定选择选项 3。

    A 刚刚将任何第三方库中的所有头文件添加到我的框架项目中(您也可以添加 .m 文件,但不要将它们包含在静态库目标中)。

    而且我还记录了所有内容,因此使用我的框架的开发人员将知道依赖项是什么以及如何在他们自己的项目中包含/安装它们(包括第三方库版本、CocoaPods 支持等)。

    我决定不使用选项 1,因为这会导致在某些情况下,项目将在最终应用程序上编译同一个库的两个副本。即使更改了我的框架代码上的库的命名空间(以防止“重复符号”错误),仍然会导致一些其他可能的问题,例如更大尺寸的 APP,可能与运行的同一库的两个或多个实例相关的错误一起等等……

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 2010-09-15
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多