可可豆和迦太基



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

CarthageCocoaPods在构建依赖关系和将它们集成到项目中方面有很大不同。

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

另一方面,Carthage是去中心化的依赖关系管理器,它让您将依赖关系集成到项目中。Carthage构建Cartfile中指定的框架,并将它们移到Carthage/Builds文件夹中。在构建过程之后,由您来集成和管理依赖关系。

在您的案例中,当您使用CocoaPods和Carthage构建PureLayout依赖项时,CocoaPodes将其集成到项目中,Carthage为您留下了Carthage/Builds中的构建,这意味着您只使用了PureLayout的CocoaPod构建版本。

此外,使用多个包/依赖项管理器也是一种糟糕的做法。你应该坚持这个,并对它感到舒适。

iOS依赖关系管理器

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

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

当您决定升级依赖项时,您应该从一开始的开始这个过程

Dependency manager是一个帮助用户在项目中添加依赖项的工具,它提供了最低限度的

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

注:

  • CocoaPods需要有一个工作区

  • 使用者项目不具有依赖关系的清晰视图<Pods_target-name.framework>

  • 每次构建项目时,所有依赖项都会重新生成。它增加了构建时间作为一种变通方法——看看椰子二进制

  • 不可能在同一工作区中使用不同的pod版本

    CocoaPods could not find compatible versions for pod
    

Carthage [关于]是Swift和Objective-C Cocoa项目的开源、去中心化依赖管理器,正在Swift上编写。支持Dynamic FrameworksStatic Libraries

注:

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

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

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

*封闭源代码允许您关闭源代码并节省构建时间,但ABI stability[关于]可能会出现问题

最新更新