在子项目(框架项目)中使用 3rd 方 pod

Posted

技术标签:

【中文标题】在子项目(框架项目)中使用 3rd 方 pod【英文标题】:Use 3rd party pod in sub-project (framework project) 【发布时间】:2017-07-24 13:14:18 【问题描述】:

我正在使用 XCode 8 + Swift 3。

我创建了一个名为“MyApp”的全新 ios 项目。

然后,我创建了一个名为“MySubProject”的 Cocoa touch framework 项目。 (这个想法是让 MyApp 项目访问 MySubProject 代码。)

它们在同一级别的文件夹中:

- MyApp/
- MySubProject/

我将 MySubProject 添加到 MyApp 项目中,链接了 MySubProject 框架。一切正常。我的项目结构如下:

到这里为止一切正常! (MyApp 代码可以访问 MyService 代码)

现在,我需要 MySubProject 来使用 Alamofire 与后端通信。所以,在MySubProject/ 下,我用CocoaPod 设置了Alamofire,它创建了MySubProject.xcworkspace

我想我需要删除之前的MySubProject.xcodeproj并使用MySubProject.xcworkspace,所以我删除了MySubProject.xcodeproj的引用并将MySubProject.xcworkspace添加到MyApp,然后看起来像这样:

如您所见,我现在看不到 MySubProject 的源代码。

在框架子项目中通过 CocoaPod 使用 Alamofire 或任何 3rd 方库的正确方法是什么?

===== 更新 ====== 我需要将 Alamofire 添加到 MySubProject,而不是 MyApp。我按照 Alamofire 官网的说明手动将 Alamofire 添加到MySubProject,项目结构如下:

- MyApp
  - MySubProject.xcodeproj
    -Alamofire.xcodeproj

之后,我可以在 MySubProject 中访问 Alamofire,没有编译错误。但是,当我在模拟器中运行我的应用程序时,出现运行时错误:

Referenced from: /Users/myname/Library/Developer/Xcode/DerivedData/MyApp-hezjlyvzxnavccenabxdepgftbrg/Build/Products/Debug-iphonesimulator/Alamofire.framework/Alamofire
  Reason: image not found

如何解决?

【问题讨论】:

看看***.com/questions/45319504/… 【参考方案1】:

你可以用三种不同的方式来做这件事。

1) 将依赖项直接添加到您的 MyApp 项目中

2) 构建 MySubProject 并将包含依赖项的库添加到 MyApp 项目中。 (假设 MySubProject 将是一个库)

3) 使用自定义 pod 时,您可以在 .podspec 文件中提供依赖项。通过这种方法,我可以导入自己的库(作为 pod),它依赖于其他 Cocoapod。

编辑:经过仔细观察,我们得出结论,上述方法不符合 leem.fin 的具体要求。不可能将一个框架包含到另一个框架中。但是还有另外两个选择:

1) 在您的框架之外发布辅助框架并将其链接到您自己的框架。这样 MySubProject 和 MyApp 都可以链接到该框架。

2) 将源代码直接导入 MySubProject,以便使用 MySubProject.framework 对其进行编译,并且它们可供其他简单链接到 MySubProject 的目标访问。

最简单的方法是将源代码直接导入 MySubProject。如果您不复制资源而是链接到该文件夹​​,则可以在需要获取最新更改时 git update 源代码。

【讨论】:

我需要将 Alamofire 添加到 MySubProject,而不是 MyApp 为什么不能将它添加到 MySubProject 并将其编译到以 AFNetworking 作为依赖项的库中?我认为你的项目过于复杂了。 我不能,因为我试过了,但它不能。请在此处查看我的其他问题:***.com/questions/45307258/… 您需要重新考虑您的项目结构并了解依赖项是如何工作的。我有相同的结构,但我将 Alomfire 作为 pod 添加到我的项目中,然后将 MySubProject 包含在 MyApp 中。当我打开 MyApp 时,我需要将 Pods_MySubProject.framework 添加到我的链接框架中并且它可以工作。 因为我想把MySubProject框架交付给其他开发者使用,他们只需要访问我的API,Alamofire直接返回后端数据。

以上是关于在子项目(框架项目)中使用 3rd 方 pod的主要内容,如果未能解决你的问题,请参考以下文章

在我的子项目(CocoaTouch 框架)中使用 3rd 方框架(Alamofire)

如何在操场上安装 3rd 方依赖项(如 Alamofire)

在没有 3rd 方工具/项目的 MFC C++ 版本中查找内存泄漏

如何与框架项目swift共享父(主机)项目pod?

通过pod导入第三方框架

将 3rd 方依赖项直接保存到 Flutter 项目