在子项目(框架项目)中使用 3rd 方 pod
Use 3rd party pod in sub-project (framework project)
我正在使用 XCode 8 + Swift 3.
我创建了一个名为“MyApp”的新 iOS 项目。
然后,我创建了一个 Cocoa touch framework 项目,命名为 "MySubProject"。
(想法是让 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 的源代码。
在 Framework 子项目中通过 CocoaPod 使用 Alamofire 或任何第三方库的正确方法是什么?
=====更新======
我需要将 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) 直接将依赖添加到你的MyApp项目中
2) 构建MySubProject 并将包含依赖项的库添加到MyApp 项目中。 (假设 MySubProject 将是一个库)
3) 使用自定义 pods 时,您可以在 .podspec 文件中提供依赖项。通过这种方法,我可以导入我自己的库(作为 pods),它依赖于其他 Cocoapods.
编辑:仔细查看后我们得出结论,上述方法不符合leem.fin的具体要求。不可能将一个框架包含到另一个框架中。但还有其他两个选择:
1) 除了您的框架之外,还运送辅助框架并link它到您自己的框架。这样 MySubProject 和 MyApp 都可以 link 该框架。
2) 将源代码直接导入 MySubProject,这样它们将与 MySubProject.framework 一起编译,并且它们可供其他目标访问,只需 link 到 MySubProject。
最简单的方法是将源代码直接导入 MySubProject。如果您不复制资源而是 link 到文件夹,您可以 git 在需要获取最新更改时更新源。
我正在使用 XCode 8 + Swift 3.
我创建了一个名为“MyApp”的新 iOS 项目。
然后,我创建了一个 Cocoa touch framework 项目,命名为 "MySubProject"。 (想法是让 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 的源代码。
在 Framework 子项目中通过 CocoaPod 使用 Alamofire 或任何第三方库的正确方法是什么?
=====更新======
我需要将 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) 直接将依赖添加到你的MyApp项目中
2) 构建MySubProject 并将包含依赖项的库添加到MyApp 项目中。 (假设 MySubProject 将是一个库)
3) 使用自定义 pods 时,您可以在 .podspec 文件中提供依赖项。通过这种方法,我可以导入我自己的库(作为 pods),它依赖于其他 Cocoapods.
编辑:仔细查看后我们得出结论,上述方法不符合leem.fin的具体要求。不可能将一个框架包含到另一个框架中。但还有其他两个选择:
1) 除了您的框架之外,还运送辅助框架并link它到您自己的框架。这样 MySubProject 和 MyApp 都可以 link 该框架。
2) 将源代码直接导入 MySubProject,这样它们将与 MySubProject.framework 一起编译,并且它们可供其他目标访问,只需 link 到 MySubProject。
最简单的方法是将源代码直接导入 MySubProject。如果您不复制资源而是 link 到文件夹,您可以 git 在需要获取最新更改时更新源。