在子项目(框架项目)中使用 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)