關(guān)于Carthage的小知識

什么是Carthage

Carthage和CocoaPods都是用來管理第三方庫,與CocoaPods相比Carthage更加輕量一些,它是由Swift編寫的,所以在純Swift項目中更為便利

A simple, decentralized dependency manager for Cocoa
一個簡單、松散的依賴管理者
這個是Carthage Github上的描述

簡單對比Carthage與Cocoapods

  • Carthage用xcodebuild 構(gòu)建框架(framework)的二進制文件,但是并沒有將他們整合到用戶項目中。Cocoapods的目的是讓用戶使用起來更簡單,而 Carthage 則是更靈活,減少對項目的侵入性
  • Cocoapods項目還必須具有所謂的podspec文件,其中包括有關(guān)項目的元數(shù)據(jù),并指定應如何構(gòu)建它。Carthage使用xcodebuild去構(gòu)建依賴,而不是將它們集成到單個工作區(qū)中,它沒有類似的規(guī)范文件,但你的依賴項必須包含到自己的 Xcode 項目中,該項目描述了如何構(gòu)建其產(chǎn)品

安裝Carthage

  • 安裝Homebrew
    • 如果你已經(jīng)安裝了可以跳過這一步
    • 更新最新版本
    • 如果你沒有安裝,可以參考這里Mac 安裝homebrew并更新到最新版本
brew update

如果遇到Error: The /usr/local directory is not writable.錯誤,就執(zhí)行以下命令sudo chown -R $(whoami):admin /usr/local再更新

  • 安裝Carthage
brew install carthage
  • 查看Carthage版本
carthage version

在項目中使用Carthage

  • 進入項目所在文件夾
  • 創(chuàng)建Cartfile文件
  • 打開Cartfile文件
  • 編輯Cartfile文件,添加依賴庫
cd 項目文件夾路徑
touch Cartfile
open Cartfile
github "Alamofire/Alamofire" == 4.5
git "https://enterprise.local/desktop/git-error-translations2.git"
binary "/absolute/path/MyFramework.json"

Cartfile文件

  • 格式
    • 使用 github 關(guān)鍵字指定 GitHub 存儲庫(GitHub.com 和 GitHub Enterprise)
    • 其他 git 存儲庫使用 git 關(guān)鍵字指定
    • 僅作為已編譯的二進制文件 .frameworks 提供的依賴項使用 binary 關(guān)鍵字和 https:// 鏈接,file:// 鏈接,或沒有方案的相對或絕對路徑,返回二進制項目規(guī)范
  • 版本要求
    • >= 1.0 指“1.0 及以上版本”。
    • ~> 1.0 指“1.x 版本”
    • == 1.0 指“版本為 1.0”
    • "some-branch-or-tag-or-commit" 特指 git 對象(git rev-parse 任何內(nèi)容都被允許)。
      Note:二進制源 不支持這種形式。
      如果沒有指定任何版本,任何版本的依賴都將被允許(默認使用最新版本)。
  • 保存關(guān)閉Cartfile,運行Carthage
carthage update --platform iOS

運行命令后,一個叫Cartfile.resolved的文件將會被創(chuàng)建到 Cartfile 同級目錄下。此文件準確指定了每個依賴項選擇的版本,并列出了所有依賴項(甚至是嵌套的版本)。

Cartfile.resolved.png

強烈建議將該文件加入到版本控制中,告知其他開發(fā)者,當前使用的版本。

雖然 Cartfile.resolved 文件是人類可讀和可擴展的,但你不能修改它。文件的格式非常嚴格,列出依賴項的順序?qū)τ跇?gòu)建過程很重要。

Carthage 文件夾

  • Build
    包含對應平臺編譯好的Framework
  • Checkouts
    包含編譯 framework 所使用的源代碼(除非你使用 submodules ,否則不要修改這里的代碼,carthage updatecarthage checkout 會覆蓋這里的代碼,清除你的修改)。

在"Carthage/Build/iOS"文件夾中會生成 .framework 文件。

在項目中使用Carthage

  • 在Carthage -> Build中找到需要的framework
  • 將framework拖拽到Xcode 工程的Linked Frameworks and Libraries
  • 進入工程的 target -> Build Phases,點擊 +,添加New Run Script Phase輸入一下腳本
/usr/local/bin/carthage copy-frameworks

在 Input Files 下添加要使用的框架的路徑

$(SRCROOT)/Carthage/Build/iOS/XXXX.framework

將復制框架的路徑添加到 Output Files

$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/XXX.framework
  • 為什么需要指定 Output Files
    • 使用 Carthage 來管理第三方庫,在編譯并運行 App 的時候,會有一個階段叫:Carthage Copy Frameworks。這個階段通過跑一個腳本的形式把所有依賴的第三方庫都復制到 App 的目錄里。

    • 這個階段通常會花 1~x 秒不等,這取決于你的 App 依賴的第三方庫數(shù)量。默認情況下,每次你 Build & Run 的時候,都會進行一次這個操作——盡管你的第三方庫沒有任何改變。

    • 所以我們需要指定 Output Files,在 Output Files 指定輸出文件的情況下,Xcode 只會在 framework 發(fā)生更改時去進行 copy framework 操作,這樣就節(jié)省了時間。

更新庫

1、在carthage文件里面把有指定版本的庫更新到想要的版本,如無指定版本可忽略
2、調(diào)用命令更新庫

  • 全部更新
carthage update --platform iOS
  • 更新制定庫
carthage update XXX --platform iOS


最后的話

雖然說Carthage是純Swift編寫,但個人感覺還是覺得CocoaPods更加便利快捷,特別是在國內(nèi)。
在實際項目中Carthage升級或加庫經(jīng)常各種報錯,有可能是本人學藝未精,經(jīng)過萬般折騰,本人還是會首選CocoaPods作為第三方庫管理工具



參考文章
Carthage 新手教程
版權(quán)所有,如需轉(zhuǎn)載請聯(lián)系作者并注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

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