一.Carthage是什么茬缩?
Carthage 使用于 Swift 語(yǔ)言編寫(xiě),只支持動(dòng)態(tài)框架,只支持 iOS8+的Cocoa依賴(lài)管理工具揪漩。
與現(xiàn)在流行的 CocoaPods 不同,Carthage編譯你的依賴(lài)吏口,并提供框架的二進(jìn)制.framework文件奄容,但你仍然保留對(duì)項(xiàng)目的結(jié)構(gòu)和設(shè)置的完整控制冰更,Carthage不會(huì)自動(dòng)的修改你的項(xiàng)目文件或編譯設(shè)置。是一個(gè)去中心化的Cocoa依賴(lài)管理工具
二.如何下載和安裝Carthage昂勒?
使用Brew安裝(建議)
1.安裝Mac OSX流行的的軟件包管理工具Homebrew之前要檢查Mac中是否有Ruby環(huán)境,目前的版本基本都內(nèi)置了Ruby,終端輸入
1
ruby-v
顯示類(lèi)似 ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
1
brew-v
顯示類(lèi)似文本 Homebrew 0.9.9 (git revision 2f20; last commit 2016-05-15) 說(shuō)明已經(jīng)安裝brew不需要再次安裝
2.如果電腦中沒(méi)有Homebrew,終端執(zhí)行腳本安裝即可
1
ruby-e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
3.每次使用 Homebrew 進(jìn)行安裝Carthage 或者其他軟件之前,習(xí)慣性的先對(duì)Homebrew進(jìn)行更新一下, 不然可能會(huì)安裝到比較老版本的Carthage等軟件
1
brewupdate
提示 Already up-to-date.......? 更新到最新啦!!
4.假如你在本地已經(jīng)安裝好Homebrew環(huán)境蜀细,那么下載和安裝carthage將十分簡(jiǎn)單,只需要一行命令戈盈。
1
brewinstallcarthage
PKG文件安裝
直接下載pkg文件:https://github.com/Carthage/Carthage/releases 進(jìn)行安裝即可
三.如何使用Carthage奠衔?
包管理工具,不管是CocoaPods,還是Node 的NPM,配置依賴(lài)管理都是在工程目錄,建立相應(yīng)的配置文件,Carthage的配置文件即 Cartfile文件
添加 Cartfile 文件 (需要提交到 Git)
建立添加Cartfile(配置文件)文件在
通過(guò)終端或者文本編輯器 進(jìn)入到項(xiàng)目所在的文件夾建立一個(gè) 空的Cartfile文件
現(xiàn)在只支持GitHub庫(kù)(GitHub.com和GitHub企業(yè)),指定GitHub的關(guān)鍵字:
1
2github"ReactiveCocoa/ReactiveCocoa"# GitHub.com
github"https://enterprise.local/ghe/desktop/git-error-translations"# GitHub Enterprise
或者是其他git源,指定git關(guān)鍵詞:
1
git"https://enterprise.local/desktop/git-error-translations2.git"
其他可能的源在未來(lái)也會(huì)會(huì)被添加
版本指定
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 對(duì)象 (任何被git rev-parse允許的)
如果沒(méi)有版本要求,任何版本的依賴(lài)是允許的塘娶。
版本好的兼容性是根據(jù)語(yǔ)語(yǔ)義化版本控制決定的归斤。這意味著任何大于或等于1.5.1版本,但小于2.0,將認(rèn)為與1.5.1“兼容”。
Cartfile示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 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"
安裝依賴(lài) just do it
執(zhí)行以下命令 拉取指定版本代碼并編譯為 .Framework 文件
內(nèi)部工作流程即? carthage update => carthage checkout => checkout build
1
carthageupdate
只編譯iOS平臺(tái)的類(lèi)庫(kù)
1
carthageupdate--platformiOS
結(jié)果如下,(PS我只留了一個(gè)Mantle依賴(lài))
1
2
3
4
5
6
7Jakey-Pro:testjakey$carthageupdate
***FetchingMantle
***CheckingoutMantleat"1.5.7"
***xcodebuildoutputcanbefoundin/var/folders/sm/b5fssgjx147b722vsgx20mg00000gn/T/carthage-xcodebuild.b3IHTG.log
***Buildingscheme"Mantle Mac"inMantle.xcworkspace
...balabala
工程目錄多了以下文件
Cartfile.resolved (需要提交到 Git)
在執(zhí)行 carthage update 命令后會(huì)在根目錄創(chuàng)建一個(gè) Cartfile.resolved 文件难捌,這個(gè)文件是生成后的依賴(lài)關(guān)系膝宁,不能修改。
Cartfile.resolved 文件確保提交的項(xiàng)目可以使用完全相同的配置與方式運(yùn)行啟用根吁。 跟蹤項(xiàng)目當(dāng)前所用的依賴(lài)版本號(hào)员淫,保持多端開(kāi)發(fā)一致,出于這個(gè)原因,強(qiáng)烈建議提交這個(gè)文件到版本控制中。
自動(dòng)生成的Carthage目錄 (不需要提交到 Git)
Carthage文件夾用來(lái)存放:
carthage checkout 從git拉取的依賴(lài)庫(kù)源文件(Checkouts)
carthage build編譯后的文件(Build),包含Mac 與 iOS對(duì)應(yīng)的.framework
引入 .Framework 動(dòng)態(tài)庫(kù)的方法
1.手動(dòng)拖拽Build中的所有依賴(lài).framework到你的工程,本人的建議當(dāng)然是在工程根目錄建立"Vendor"類(lèi)似文件夾,創(chuàng)建"Vendor" folder/group到工程,所有第三方?.Framework都拷貝到此目錄下,然后繼續(xù)以下操作
打開(kāi)項(xiàng)目击敌,點(diǎn)擊project介返,選擇target, 再選擇上方的General,將需要的framework文件拖到 Embedded? Binaries(動(dòng)態(tài)庫(kù))內(nèi)
注意:動(dòng)態(tài)庫(kù)拷貝到Embedded? Binarie會(huì)同時(shí)自動(dòng)加入到Linked Frameworks and Libraries,但是錯(cuò)誤的拖入到Linked Frameworks and Libraries是不會(huì)自動(dòng)增加到Embedded? Binarie中的,會(huì)導(dǎo)致動(dòng)態(tài)庫(kù)加載失敗
2.在對(duì)應(yīng) Target 中的 Build Setting 中的 Framework Search Path 項(xiàng)加入以下路徑沃斤,Xcode 便會(huì)自動(dòng)搜索目錄下的 Framework:
1
$(PROJECT_DIR)/Carthage/Build/iOS
四.Git 中忽略不需要提交到版本庫(kù)的文件與文件夾
則修改 .gitignore 文件圣蝎,增加忽略 Carthage 文件夾就行了:
#Carthage
Carthage
五.總結(jié)
本人在實(shí)際項(xiàng)目中遲遲沒(méi)有使用CocoaPods的原因就是,啰里啰嗦...對(duì)原有工程破壞性大(建立workspace,增加一堆亂七八糟的文件),侵入性太強(qiáng),耦合太高,Carthage的出現(xiàn)的確是茉莉花香撲鼻而至!