CocoaPods和Carthage

时间:2016-06-10 09:13:19

标签: swift cocoapods carthage

我与迦太基和Cocoapods共同开展了一个项目。它们都有一个共同的依赖(PureLayout,确切地说)。很奇怪,但项目编译很好,没有任何关于类重新声明等的错误。 所以问题是:当我调用PureLayout的方法 - Carthage或Cocoapods的方法时,为什么它可以工作以及实际使用了哪个版本的依赖?

3 个答案:

答案 0 :(得分:5)

CarthageCocoaPods在构建依赖项并将它们集成到项目中方面非常不同。

CocoaPods是集中式依赖管理器,它将构建您的依赖项,并通过创建新的.xcworkspace工作区将它们直接集成到项目中。这意味着您可以在构建之后立即访问构建依赖项。

另一方面,Carthage是分散式依赖管理器,它让您完成将依赖项集成到项目中的任务。 Carthage构建Cartfile中指定的框架并将它们移动到Carthage/Builds文件夹。在构建过程之后,由您来集成和管理依赖项。

在你的情况下,当你使用CocoaPods和Carthage构建你的PureLayout依赖项时,CocoaPods将它集成到项目中,而Carthage在Carthage/Builds中留下了构建,这意味着你只使用了CocoaPods构建版本的{ {1}}。

此外,使用多个包/依赖项管理器是一种不好的做法。你应该坚持下去,并对它感到舒服。

答案 1 :(得分:0)

package manager是一种工具,它可以自动完成软件的安装,升级,配置和删除过程,在这种情况下,还可以在我们的应用程序内部进行安装。

CocoaPodscentralized dependency manager(基于名为Specs的主存储库,该主存储库承载所有框架规范),用于Swift和Objective-C Cocoa项目。它是开源的,许多volunteers and the open-source community都是使用Ruby构建的。

✓优势

  • 您可以在CocoaPods官方网站上搜索依赖项。
  • 同时支持Dynamic FrameworksStatic Libraries(从1.5.0版开始)。
  • 自动管理依赖项的依赖项。如果一个依赖项依赖于另一个依赖项,CocoaPods将为您处理。
  • 任何人都可以轻松分辨出您的应用程序正在使用哪些依赖项。
  • 通过使用命令pod outdated,很容易检查是否有新版本的依赖项。
  • 如果依赖项支持它,则可以使用命令pod try <name>将其集成到项目中之前先尝试依赖项。
  • 具有official Mac app来轻松管理应用程序依赖性。
  • 几乎每个框架都支持CocoaPods。

✕缺点

  • 您第一次安装依赖项时将不得不等待很长时间,即使只是一个依赖项,因为CocoaPods必须在Mac上下载主要的Specs存储库。当您要更新依赖项时,也会在每个pod update命令上发生这种情况。
  • 您的主项目将被修改为能够使用您的所有依赖项。确实可以使用命令pod deintegrate删除CocoaPods集成。
  • 每次构建项目时,也会构建所有依赖项,这会导致构建时间变慢。

Carthagedecentralized dependency manager(与CocoaPods不同,您没有主要的Specs存储库,检查过时的依赖关系意味着检查每个依赖关系存储库,而不是检查单个集中存储库) Swift和Objective-C可可项目。它是开源的,由open-source community使用Swift构建。

✓优势

  • 同时支持[Dynamic Frameworks]和[Static Libraries](从0.30.0版开始)。
  • 自动管理依赖项的依赖项。如果一个依赖项依赖于另一个依赖项,则迦太基会为您处理。
  • 项目中的任何人都可以轻松知道您的应用程序正在使用哪些依赖项。
  • 使用carthage outdated命令很容易检查是否有新版本的依赖项。
  • CocoaPods相比,您的项目的构建速度更快,因为迦太基仅一次构建了框架(调用carthage updatecarthage bootstrap命令时)。
  • 您的项目保持不变,因为您将仅添加框架和新的构建阶段。

✕缺点

  • (步骤太多),很容易错过向迦太基构建阶段添加新依赖项的过程。
  • 并非每个框架都支持Carthage。

The source article

答案 2 :(得分:0)

当您不使用Dependency manager作为开发人员时,您将负责:

  • 找到依赖项
  • 解决依赖关系图和版本控制
  • 下载源代码
  • 将依赖项添加到Xcode

当您决定升级依赖项时,应从头开始

Dependency manager是一个工具,可帮助用户以最小的负担将依赖项添加到项目中

CocoaPods [About]open-source集中式的依赖项管理器,用于在Ruby上编写的Swift和Objective-C Cocoa项目。它支持Dynamic FrameworksStatic Libraries [timeline]

注意:

  • CocoaPods需要一个工作区
  • 使用者项目没有清晰的依赖关系视图,只有
  • 每次构建项目时,都会重新构建所有依赖项。

Carthageopen-source去中心化的依赖项管理器,用于在Swift上编写的Swift和Objective-C Cocoa项目。它支持Dynamic FrameworksStatic Libraries

注意:

  • 作为消费者项目开发人员,您负责安装具有依赖项的Xcode。它在IDE中创建了一些额外的步骤
  • 作为依赖开发人员,您没有某些工具(例如,子规格)