2012-01-09 83 views
4

我正在開發iOS應用程序,並已將代碼分爲兩個獨立的項目:Web服務的客戶端庫和依賴於客戶端庫的應用程序項目。有兩個相互依賴項目的Xcode 4工作區:我是否也應該使用git子模塊?

這兩個項目都已經添加到一個Xcode工作區,並且正確聲明瞭依賴關係。

每個項目都有自己的git存儲庫。目前我有兩個項目簽出到兩個單獨的目錄,我獨立管理兩個git存儲庫。目前定義這兩段代碼之間的依賴關係的唯一地方是在應用程序的Xcode項目中。

但是,我想知道是否應該將客戶端庫git存儲庫作爲應用程序存儲庫的git submodule添加。這在概念上感覺不錯,但我之前沒有使用git子模塊,我想知道是否有任何與Xcode一起使用這種方法的問題?我可以找到大量關於如何使用Xcode工作區來管理項目間依賴關係的博客帖子,像這樣以及其他地方的大量關於git子模塊的文檔,但是我找不到經過驗證和測試的單個帳戶。工作流程同時使用起來如果你知道一個,請張貼鏈接)

+0

簽出cocoapods http://cocoapods.org – 2012-08-10 13:28:31

回答

2

我已經參與了之前已經這樣做了,全部採用以下佈局項目:

* app-workspace 
    * App.workspace 
    * library [submodule] 
    * Library.xcodeproj 
    * library sources 
    * app [submodule] 
    * App.xcodeproj 
    * app sources 

所以工作區知道項目和構建方案。工作區的git倉庫知道包含項目的子模塊。

實際上,爲了使子模塊定義保持在最新的水平,我們付出了很多努力,所以我們通常最終會處理子模塊的主分支。當添加重要更改時,會向工作空間的子模塊提交特定版本:如果CI系統是從頂層項目構建的,則不會太少。

當然,對於單元測試,您可以獨立指向每個子模塊的配置項,只有整合測試需要整個工作空間。在這裏記住一個重要的步驟 - 我偶爾會搞砸的一個重要步驟是,在將該提交推送到CI和開發人員回購的共享源後,您應該只將子模塊定義更新爲特定的提交。如果您忘記了這一點,那麼當父項目引用它們沒有的子模塊的提交時,您可能會冒險檢查其他人。

您可能遇到與Xcode交互問題的地方是定義您的構建方案。我最近採用的方法是使用方案編輯器來定義我想用作共享的方案(而不是每個用戶),並且在頂層的工作空間而不是子模塊中的項目中定義。完成之後,以及那些承諾使用git的方案定義,請關閉自動方案生成。現在,您的所有開發人員和CI系統都同意如何構建您的產品。

+0

有趣的是,我沒有想過給工作區自己的git倉庫。關於結構的其餘部分,使庫成爲消耗應用程序的應用程序的子模塊更有意義。我有興趣瞭解更多關於使他們「兄弟」存儲庫背後的基本原理。 – 2012-01-09 13:43:37

+0

在這種情況下,該庫在iOS和Mac應用程序之間共享,因此將其作爲每個子模塊會增加複雜性。 – 2012-01-09 13:59:19

2

使用子模塊對您正在做的事情有意義。特別是如果客戶端庫不會有太大的改變。

而且,這意味着其他人來到您的存儲庫時知道該庫是一個單獨的項目,並保持提交分離。

我偶爾發現,由於子模塊已經被損壞,所以存儲庫被拉進來,但通常這只是一個刪除並重新添加它們的問題。

從主項目的根:

git submodule add <path to repo> 
git submodule update 

應該是所有你需要使用。

+1

我會阻止對客戶端庫的評論不變。如果將它們視爲不同的組件並希望追蹤不同的歷史,則應該明確使用子模塊,即時期。我仍然+1這:) – Romain 2012-01-09 12:41:47

相關問題