[iOS開發]Carthage安裝和使用教程

taoZen發表於2018-11-26

一 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
複製程式碼

installCarthage.png

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

installAFN.png

注2: 如果失敗的話,先用Xcode開啟你的專案,Product > Scheme > Manage Schemes 在新視窗中,勾選上 Shared,點選 Close。在終端再次執行這個命令

Shared.png

5 開啟Carthage 檢視生成的檔案目錄

$ open Carthage
複製程式碼

Carthage資料夾目錄.png

  • 執行安裝依賴命令後的資料夾結構
# 執行檔案多出三個檔案

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

addFramework.png

7 新增編譯的指令碼

(該指令碼檔案保證在提交歸檔時會對相關檔案和dSYMs進行復制)

(1)點選Build Phases,點選“+” -> New Run Script Phase

NewRunScriptPhase.png

(2)新增新增指令碼 /usr/local/bin/Carthage copy-frameworks

(3)新增"Input Files" $(SRCROOT)/Carthage/Build/iOS/AFNetworking.framework

runScript.png

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的優點

  1. 使用了CocoaPods的專案是高度整合的,而Carthage更靈活強調儘可能將任務委託給Xcode和Git。
  • CocoaPods在使用中會自動建立和更新workspace、依賴和Pod專案並進行整合;

  • Carthage在使用中不需要建立和整合相應的workspace和project,只需要依賴打包好的framework檔案即可。

  • 總結一下,CocoaPods的方法更容易使用,而Carthage更靈活且對專案沒有侵入性。

  1. CocoaPods相對來說功能要比Carthage多很多,因此也更復雜,而CocoaPods配置簡單專案乾淨。

  2. CocoaPods有一箇中心倉庫,而Carthage是去中心化的,沒有中心伺服器也就避免了可能因中心節點錯誤而帶來的失敗,即Carthage每次配置和更新環境,只會去更新具體的庫,時間更快。

  3. Carthage 管理的依賴只需編譯一次,專案乾淨編譯時,不會再去重新編譯依賴,節省時間

  4. 與 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
複製程式碼

相關文章