【问题标题】:How do I use Cocoapods in an embedded framework?如何在嵌入式框架中使用 Cocoapods?
【发布时间】:2014-08-02 06:21:03
【问题描述】:

我正在一个新项目中为我的自定义视图使用嵌入式框架,以利用 Xcode 6 中的新 @IBDesignable 内容,我想使用 Facebook 的 Pop 为上述视图设置动画。我已经使用 Cocoapods 将 Pop 添加到项目中,但嵌入式框架无法访问这些文件 ('POP/pop.h' file not found)。

我尝试将与 Cocoapods 相关的构建阶段从应用程序目标复制到自定义框架目标,但它们无法按原样工作。 所做 的工作是将 Pop 文件夹直接复制到嵌入式框架中,但随后 Xcode 告诉我,我必须将所有尖括号 <POP/pop.h> 更改为引号 "POP/pop.h"。我假设有更好的方法,但我对此一无所知。

【问题讨论】:

标签: xcode cocoa-touch cocoapods xcode6


【解决方案1】:

假设在您的 Podfile 中您使用的是 link_with 'MyCustomFramework',其中“MyCustomFramework”是您的嵌入式框架名称,并且已运行 pod install。选择您的项目文件(右上角的蓝色)并进入“Build Settings”。然后,针对项目文件(蓝色)和自定义框架目标(例如 MyCustomFramework - 橙色的“午餐盒”图标)。

然后你可以在你的主 MyCustomFramework.h 文件中包含可可豆荚的东西。

然后只需导入'@import MyCustomFramework;'在您的 Application 目标中,您将获得其余的 CocoaPods 供您使用。 (例如,向您展示从 ObjectiveSugar 访问“每个”)。

您是否应该这样做是一个单独的问题,但这允许您的自定义框架本身包含 CocoaPods 库,然后允许应用程序目标仅包含您的自定义框架并获取所有 CocoaPods。

对于多张图片感到抱歉,但我喜欢视觉化。

【讨论】:

  • 这看起来很有希望,我遇到的问题是当我尝试#import "AFNetworking.h" 或许多变体时,它无法编译,说找不到文件。同时,在框架内的任何其他类中,导入工作正常。我的框架头好像看不到 AFNetworking?
  • 在赏金到期之前向您奖励...希望您能解决我的导入问题以结束问题。谢谢。
  • 有人可以在 GitHub 上上传一个示例项目吗?
  • 你能发布你的 Podfile 吗?如果我想在包括 cocoa touch 框架在内的多个目标中使用同一个 pod 怎么办?
  • 现在不再支持link_with我们应该怎么做?
【解决方案2】:

我猜你正在修改框架以使用 Pop。在这种情况下,您还需要将 Pop 标头的路径添加到框架构建设置的搜索标头路径中。

但是,如果您正在修改框架,您也可以为它创建一个podspec,然后让 CocoaPods 处理所有事情(并向创建者发送拉取请求?)。


关于赏金问题。

一个框架不应该嵌入其他库。例如,如果您想在库中使用 AFNetworking:

  • 在您自己的框架安装说明中说明需要 AFNetworking。
  • 如果您分发二进制文件,您只需针对 AFNetworking 标头在本地构建。用户在链接应用时需要提供自己的 AFNetworking。
  • 如果您将源代码与您的框架一起分发(如果用户必须自己构建它),那么在您的安装步骤中要求在您的框架中设置 AFNetworking 标头路径 Build Settings Header Search Paths 并将其预设为常见路径,例如 @987654322 @等

然后它可以工作,但是你有复杂的安装说明,如果有的话,用户必须手动添加资源,很难控制用户添加的 AFNetworking 版本,并且大多数人永远不会升级你的框架,因为它可能会破坏他们的设置。通过创建 podspec 来支持 CocoaPods 的所有充分理由(如果您真的需要,可以继续维护框架/静态库项目)。

【讨论】:

  • 也许我应该开始我自己的问题,而不是为此悬赏。但我认为这是密切相关的。在我的情况下,我想在我的嵌入式框架中包含 Pod,但在我的应用程序的目标中访问它们(我正在使用扩展)。所以,我的嵌入式框架需要AFNetworking,但我的应用程序也可以从AFNetworking 中受益。目前,如果我将 AFNetworking 设置为两个目标的依赖项,我会收到一些运行时错误,指出用法不明确,因为 App 二进制文件和 Framework 二进制文件都具有相同的 API。并且仅将其包含在框架依赖项中...
  • 防止在 App 目标中使用,编译器看不到任何内容。
  • 好点@Rivera,我没有考虑过后果。
  • 对于应用扩展的嵌入式框架来说,这是否值得关注?没有打算分发框架本身,它只是为了支持项目中的多个目标。
  • 我们有选择吗?我的印象是为了在 App Extensions 和容器应用程序之间共享代码,您需要创建嵌入式框架并链接到这两个目标?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 2022-07-28
  • 1970-01-01
  • 2014-12-04
相关资源
最近更新 更多