在子项目中使用第三方pod(框架项目)

时间:2017-07-24 13:14:19

标签: ios cocoapods alamofire ios-frameworks

我正在使用XCode 8 + Swift 3。

我创建了一个名为" MyApp "的全新iOS项目。

然后,我创建了一个Cocoa touch 框架项目,名为" MySubProject"。 (我们的想法是让 MyApp 项目访问 MySubProject 代码。)

它们位于同一级文件夹中:

- MyApp/
- MySubProject/

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

enter image description here

所有工作直到这里! (MyApp代码可以访问MyService代码)

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

我想我需要删除之前的MySubProject.xcodeproj并使用MySubProject.xcworkspace,因此我删除了MySubProject.xcodeproj&的引用将MySubProject.xcworkspace添加到MyApp,它看起来像这样:

enter image description here

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

在Framework子项目中通过CocoaPod使用Alamofire或任何第三方库的正确方法是什么?

===== UPDATE ====== 我需要将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

如何解决?

1 个答案:

答案 0 :(得分:1)

你可以通过三种不同的方式做到这一点。

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

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

3)使用自定义窗格时,您可以在.podspec文件中提供依赖关系。通过这种方法,我可以导入我自己的库(作为一个pods),这取决于其他Cocoapods。

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

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

2)将源直接导入MySubProject,这样它们就可以使用MySubProject.framework进行编译,并且只有链接到MySubProject的其他目标才能访问它们。

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