Carthage
是一款iOS
項目依賴管理工具,與Cocoapods
有著相似的功能,可以幫助你方便的管理第三方依賴,它會把三方依賴編譯成framework
,以framework
的形式將三方依賴加入到項目中進行使用和管理,下面記錄一下項目添加Carthage
支持的方法以及Carthage
的使用方法,方便日后查看。
項目添加 Carthage 支持
1. 安裝 Carthage
可以到 Carthage 項目 下直接下載 Carthage.pkg
文件安裝,或者使用 Homebrew
方式安裝,終端輸入以下命令進行安裝。
brew update
brew install carthage
2. 創建一個支持 Carthage 的工程
-
Carthage
僅支持dynamic frameworks
也就是動態庫,可以新建一個工程或者在現有工程下創建一個新的target
,類型需要選擇Coaoa Touch Framework
。
- 打開項目配置,選擇
framework target
的Build Phases
,將需要暴露的.h
文件拖拽到Public
里面,將相應的.m
文件拖拽到Compile source
里面。 - 如果你的
framework target
名稱與你想要打包構建的framework
名稱不一致,選中Build Settings
選項卡,搜索Packaging
,把Produce Module Name
和Produce Name
改成你想要構建的framework
名稱。 - 如果你使用了類別,那么你需要在
Build Settings
的Linking
的Other Linker Flags
里加上-all_load
。 - 如果你想你的工程支持
bitcode
,需要在Other C Flags
里加上-fembed-bitcode
。 - 由于
Carthage
在build
時,會自動將設置為Shared
的framework target
構建成framework
,所以需要單擊頂部target
,在彈出選項中選中Manager Schemes
,將framework target
的Shared
選項選中。
3. 構建 framework
-
打開終端
cd
到工程目錄下,執行以下命令開始打包framework
,執行完成后會自動將framework
文件保存在工程的Carthage/Build
文件夾下。carthage build --no-skip-current
然后將生成的
framework
文件拖進測試項目進行測試即可,具體就不說了。
4. 發布并打上 tag
-
測試沒問題后,將工程
push
并打上tag
即可,tag
名稱必須是版本號。git tag 1.0.0 git push --tags
這樣你的項目就已經支持
Carthage
了,其他開發者就可以使用Carthage
來管理你的項目依賴了,只需要將framework
工程push
上去即可,打包生成的測試framework
文件不需要push
。
使用 Cathage 依賴第三方庫
1. 創建并編輯 Cartfile
-
在工程目錄下創建一個名為 Cartfile 的文件,可以使用以下命令創建。
touch Cartfile
-
然后在 Cartfile 文件中指明想要依賴的第三方庫。
github "ReactiveCocoa/ReactiveCocoa" // 不指定版本 github "ReactiveCocoa/ReactiveCocoa" >= 1.0.0 // 大于等于 1.0.0 版本 github "ReactiveCocoa/ReactiveCocoa" ~> 1.0.0 // 1.0.0 及以上的兼容版本 < 2.0.0 github "ReactiveCocoa/ReactiveCocoa" == 1.0.0 // 指定為 1.0.0 版本 github "ReactiveCocoa/ReactiveCocoa" "branch" // 指定特定的分支、tag
2. 更新并構建 framework
-
編輯完成后,在終端中
cd
到 Cartfile 所在目錄下,執行以下命令構建第三方庫的framework
。carthage update --platform iOS
執行完成后會自動將第三方庫
clone
到 Carthage/Checkouts 文件夾下,然后會自動打包成相應的framework
文件,打包完的文件會保存在 Carthage/Build 文件夾下。
3. 工程配置
打開工程
target
的General
配置,將 Carthage/Build 下生成的framework
文件拖拽到Linked Frameworks and Libraries
選項中。-
打開工程
target
的Build Phases
配置,點擊+
選擇New Run Script Phase
,創建一個Script
,添加以下內容:/usr/local/bin/carthage copy-frameworks
-
然后添加相應的內容到下面的
Input Files
(舉例):$(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework
image 這個腳本是為了處理 App Store 提交的 bug,解決
App
因為使用的frameworks
包含二進制圖像的iOS
模擬器在提交App Store
時會被自動拒絕的問題。
4. Cathage 的目錄結構
在使用 Carthage
管理 frameworks
時,工程根目錄下與 Cartfile
同級的會存在 Cartfile.resolved
文件和
Carthage
文件夾,Carthage
文件夾又包含 Build
和 Checkouts
兩個文件夾。
-
Cartfile.resolved
文件
包含已經添加的frameworks
信息,包括依賴名稱和當前使用的版本信息。 -
Checkouts
文件夾
包含所有frameworks
源碼信息,在執行carthage build
時,會直接使用里面的project
或者workspace
相應的scheme
來構建相應的framework
。 -
Build
文件夾
包含所有的二進制構建結果,包括.framework
二進制文件和.dSYM
等文件。
將來的你,一定會感激現在拼命的自己,愿自己與讀者的開發之路無限美好。