我与迦太基和可可波德都有一个项目。它们都有一个共同的依赖项(准确地说是PureLayout)。奇怪,但项目编译得很好,没有任何关于类重新声明等的错误。所以问题是:当我调用PureLayout的方法——Carthage的或Cocoapods的方法时,为什么它有效,实际使用了哪个版本的依赖项?
Carthage
和CocoaPods
在构建依赖关系和将它们集成到项目中方面有很大不同。
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 Frameworks
和Static Libraries
[时间线]
注:
-
CocoaPods需要有一个工作区
-
使用者项目不具有依赖关系的清晰视图<Pods_target-name.framework>
-
每次构建项目时,所有依赖项都会重新生成。它增加了构建时间作为一种变通方法——看看椰子二进制
-
不可能在同一工作区中使用不同的pod版本
CocoaPods could not find compatible versions for pod
Carthage
[关于]是Swift和Objective-C Cocoa项目的开源、去中心化依赖管理器,正在Swift上编写。支持Dynamic Frameworks
和Static Libraries
注:
- 作为一名消费者项目开发人员,您负责设置具有依赖项的Xcode。它在IDE中创建了一些额外的步骤
- 作为依赖项开发人员,您没有一些工具(例如subsecs)
Swift Package Manager(SPM)
[关于]是一个开源的、去中心化的依赖管理器,正在Swift上编写。它支持动态和静态库。未使用.xcodeproj
。如果你想分发闭源代码(二进制框架),你应该使用XCFramework
[关于]
*默认情况下,CocoaPods
每次(在清理或任何未知原因之后)都会构建开源pod,这会增加构建时间(但您可以使用cocoapods-binary
),默认情况下Carthage
和SPM
预构建框架。
*封闭源代码允许您关闭源代码并节省构建时间,但ABI stability
[关于]可能会出现问题