2016-11-21 65 views
7

我创建了一个CocoaPod,比如说MyPod,它依赖于另一个Cocoapod,比如RxSwift在开发CocoaPod时使用CocoaPod依赖项

所以我有这样的MyPod.podspec

s.dependency "RxSwift", "~> 3.0.1" 

然而,尽管发展MyPod,我怎么能实际使用的依赖?

import RxSwift 
// ^
// No such module 'RxSwift' 

public class MyClass { //... 

有没有我失踪的一步,或一些常见的约定?看起来像Moya等其他项目正在使用Carthage在开发过程中构建依赖关系。我应该这样做,或者可以添加一个Podfile

我知道这对于位于回购协议中的示例应用程序应该不是问题,该示例应用程序将拥有自己的Podfile。但是,我仍想在示例应用程序之外的顶级测试中进行测试,并且能够在示例应用程序之外再次对其进行构建时实际构建框架。

回答

1

我最终使用Carthage来构建框架依赖关系。我想我可以用CocoaPods来做。但是,这需要我开始使用工作区,并且我不想这样做,以便尽可能减少更改。

而且,与迦太基,它并不需要我添加一个新的Podfile/Podfile.lock,因为迦太基将使用现有的Cartfile/Cartfile.resolved这是已经存在。这是因为在单独构建框架时,Carthage在另一个项目中使用框架时使用Cartfile.resolved。然而,随着的CocoaPods,*.podspec在另一个项目中使用.NET Framework时使用Podfile.lock如果你一个Podfile加)在框架本身安装相关的豆荚需要。

6

我不能说是否使用CocoaPods或迦太基。两者都有其优点和缺点。另外,应该考虑很多因素,其中一些可能无法控制(例如坚持使用CocoaPods的客户端),所以我会跳过这一部分。

但是,对于您的问题,确实您正在开发的吊舱可能依赖于另一个吊舱。您已经有了正确的s.dependency一行。这是必要的。

但是,我怀疑你无法引用相关pod的原因可能是因为你的'tester/example'项目中没有Podfile,并且/或者在添加完毕后没有执行pod install依赖于你的Podspec。

原因是我怀疑是因为Podspec根本没有被Xcode实际处理过,所以实际上并没有下载(或编译)依赖关系。

相反,当你进行pod安装(当然是通过命令行)时,CocoaPods将创建一个Pods项目,包括你的开发窗口,你依赖的窗口(在Podspec中)以及Podfile中的其他窗格。

为了验证这一理论,我:

  • 创建一个新的吊舱(使用CocoaPod自己的“豆荚LIB创建”(https://guides.cocoapods.org/making/using-pod-lib-create.html
  • 打开的CocoaPod我创建和编辑的Podspec到工作区。添加依赖s.dependency 'RxSwift', '~> 3.0.1'
  • 加在我的示例应用程序的Podfile的另一盒(证明Podfile依赖和Podspec依赖之间的区别。)
  • 在示例应用程序的folde演出pod install
  • 编辑我的Pod的类来做一些有用的事情,并添加import RxSwift行。
  • 为我的示例应用程序(当然是“Hello World”)添加了一个标签。
  • 二手PureLayout做所有的汽车布局限制为标签(与证明示例项目如何访问这两个吊舱 - 发展吊舱以及被引用的吊舱PureLayout

您可以检查出我对我的公开GitHub上创建的演示: https://github.com/ericwastaken/CocoaPod-Dependency-Demo

老实说,我已经创建使用pod lib create几个豆荚和它确实创造一个很好的结构,它一直为我工作。出于这个原因,我会建议您始终使用它来创建您的吊舱的骨架。

Xcode 8评论:pod lib create似乎仍然创建一个Swift 1.x项目。所以,在你使用这个工具之后,当你打开Xcode时,你将被提供“转换”到一个更新版本的Swift。我会让这种转换在第一时间发生,这样你就可以使用Swift 2.x或3.x语法(你可以选择)。

+0

感谢您的彻底解答。但是,我认为你错过了我的问题的最后一部分,我说我不想通过ExampleApp进行开发(甚至根本不需要开发),我想在框架的顶层进行我的测试本身。我希望我的ExampleApp(如果我甚至有)只是为了展示如何使用框架。它不应该包含任何必要的东西,比如测试。它应该能够被删除而不用担心。 – solidcell

+0

我鼓励你克隆我创建的回购。您会注意到示例应用程序根本不需要,它确实可以删除。像你说的那样,你在'发展荚'中做所有的发展。另外,您确实可以针对该窗格编写单元测试。单元测试目标可以简单地将pod作为依赖项,并且可以使用TESTABLE将私有方法公开到测试中。随意克隆它,并尝试删除示例。请注意,您仍然需要一个Podfile,但这本身就可以。 – ericWasTaken

+0

最终,主要的收获是你仍然需要一个额外的'Podfile'来让框架能够自行构建。至于你的回购,我试图建立它,但我得到了大量的Xcode问题。找不到文件(红色),然后在我尝试构建时在'../ build'中添加一个构建文件夹。如果我关闭并再次打开它,它会为每个方案创建一个复制方案:每个方案都有“___ 2”。没问题,因为我已经和你一样解决了这个问题('Podfile'),所以把项目设置的差异放在一边。 – solidcell