4.9 KiB
包管理工具
CocoaPods
CocoaPods 是非常好用的第三方依赖管理工具,它于2011年发布,经过这几年的发展,已经非常完善。CocoaPods 支持项目中采用 Objective-C 或者 Swift 语言。CocoaPods 会将第三方库的源代码编译为静态库 .a 文件或者动态库 .framework 文件的形式,并将它们添加到项目中,建立依赖关系。
Carthage
Carthage 是一个轻量级的项目依赖管理工具。Carthage 主张“去中心化”和“非侵入性”。
CocoaPods 搭建了一个中心库,第三方库被收入到该中心库,所以没有被收录的第三方库是不能使用 CocoaPods 管理的。这就是“中心化”的思想。而 Carthage 没有这样的中心库,第三方库基本都是从 Github 或者私有 git 库中下载的。这就是“去中心化”。
另外,CocoaPods 下载第三方库后,会将其变异成静态链接库或者动态框架文件,这种做法会修改 Xcode 项目属性依赖关系,这就是所谓的“侵入性”。而 Carthage 下载成功后,会讲第三方库编译为动态框架,由程序员自己配置依赖关系,Carthage 不会修改 Xcode 项目配置,这就是所谓的“非侵入性”
安装
brew update
brew install carthage
觉得 brew update 更新慢,不想更新的也可以执行 export HOMEBREW_NO_AUTO_UPDATE=true。由于经常在终端干活,所以设置了别名。
# 禁止终端利用 homebrew 安装插件时候的自动更新
alias disableHomebrewUpdate="export HOMEBREW_NO_AUTO_UPDATE=true"
使用
- 创建 cartfile 文件
touch cartfile - 修改 cartfile 文件
github "Alamofire/Alamofire" "5.0.0-rc.3"
github "onevcat/Kingfisher"
github "SnapKit/SnapKit" ~> 5.0.0
cartfile - dependency origin
Carthage 支持两种类型的源,一个是 github,一个是 git
- github 表示依赖源,告诉 Carthage 去哪里下载文件。依赖源之后跟上要下载的库,格式为
Username/ProjectName - git 关键字后面跟的是资料库的地址,可以是远程的 URL 地址,使用
git://http://ssh://或者是本地资料库地址。
cartfile - dependency version
告诉 Carthage 使用哪个版本,这是可选的。不指定的话,默认使用最新版本
==1.0表示使用1.0版本>= 1.0表示使用1.0或更高的版本~> 1.0表示使用版本1.0以上,但是低于2.0的最新版本,例如:1.2, 1.6- branch 名称/ tag 名称/ commit 名称,意思是使用特定的分支/标签/提交。比如可以说分支名 master,也可以是 commit id: 5c8w72
更新
carthage update 但默认会编译4个平台(macOS、iOS、watchOS、tvOS) 会比较耗时,所以可以优化下,指定特定平台
carthage update --platform iOS
安装后生成的文件
Cartfile.resolved
该文件是生成后的依赖关系以及各个库的版本号,不能修改。 该文件确保提交的项目可以使用完全相同的配置与方式运行启用。跟踪项目当前所用的依赖版本号,保持多端开发一致,出于这个原因。建议提交这个文件到版 本控制中。
github "Alamofire/Alamofire" "5.0.0-rc.3"
github "onevcat/Kingfisher"
github "SnapKit/SnapKit" ~> 5.0.0
Carthage 目录
该目录包含2个子目录:
- Checkouts 保存从 git 拉取的依赖库源文件
- Build 包含编译后的文件,包含了4个平台(Mac、iOS、tvOS、watchOS)对应的
.framework
- Carthage
- Build
- Checkouts
项目配置
Target -> Build Setting -> Search Paths -> Framework Search Paths 添加 $(PROJECT_DIR)/Carthage/Build/iOS
此时可以正常编写代码,和使用库的 api,但项目运行会 crash,报错为:dyld: Library not loaded: @rpath/SnapKit.framework/SnapKit Referenced from: ...
由于是非侵入式,所以需要程序员自己配置依赖,Target -> Build Phases -> '+' -> New Run Script Phase
- 添加脚本
/usr/local/bin/Carthage copy-frameworks。 - 添加 "Input Files"
$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework等等
Swift Package Manager
Swift Package Manager 是苹果推出的用于管理分发 swift 代码的工具,可以用于创建使用 swift 的库和可执行程序
能够通过命令快速创建 library 或者可执行的 swift 程序,能够跨平台使用,是开发出来的项目能够运行在不同的平台上。
Xcode 集成
Xcode 菜单栏:File -> Swift Packages -> Add Package Dependency... 输入项目地址后,在弹出框 Rules 里选择版本策略。