在开发CocoaPod

时间:2016-11-21 13:49:25

标签: ios swift xcode frameworks cocoapods

我正在创建一个CocoaPod,比如MyPod,这取决于另一个Cocoapod,比如RxSwift

所以我在MyPod.podspec

中有这个
s.dependency "RxSwift", "~> 3.0.1"

但是,在开发MyPod时,我如何实际使用依赖项?

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

public class MyClass { //...

我缺少一个步骤,还是一些常见的约定?看起来像Moya这样的其他项目正在使用Carthage来构建开发时的依赖项。我应该这样做,还是可以添加Podfile

我知道这对于位于repo中的示例应用程序来说应该不是问题,该应用程序具有自己的Podfile。但是,我仍然希望在示例应用程序之外的顶层进行测试,并且能够在处理它时实际构建框架,同样,在示例应用程序之外。

3 个答案:

答案 0 :(得分:10)

我不能谈论是否使用CocoaPods或Carthage。两者都有其优点和缺点。此外,应该考虑许多因素,其中一些因素可能无法控制(比如坚持使用CocoaPods的客户端!)所以我会跳过那部分。

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

但是,我怀疑你无法引用从属pod的原因可能是因为你的“测试者/示例”中没有Podfile。项目和/或您在Podspec中添加依赖项后没有pod install

之所以这样做是因为我怀疑是因为Xs实际上并没有处理Podspec,所以你实际上并没有下载(或编译)依赖。

相反,当您进行pod安装(当然是通过命令行)时,CocoaPods将使用您的开发窗格,您依赖的窗格(在Podspec中)以及Podfile中的任何其他窗格创建一个Pod项目。 / p>

为了测试这个理论,我:

  • 创建了一个新的pod(使用CocoaPod自己的< pod lib创建'(https://guides.cocoapods.org/making/using-pod-lib-create.html)。
  • 打开CocoaPod为我创建的工作区,并编辑Podspec以添加依赖项s.dependency 'RxSwift', '~> 3.0.1'
  • 在我的示例应用程序的Podfile中添加了另一个pod(以演示Podfile依赖项和Podspec依赖项之间的区别。)
  • 在示例应用的文件夹中执行了pod install
  • 编辑我的Pod课程,做一些有用的事情并添加import RxSwift行。
  • 在我的示例应用程序中添加了一个标签(" Hello World"当然)。
  • 使用PureLayout对标签执行所有自动布局约束(并演示示例项目如何访问两个窗格 - 开发窗格以及引用的窗格PureLayout。)

您可以查看我在公共GitHub上创建的演示: https://github.com/ericwastaken/CocoaPod-Dependency-Demo

老实说,我已经使用pod lib create创建了几个pod,它确实创建了一个总是对我有用的漂亮结构。出于这个原因,我建议总是使用它来创建你的pod的骨架。

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

答案 1 :(得分:3)

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

此外,对于迦太基,我不需要添加新的Podfile / Podfile.lock,因为迦太基将使用现有的Cartfile / Cartfile.resolved 。这是因为当在自己构建框架时,Carthage在另一个项目中使用框架时使用Cartfile.resolved。然而,使用CocoaPods时,在另一个项目中使用框架时会使用*.podspec,但 Podfile.lock如果您添加了Podfile )需要在框架本身中安装依赖的pod。

答案 2 :(得分:0)

这是一个非常具有挑战性的问题,需要将一些解决方案组合在一起。 @EricWasTaken的解决方案提供了帮助,并添加了:

source 'https://github.com/CocoaPods/Specs.git'

到我的Podfile的顶部。然后导航到示例应用程序并运行

pod repo update
pod install

现在我正在创建的框架可以找到我的框架所需的cocoapods。