Carthage安装和使用教程
Carthage简单介绍
主页: | https://github.com/Carthage/Carthage.git |
---|---|
作者: | Justin Spahr-Summers等 |
版本: | 0.31 |
目标: | 用最简单的方式来管理Cocoa第三方框架 |
性质: | 第三方框架管理工具(类似于cocoapods) Carthage为用户管理第三方框架和依赖,但不会自动修改项目文件和生成配置,把对项目结构和设置的控制权交给用户。 |
原理 | 自动将第三方框架编程为Dynamic framework(动态库) |
限制 | 仅支持iOS8+。它只支持框架,所以不能用来针对iOS8以前的系统版本进行开发 |
Carthage的安装和使用
直接下载Carthage.pkg安装包,安装运行
Carthage.pkg下载如果使用的XCode为7.0+版本,那么也可以使用下面的方法来安装
1 安装homebrew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2 升级brew
$ brew update
3 使用brew来安装
$ brew install Carthage
4 查看版本
$ Carthage version
Carthage的使用
先进入到项目所在文件夹
$ cd 项目路径
创建一个空的Carthage文件
$ touch Cartfile
编辑cartfile文件,例如要安装AFN框架
GitHub库可在cartfile文件添加以下内容,指定GitHub的关键字:
github "AFNetworking/AFNetworking"
或者填写其他git源,指定git关键词:
git "https://github.com/AFNetworking/AFNetworking.git"
保存并关闭cartfile文件,使用cartfile安装框架
$ Carthage update --platform iOS
注: 不追加参数会编译出 iOS、OSX、tvos多个framework
注2: 如果失败的话,先用Xcode打开你的项目,Product > Scheme > Manage Schemes
在新窗口中,勾选上 Shared,点击 Close。在终端再次执行这个命令
打开Carthage 查看生成的文件目录
$ open Carthage
- 执行安装依赖命令后的文件夹结构
# 执行文件多出三个文件
Cartfile # 存放需要安装的依赖列表
Cartfile.resolved # 自动生成的依赖关系文件,需提交到git
# 确保提交的项目可以使用完全相同的配置与方式运行启用, 跟踪项目当前所用的依赖版本号
Carthage # 自动生成的Carthage目录 (不需要提交到 Git)
# 目录下有两个文件夹:Build Checkouts
# Build 存放编译后的文件,包括 iOS/Mac/tvOS/watchOS对应的framework
# Checkouts 存放从git拉取的依赖库源文件
配置项目
打开项目,点击Target -> Build Phases -> Link Library with Libraries
选择Carthage/Build
目录中要导入的framework
添加编译的脚本
(该脚本文件保证在提交归档时会对相关文件和dSYMs进行复制)
(1)点击Build Phases,点击“+” -> New Run Script Phase
(2)添加添加脚本 /usr/local/bin/Carthage copy-frameworks
(3)添加”Input Files” $(SRCROOT)/Carthage/Build/iOS/AFNetworking.framework
在项目中使用第三方库
#import <AFNetworking/AFNetworking.h>
其它:
卸载Carthage:$ brew uninstall Carthage
更新第三方框架:
更新多个框架:修改Cartfile文件,并重新执行 $ carthage update
更新某个框架:$ carthage update
具体的框架名称
carthage update # 修改了Cartfile文件,并重新编译
carthage update Alamofire # 仅更新Alamofire框架
carthage update --platform ios # 仅编译iOS平台的framework
carthage bootstrap # 从本地库重新编译依赖
Carthage优缺点
Carthage的优点
1)使用了CocoaPods的项目是高度集成的,而Carthage更灵活强调尽可能将任务委托给Xcode和Git。
CocoaPods在使用中会自动创建和更新workspace、依赖和Pod项目并进行整合;
Carthage在使用中不需要创建和集成相应的workspace和project,只需要依赖打包好的framework文件即可。
总结一下,CocoaPods的方法更容易使用,而Carthage更灵活且对项目没有侵入性。
2)CocoaPods相对来说功能要比Carthage多很多,因此也更复杂,而CocoaPods配置简单项目干净。
3)CocoaPods有一个中心仓库,而Carthage是去中心化的,没有中心服务器也就避免了可能因中心节点错误而带来的失败,即Carthage每次配置和更新环境,只会去更新具体的库,时间更快。
4) Carthage 管理的依赖只需编译一次,项目干净编译时,不会再去重新编译依赖,节省时间
5) 与 CocoaPods 无缝集成,一个项目能同时拥有 CocoaPods 和 Carthage
Carthage的不足
- 仅支持 iOS8 +
- 它只支持框架,所以不能用来针对 iOS 8 以前的系统版本进行开发
- 支持的 Carthage 安装的第三方框架和依赖不如 CocoaPods 丰富
- 无法在 Xcode 里定位到第三方库源码
Carthage的工作过程说明
① 创建一个Cartfile文件,在该文件中列出您想使用的框架
② 运行Carthage,获取并编译Cartfile文件中列出的框架
③ 把框架的二进制文件配置到项目中
关于版本指定
Carthage 支持以下几种版本指定方法:
= 1.0 代表 “最低 1.0版本”
~> 1.0 代表 “表示使用版本1.0以上但是低于2.0的最新版本,如1.5, 1.9”
== 1.0 代表 “必须是 1.0 版本”
“some-branch-or-tag-or-commit”指定一个 Git 对象 (任何被 git rev-parse 允许的)
如果没有版本要求,任何版本的依赖是允许的。
版本好的兼容性是根据语语义化版本控制决定的。这意味着任何大于或等于1.5.1版本,但小于2.0,将认为与1.5.1“兼容”。
Cartfile示例
# Require version 2.3.1 or later 最低2.3.1版本
github "ReactiveCocoa/ReactiveCocoa" >= 2.3.1
# Require version 1.x 必须1.x版本
github "Mantle/Mantle" ~> 1.0 # (大于或等于 1.0 ,小于 2.0)
# Require exactly version 0.4.1 必须0.4.1版本
github "jspahrsummers/libextobjc" == 0.4.1
# Use the latest version 使用最新版本
github "jspahrsummers/xcconfigs"
# Use the branch 使用git分支
github "jspahrsummers/xcconfigs" "branch"
# Use a project from GitHub Enterprise 使用一个企业项目,在 "development" 分支
github "https://enterprise.local/ghe/desktop/git-error-translations"
# Use a project from any arbitrary server, on the "development" branch 使用一个私有项目,在 "development" 分支
git "https://enterprise.local/desktop/git-error-translations2.git" "development"
# Use a local project 使用一个本地的项目
git "file:///directory/to/project" "branch"
Git 中忽略不需要提交到版本库的文件与文件夹
修改 .gitignore 文件,增加忽略 Carthage 文件夹就行了:
#Carthage
Carthage
Carthage的其他命令
archive Archives built frameworks into a zip that Carthage can use
bootstrap Check out and build the project's dependencies
build Build the project's dependencies
checkout Check out the project's dependencies
copy-frameworks In a Run Script build phase, copies each framework specified by a SCRIPT_INPUT_FILE environment variable into the built app bundle
fetch Clones or fetches a Git repository ahead of time
help Display general or command-specific help
outdated Check for compatible updates to the project's dependencies
update Update and rebuild the project's dependencies
version Display the current version of Carthage