一.Carthage是什么?
Carthage 使用于 Swift 語言編寫,只支持動態框架,只支持 iOS8+的Cocoa依賴管理工具。
與現在流行的 CocoaPods 不同,Carthage編譯你的依賴,并提供框架的二進制.framework文件,但你仍然保留對項目的結構和設置的完整控制,Carthage不會自動的修改你的項目文件或編譯設置。是一個去中心化的Cocoa依賴管理工具
二.如何下載和安裝Carthage?
使用Brew安裝(建議)
1.安裝Mac OSX流行的的軟件包管理工具Homebrew之前要檢查Mac中是否有Ruby環境,目前的版本基本都內置了Ruby,終端輸入
1
ruby-v
顯示類似 ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
1
brew-v
顯示類似文本 Homebrew 0.9.9 (git revision 2f20; last commit 2016-05-15) 說明已經安裝brew不需要再次安裝
2.如果電腦中沒有Homebrew,終端執行腳本安裝即可
1
ruby-e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
3.每次使用 Homebrew 進行安裝Carthage 或者其他軟件之前,習慣性的先對Homebrew進行更新一下, 不然可能會安裝到比較老版本的Carthage等軟件
1
brewupdate
提示 Already up-to-date.......? 更新到最新啦!!
4.假如你在本地已經安裝好Homebrew環境,那么下載和安裝carthage將十分簡單,只需要一行命令。
1
brewinstallcarthage
PKG文件安裝
直接下載pkg文件:https://github.com/Carthage/Carthage/releases 進行安裝即可
三.如何使用Carthage?
包管理工具,不管是CocoaPods,還是Node 的NPM,配置依賴管理都是在工程目錄,建立相應的配置文件,Carthage的配置文件即 Cartfile文件
添加 Cartfile 文件 (需要提交到 Git)
建立添加Cartfile(配置文件)文件在
通過終端或者文本編輯器 進入到項目所在的文件夾建立一個 空的Cartfile文件
現在只支持GitHub庫(GitHub.com和GitHub企業),指定GitHub的關鍵字:
1
2github"ReactiveCocoa/ReactiveCocoa"# GitHub.com
github"https://enterprise.local/ghe/desktop/git-error-translations"# GitHub Enterprise
或者是其他git源,指定git關鍵詞:
1
git"https://enterprise.local/desktop/git-error-translations2.git"
其他可能的源在未來也會會被添加
版本指定
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示例
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??使用一個企業項目,在 "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"
安裝依賴 just do it
執行以下命令 拉取指定版本代碼并編譯為 .Framework 文件
內部工作流程即? carthage update => carthage checkout => checkout build
1
carthageupdate
只編譯iOS平臺的類庫
1
carthageupdate--platformiOS
結果如下,(PS我只留了一個Mantle依賴)
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)
在執行 carthage update 命令后會在根目錄創建一個 Cartfile.resolved 文件,這個文件是生成后的依賴關系,不能修改。
Cartfile.resolved 文件確保提交的項目可以使用完全相同的配置與方式運行啟用。 跟蹤項目當前所用的依賴版本號,保持多端開發一致,出于這個原因,強烈建議提交這個文件到版本控制中。
自動生成的Carthage目錄 (不需要提交到 Git)
Carthage文件夾用來存放:
carthage checkout 從git拉取的依賴庫源文件(Checkouts)
carthage build編譯后的文件(Build),包含Mac 與 iOS對應的.framework
引入 .Framework 動態庫的方法
1.手動拖拽Build中的所有依賴.framework到你的工程,本人的建議當然是在工程根目錄建立"Vendor"類似文件夾,創建"Vendor" folder/group到工程,所有第三方?.Framework都拷貝到此目錄下,然后繼續以下操作
打開項目,點擊project,選擇target, 再選擇上方的General,將需要的framework文件拖到 Embedded? Binaries(動態庫)內
注意:動態庫拷貝到Embedded? Binarie會同時自動加入到Linked Frameworks and Libraries,但是錯誤的拖入到Linked Frameworks and Libraries是不會自動增加到Embedded? Binarie中的,會導致動態庫加載失敗
2.在對應 Target 中的 Build Setting 中的 Framework Search Path 項加入以下路徑,Xcode 便會自動搜索目錄下的 Framework:
1
$(PROJECT_DIR)/Carthage/Build/iOS
四.Git 中忽略不需要提交到版本庫的文件與文件夾
則修改 .gitignore 文件,增加忽略 Carthage 文件夾就行了:
#Carthage
Carthage
五.總結
本人在實際項目中遲遲沒有使用CocoaPods的原因就是,啰里啰嗦...對原有工程破壞性大(建立workspace,增加一堆亂七八糟的文件),侵入性太強,耦合太高,Carthage的出現的確是茉莉花香撲鼻而至!