【ios開發學習】Cocoa 新的依賴管理工具:Carthage
說到 iOS 的依賴管理工具,大家一定首先想到的是 CocoaPods ,不錯,CocoaPods 確實是一個很好依賴管理工具,已然成為了 Cocoa 依賴管理的標準,豐富的支援庫、文件等等,CocoaPods 相關的文章有很多,這裡就不一一贅述了。
今天要介紹的是一款新的依賴管理工具,名曰 “Carthage”,名字有點難理解,簡單方便,完全獨立,不修改 XCode 專案檔案或配置。
簡介
我之前很少用 CocoaPods,很大一部分原因就是因為麻煩,僅個人感覺,需要牽扯 XCode 專案檔案;而 Carthage 就很好的解決了我之前的煩惱,輕耦合,更靈活;使用 xcodebuild
Carthage 是由 Swift 語言寫的,只支援動態框架,只支援 iOS8+。
Carthage 的大致工作流程如下:
- 建立一個
Cartfile
檔案,寫好你要哪些依賴庫 - 執行
carthage update
命令拉取原始碼並編譯為 Framework - 把編譯後的
.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 usebootstrap
: Check out and build the project's dependenciesbuild
: Build the project's dependenciescheckout
: Check out the project's dependenciescopy-frameworks
: In a Run Script build phase, copies each framework specified by a SCRIPT_INPUT_FILE environment variable into the built app bundlefetch
: Clones or fetches a Git repository ahead of timehelp
: Display general or command-specific helpupdate
: Update and rebuild the project's dependenciesversion
: Display the current version of Carthage