一 Carthage簡單介紹
主頁: | github.com/Carthage/Ca… |
---|---|
作者: | 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的使用
1 先進入到專案所在資料夾
$ cd 專案路徑
複製程式碼
2 建立一個空的Carthage檔案
$ touch Cartfile
複製程式碼
3 編輯cartfile檔案,例如要安裝AFN框架
GitHub庫可在cartfile檔案新增以下內容,指定GitHub的關鍵字:
github "AFNetworking/AFNetworking"
複製程式碼
或者填寫其他git源,指定git關鍵詞:
git "https://github.com/AFNetworking/AFNetworking.git"
複製程式碼
4 儲存並關閉cartfile檔案,使用cartfile安裝框架
$ Carthage update --platform iOS
複製程式碼
注: 不追加引數會編譯出 iOS、OSX、tvos多個framework
注2: 如果失敗的話,先用Xcode開啟你的專案,Product > Scheme > Manage Schemes
在新視窗中,勾選上 Shared,點選 Close。在終端再次執行這個命令
5 開啟Carthage 檢視生成的檔案目錄
$ open Carthage
複製程式碼
- 執行安裝依賴命令後的資料夾結構
# 執行檔案多出三個檔案
Cartfile # 存放需要安裝的依賴列表
Cartfile.resolved # 自動生成的依賴關係檔案,需提交到git
# 確保提交的專案可以使用完全相同的配置與方式執行啟用, 跟蹤專案當前所用的依賴版本號
Carthage # 自動生成的Carthage目錄 (不需要提交到 Git)
# 目錄下有兩個資料夾:Build Checkouts
# Build 存放編譯後的檔案,包括 iOS/Mac/tvOS/watchOS對應的framework
# Checkouts 存放從git拉取的依賴庫原始檔
複製程式碼
6 配置專案
開啟專案,點選Target -> Build Phases -> Link Library with Libraries
選擇Carthage/Build
目錄中要匯入的framework
7 新增編譯的指令碼
(該指令碼檔案保證在提交歸檔時會對相關檔案和dSYMs進行復制)
(1)點選Build Phases,點選“+” -> New Run Script Phase
(2)新增新增指令碼 /usr/local/bin/Carthage copy-frameworks
(3)新增"Input Files" $(SRCROOT)/Carthage/Build/iOS/AFNetworking.framework
8 在專案中使用第三方庫
#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的優點
- 使用了CocoaPods的專案是高度整合的,而Carthage更靈活強調儘可能將任務委託給Xcode和Git。
-
CocoaPods在使用中會自動建立和更新workspace、依賴和Pod專案並進行整合;
-
Carthage在使用中不需要建立和整合相應的workspace和project,只需要依賴打包好的framework檔案即可。
-
總結一下,CocoaPods的方法更容易使用,而Carthage更靈活且對專案沒有侵入性。
-
CocoaPods相對來說功能要比Carthage多很多,因此也更復雜,而CocoaPods配置簡單專案乾淨。
-
CocoaPods有一箇中心倉庫,而Carthage是去中心化的,沒有中心伺服器也就避免了可能因中心節點錯誤而帶來的失敗,即Carthage每次配置和更新環境,只會去更新具體的庫,時間更快。
-
Carthage 管理的依賴只需編譯一次,專案乾淨編譯時,不會再去重新編譯依賴,節省時間
-
與 CocoaPods 無縫整合,一個專案能同時擁有 CocoaPods 和 Carthage
Carthage的不足
- 僅支援 iOS8 +
- 它只支援框架,所以不能用來針對 iOS 8 以前的系統版本進行開發
- 支援的 Carthage 安裝的第三方框架和依賴不如 CocoaPods 豐富
- 無法在 Xcode 裡定位到第三方庫原始碼
五 Carthage的工作過程說明
- 1.建立一個Cartfile檔案,在該檔案中列出您想使用的框架
- 2.執行Carthage,獲取並編譯Cartfile檔案中列出的框架
- 3.把框架的二進位制檔案配置到專案中
六 關於版本指定
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
複製程式碼