16

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

4

2 回答 2

14

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

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

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

在您的情况下,当您PureLayout使用 CocoaPods 和 Carthage 构建依赖项时,CocoaPods 将其集成到项目中,Carthage 为您留下了构建版本,Carthage/Builds这意味着您仅使用 CocoaPods 构建版本的PureLayout.

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

于 2016-06-10T09:29:27.810 回答
5

iOS 依赖管理器

当您不使用 aDependency manager作为开发人员时,您需要负责:

  • 寻找依赖
  • 解析依赖图和版本控制
  • 下载源
  • 将依赖项添加到 Xcode

当你决定升级依赖时,你应该从头开始这个过程

Dependency manager是一种工具,可帮助用户以最少的代价将依赖项添加到项目中

CocoaPods[About]是一个开源的集中的依赖管理器,用于 Swift 和 Objective-C Cocoa 项目,它是用 Ruby 编写的。它支持Dynamic FrameworksStatic Libraries[时间线]

笔记:

  • CocoaPods 需要有一个工作空间

  • 消费者项目没有清晰的依赖关系视图<Pods_target-name.framework>

  • 每次构建项目时都会重新构建所有依赖项。

  • 不能在同一个工作空间中使用不同的 pod 版本

    CocoaPods could not find compatible versions for pod
    

Carthage[About]是一个开源的分散的依赖管理器,用于 Swift 和 Objective-C Cocoa 项目,它是在 Swift 上编写的。它支持Dynamic FrameworksStatic Libraries

笔记:

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

Swift Package Manager(SPM)[About]是一个开源的分散的 依赖管理器,它是在 Swift 上编写的。它支持动态和静态库。.xcodeproj未使用。如果你想分发封闭源代码(二进制框架),你应该使用XCFramework[关于]

*CocoaPods默认情况下每次(在清理或任何未知原因之后)构建开源 pod,这会增加构建时间(但您可以使用cocoapods-binary),Carthage并且SPM默认预构建框架。

*closed-source 允许您关闭源代码并节省构建时间,但可能会遇到ABI stability[关于]的问题

于 2019-12-09T22:40:50.290 回答