你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> Carthage:去中心化的Cocoa依賴管理器

Carthage:去中心化的Cocoa依賴管理器

編輯:IOS開發基礎

443d64f4-7952-11e4-9d26-fc5cc664cb6111.png

Cocoa的依賴管理器,我們已經有了CocoaPods,非常好用,那麼為什麼還要創建這樣一個項目呢?本文翻譯自Carthage的Github的README.md,帶大家來了解一下這個工具有何不同之處。

Carthage的目標是用最簡單的方式來管理Cocoa第三方框架。

基本的工作流如下:

  1. 創建一個Cartfile,包含你希望在項目中使用的框架的列表

  2. 運行Carthage,將會獲取列出的框架並編譯它們

  3. 將編譯完成的.framework二進制文件拖拽到你的Xcode項目當中

Carthage編譯你的依賴,並提供框架的二進制文件,但你仍然保留對項目的結構和設置的完整控制。Carthage不會自動的修改你的項目文件或編譯設置。

Carthage與CocoaPods的不同

CocoaPods是已存在很長時間的Cocoa依賴管理器,那麼為什麼要創建Carthage呢?

首先,CocoaPods默認會自動創建並更新你的應用程序和所有依賴的Xcode workspace。Carthage使用xcodebuild來編譯框架的二進制文件,但如何集成它們將交由用戶自己判斷。CocoaPods的方法更易於使用,但Carthage更靈活並且是非侵入性的。

CocoaPods的目標在它的README文件描述如下:

…為提高第三方開源庫的可見性和參與度,創建一個更中心化的生態系統。

與之對照,Carthage創建的是去中心化的依賴管理器。它沒有總項目的列表,這能夠減少維護工作並且避免任何中心化帶來的問題(如中央服務器宕機)。不過,這樣也有一些缺點,就是項目的發現將更困難,用戶將依賴於Github的趨勢頁面或者類似的代碼庫來尋找項目。

CocoaPods項目同時還必須包含一個podspec文件,裡面是項目的一些元數據,以及確定項目的編譯方式。Carthage使用xcodebuild來編譯依賴,而不是將他們集成進一個workspace,因此無需類似的設定文件。不過依賴需要包含自己的Xcode工程文件來描述如何編譯。

最後,我們創建Carthage的原因是想要一種盡可能簡單的工具——一個只關心本職工作的依賴管理器,而不是取代部分Xcode的功能,或者需要 讓框架作者做一些額外的工作。CocoaPods提供的一些特性很棒,但由於附加的復雜性,它們將不會被包含在Carthage當中。

安裝Carthage

Carthage提供OS X平台的pkg安裝文件,你可以從Github的最新release中找到,按照引導一步步安裝即可。

如果你想安裝最新的開發版本(可能存在穩定性和兼容性的問題),你只需要clone本倉庫的master分支,然後運行make install.

添加框架到應用程序

安裝完Carthage後,你能夠使用它來添加框架到你的項目。注意Carthage只支持動態框架,而後者只存在於iOS 8以上(以及任意版本的OS X)。

開始使用:

  1. 創建一個Cartfile,將你想要使用的框架列在裡面

  2. 運行carthage update,將獲取依賴文件到一個Carthage.checkout文件夾,然後編譯每個依賴

  3. 在你的應用程序target的“General”設置標簽中的“Embedded Binaries”區域,將框架從Carthage.build文件夾拖拽進去。

在這個過程當中,Carthage將創建一些build artifacts,其中最重要的是Cartfile.lock文件,裡面將列出每個框架的具體版本,確保你提交了這個文件到版本控制工具裡面(如Git、SVN),因為每個用到項目的人都需要它來編譯相同版本的框架。

完成上面的步驟並提交你的修改,項目的其他用戶就只需要獲取該倉庫並執行carthage bootstrap就能使用你所添加的框架。

添加框架到單元測試或另一個框架

使用Carthage添加框架到任意目標的方法,和添加到應用程序差不多。主要的不同在於框架是如何設置並鏈接到Xcode的。

因為非應用程序目標沒有“Embedded Binaries”設置區域,你需要將編譯完成後的框架拖拽到“Link Binaries With Libraries”的區域裡。

在某些稀有案例中,你也許會想要復制每個依賴到已編譯的項目中(比如,在外部框架中嵌入依賴,或確保依賴在測試工具中正常顯示)。想要達到這個目的,你需要創建一個新的“Copy Files”編譯選項和“Frameworks”組,然後將框架的引用添加到裡面。

升級框架

如果你改動了你的Cartfile,或者你想升級到框架的最新版本(服從於你指定的需求版本),執行carthage update命令可以達到目的。

讓你的框架支持Carthage

Carthage只正式支持動態框架,動態框架能夠在任何版本的OS X上使用,但只能在iOS 8及以上版本使用。

因為Carthage擁有非中心化的包列表,以及沒有項目指定的編譯設置,大多數框架應該能自動編譯。

分享你的Xcode schemes

Carthage將只從你的.xcodeproj中標記為已分享的Xcode schemes來編譯。如果你想檢查編譯是否成功,執行carthage build --no-skip-current命令,然後檢查Carthage.build文件夾。

如果當執行命令但有scheme沒有被編譯,打開Xcode並確定對應scheme被標記為“Shared”,以便Carthage能夠發現它。

解決編譯失敗

如果你在執行carthage build --no-skip-current時編譯失敗,嘗試執行xcodebuild -scheme SCHEME -workspace WORKSPACE buildxcodebuild -scheme SCHEME -project PROJECT build(將其中的大寫單詞換成你項目的對應名稱),然後觀察是否有相同的失敗發生,這應該能生成足夠的失敗信息來解決問題。

穩定版發布的標簽

Carthage使用語義化標簽來發布穩定版本。如1.2.0,如帶有字母則是不受支持的版本(如1.2-alpha-1).

CarthageKit

大多數carthage命令行工具的功能都封裝在一個名為CarthageKit的框架中。

如果你希望將Carthage作為另一個工具的一部分,或者希望擴展Carthage的功能,可以看看CarthageKit的源碼,檢查API是否符合你的需求。

授權協議

Carthage使用MIT開源協議授權發布。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved