1. 程式人生 > >【ios開發學習】Cocoa 新的依賴管理工具:Carthage

【ios開發學習】Cocoa 新的依賴管理工具:Carthage

說到 iOS 的依賴管理工具,大家一定首先想到的是 CocoaPods ,不錯,CocoaPods 確實是一個很好依賴管理工具,已然成為了 Cocoa 依賴管理的標準,豐富的支援庫、文件等等,CocoaPods 相關的文章有很多,這裡就不一一贅述了。

今天要介紹的是一款新的依賴管理工具,名曰 “Carthage”,名字有點難理解,簡單方便,完全獨立,不修改 XCode 專案檔案或配置。

簡介

我之前很少用 CocoaPods,很大一部分原因就是因為麻煩,僅個人感覺,需要牽扯 XCode 專案檔案;而 Carthage 就很好的解決了我之前的煩惱,輕耦合,更靈活;使用 xcodebuild

 工具來編譯依賴專案成二進位制 Framework,再引入到專案中去。

Carthage 是由 Swift 語言寫的,只支援動態框架,只支援 iOS8+。

Carthage 的大致工作流程如下:

  1. 建立一個 Cartfile 檔案,寫好你要哪些依賴庫
  2. 執行 carthage update 命令拉取原始碼並編譯為 Framework
  3. 把編譯後的 .framework 拖到專案中去即可 (官方是這麼說的,不過更好的辦法是把 Carthage 編譯的 Framework 路徑加入到 Build Setting 中的 Framework Search Path,詳情見後文)

執行 update 命令後,你的專案目錄結構大致如下:

Cartfile
Cartfile.resolved
Carthage
    - Build
        - iOS
            - Alamofire.framework
        - Mac
            - Alamofire.framework
    - Checkouts
        - Alamofire
        - ...
xxx.xcodeproj
...
  • Cartfile 檔案用來標註你需要哪些依賴庫,對應版本或者 Git 分支 (需要提交到 Git)
  • Cartfile.resolved 檔案用來跟蹤專案當前所用的依賴版本號,為了保持多端開發一致 (需要提交到 Git)
  • Carthage 資料夾用來存放依賴庫的原始檔和編譯後的檔案 (不需要提交到 Git)

其實工作方式有點和 Cocoapods 大致相似,只不過 Cartfile 多了一個自動編譯過程且與 Project 耦合更低,Cartfile 利用 xcode-select 命令來編譯 Framework,如果你想用測試版的 Xcode 進行編譯,執行下面這條命令,把 xcode-select 的路徑改為另一版本 Xcode 就可以了

sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer

其中 Xcode-beta.app 就是對應你的 Xcode 版本,你也可以改成其他版本的 Xcode

注:寫完才發現,原來 Xcode -> Preferences -> Locations 中已經有切換 Command Line Tools 版本的選項...

安裝

推薦使用 Homebrew 進行安裝,簡單方便,也便於維護:

brew install carthage

安裝前最好先 update 一下,之前我就是因為沒有 update,結果安裝了老版本的 Carthage

brew update

使用

新增 Cartfile 檔案

類似於 CocoaPods 中的 Podfile 檔案,把需要的包寫進去就行了,具體可參閱官方說明,如:

# 必須最低 2.3.1 版本
github "ReactiveCocoa/ReactiveCocoa" >= 2.3.1

# 必須 1.x 版本
github "Mantle/Mantle" ~> 1.0    # (大於或等於 1.0 ,小於 2.0)

# 必須 0.4.1 版本
github "jspahrsummers/libextobjc" == 0.4.1

# 使用最新的版本
github "jspahrsummers/xcconfigs"

# 使用一個私有專案,在 "development" 分支
git "https://enterprise.local/desktop/git-error-translations.git" "development"

暫只支援 GitHub 和 git 源,在執行 carthage update 命令後會在根目錄建立一個Cartfile.resolved 檔案,這個檔案是生成後的依賴關係,不能修改。

引入 Framework

在專案中引入依賴的 Framkework,只需要在對應 Target 中的 Build Setting 中的 Framework Search Path 項加入以下路徑,Xcode 便會自動搜尋目錄下的 Framework:

$(SRCROOT)/Carthage/Build/iOS

如果是 OSX 專案則把末尾的 iOS 改為 Mac

在 Git 中忽略

如果不想把 Carthage 的依賴庫 push 到 Git 倉庫裡,則修改 .gitignore 檔案,增加忽略 Carthage 資料夾就行了:

#Carthage
Carthage

可用命令

archive : Archives a built framework 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
update : Update and rebuild the project's dependencies
version : Display the current version of Carthage