一 Carthage簡單介紹
| 主頁: | https://github.com/Carthage/Carthage.git |
|---|---|
| 作者: | Justin Spahr-Summers等 |
| 版本: | 0.31 |
| 目標(biāo): | 用最簡單的方式來管理Cocoa第三方框架 |
| 性質(zhì): | 第三方框架管理工具(類似于cocoapods) Carthage為用戶管理第三方框架和依賴,但不會(huì)自動(dòng)修改項(xiàng)目文件和生成配置,把對項(xiàng)目結(jié)構(gòu)和設(shè)置的控制權(quán)交給用戶。 |
| 原理 | 自動(dòng)將第三方框架編程為Dynamic framework(動(dòng)態(tài)庫) |
| 限制 | 僅支持iOS8+。它只支持框架,所以不能用來針對iOS8以前的系統(tǒng)版本進(jìn)行開發(fā) |
二 Carthage的安裝和使用
直接下載Carthage.pkg安裝包,安裝運(yùn)行
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的使用
?1 先進(jìn)入到項(xiàng)目所在文件夾
$ cd 項(xiàng)目路徑
?2 創(chuàng)建一個(gè)空的Carthage文件
$ touch Cartfile
?3 編輯cartfile文件,例如要安裝AFN框架
GitHub庫可在cartfile文件添加以下內(nèi)容,指定GitHub的關(guān)鍵字:
github "AFNetworking/AFNetworking"
或者填寫其他git源,指定git關(guān)鍵詞:
?git "https://github.com/AFNetworking/AFNetworking.git"
?
4 保存并關(guān)閉cartfile文件,使用cartfile安裝框架
$ carthage update --platform iOS
注: 不追加參數(shù)會(huì)編譯出 iOS、OSX、tvos多個(gè)framework

注2: 如果失敗的話,先用Xcode打開你的項(xiàng)目,Product > Scheme > Manage Schemes 在新窗口中,勾選上 Shared,點(diǎn)擊 Close。在終端再次執(zhí)行這個(gè)命令

5 打開Carthage 查看生成的文件目錄
$ open Carthage

- 執(zhí)行安裝依賴命令后的文件夾結(jié)構(gòu)
# 執(zhí)行文件多出三個(gè)文件
Cartfile # 存放需要安裝的依賴列表
Cartfile.resolved # 自動(dòng)生成的依賴關(guān)系文件,需提交到git
# 確保提交的項(xiàng)目可以使用完全相同的配置與方式運(yùn)行啟用, 跟蹤項(xiàng)目當(dāng)前所用的依賴版本號(hào)
Carthage # 自動(dòng)生成的Carthage目錄 (不需要提交到 Git)
# 目錄下有兩個(gè)文件夾:Build Checkouts
# Build 存放編譯后的文件,包括 iOS/Mac/tvOS/watchOS對應(yīng)的framework
# Checkouts 存放從git拉取的依賴庫源文件
?6 配置項(xiàng)目
?打開項(xiàng)目,點(diǎn)擊Target -> Build Phases -> Link Library with Libraries選擇Carthage/Build目錄中要導(dǎo)入的framework

7 添加編譯的腳本
(該腳本文件保證在提交歸檔時(shí)會(huì)對相關(guān)文件和dSYMs進(jìn)行復(fù)制)
?(1)點(diǎn)擊Build Phases,點(diǎn)擊“+” -> New Run Script Phase

?(2)添加添加腳本 /usr/local/bin/Carthage copy-frameworks
?(3)添加"Input Files" $(SRCROOT)/Carthage/Build/iOS/AFNetworking.framework

8 在項(xiàng)目中使用第三方庫
#import <AFNetworking/AFNetworking.h>
?其它:
?卸載Carthage:$ brew uninstall Carthage
?更新第三方框架:
?更新多個(gè)框架:修改Cartfile文件,并重新執(zhí)行 $ carthage update
更新某個(gè)框架:$ carthage update 具體的框架名稱
carthage update # 修改了Cartfile文件,并重新編譯
carthage update Alamofire # 僅更新Alamofire框架
carthage update --platform ios # 僅編譯iOS平臺(tái)的framework
carthage bootstrap # 從本地庫重新編譯依賴
四 Carthage優(yōu)缺點(diǎn)
Carthage的優(yōu)點(diǎn)
? 1)使用了CocoaPods的項(xiàng)目是高度集成的,而Carthage更靈活強(qiáng)調(diào)盡可能將任務(wù)委托給Xcode和Git。
? CocoaPods在使用中會(huì)自動(dòng)創(chuàng)建和更新workspace、依賴和Pod項(xiàng)目并進(jìn)行整合;
? Carthage在使用中不需要?jiǎng)?chuàng)建和集成相應(yīng)的workspace和project,只需要依賴打包好的framework文件即可。
? 總結(jié)一下,CocoaPods的方法更容易使用,而Carthage更靈活且對項(xiàng)目沒有侵入性。
? 2)CocoaPods相對來說功能要比Carthage多很多,因此也更復(fù)雜,而CocoaPods配置簡單項(xiàng)目干凈。
? 3)CocoaPods有一個(gè)中心倉庫,而Carthage是去中心化的,沒有中心服務(wù)器也就避免了可能因中心節(jié)點(diǎn)錯(cuò)誤而帶來的失敗,即Carthage每次配置和更新環(huán)境,只會(huì)去更新具體的庫,時(shí)間更快。
4) Carthage 管理的依賴只需編譯一次,項(xiàng)目干凈編譯時(shí),不會(huì)再去重新編譯依賴,節(jié)省時(shí)間
5) 與 CocoaPods 無縫集成,一個(gè)項(xiàng)目能同時(shí)擁有 CocoaPods 和 Carthage
Carthage的不足
- 僅支持 iOS8 +
- 它只支持框架,所以不能用來針對 iOS 8 以前的系統(tǒng)版本進(jìn)行開發(fā)
- 支持的 Carthage 安裝的第三方框架和依賴不如 CocoaPods 豐富
- 無法在 Xcode 里定位到第三方庫源碼
五 Carthage的工作過程說明
? ① 創(chuàng)建一個(gè)Cartfile文件,在該文件中列出您想使用的框架
? ② 運(yùn)行Carthage,獲取并編譯Cartfile文件中列出的框架
? ③ 把框架的二進(jìn)制文件配置到項(xiàng)目中
六 關(guān)于版本指定
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"指定一個(gè) Git 對象 (任何被 git rev-parse 允許的)
如果沒有版本要求,任何版本的依賴是允許的。
版本好的兼容性是根據(jù)語語義化版本控制決定的。這意味著任何大于或等于1.5.1版本,但小于2.0,將認(rèn)為與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 使用一個(gè)企業(yè)項(xiàng)目,在 "development" 分支
github "https://enterprise.local/ghe/desktop/git-error-translations"
# Use a project from any arbitrary server, on the "development" branch 使用一個(gè)私有項(xiàng)目,在 "development" 分支
git "https://enterprise.local/desktop/git-error-translations2.git" "development"
# Use a local project 使用一個(gè)本地的項(xiàng)目
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