[iOS開發(fā)]Carthage安裝和使用教程

一 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
installCarthage.png

?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

installAFN.png

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

Shared.png

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

$ open Carthage
Carthage文件夾目錄.png
  • 執(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

addFramework.png

7 添加編譯的腳本

(該腳本文件保證在提交歸檔時(shí)會(huì)對相關(guān)文件和dSYMs進(jìn)行復(fù)制)

?(1)點(diǎn)擊Build Phases,點(diǎn)擊“+” -> 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 在項(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容