2012-07-23 68 views
34

我不明白使用Xcode工作區來組織彼此依賴關係的項目。比如我看到了很多的開發人員創建看起來像這樣的工作空間結構:Xcode工作區vs嵌套項目

 
Workspace 
|-- App 
|-- A Common Library 
|-- Another Common Library 

什麼好處這是否提供?如果有人直接打開「應用程序」項目,他們不會無法真正建立應用程序?他們必須認識到工作區存在必要的依賴關係。

在我看來,像更好的方法是使用嵌套的項目是這樣的:

 
App 
|-- Libraries 
| |-- A Common Library 
| |-- Another Common Library 

然後沒有項目存在不能建立。它也似乎更符合Git關於子模塊的想法。

我看到的工作空間的唯一用途是將常見項目彼此不依賴。我想聽聽其他人的想法,因爲我可能會錯過一些東西。

+22

哇!Xcode標記的問題實際上是關於Xcode的! :) – Almo 2012-07-23 18:42:59

+1

@Almo:它每隔幾天發生一次。但它們通常有相反的問題:當它不適用時標記[objc]。 :) – 2012-07-23 18:46:20

+1

這裏提到了使用工作區的一些原因:https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Workspace.html – pi3 2013-10-27 15:49:38

回答

17

我想在合併項目的同時保持項目獨立性時使用工作空間。

我使用工作區的例子是一系列從簡單到複雜的教程項目。每個項目都可以作爲一個獨立的項目,但將它們分組在一起可以幫助我組織整個項目。

在另一個例子中,我有一個爲客戶開發的應用程序。該應用程序既可以作爲獨立應用程序,也可以作爲整個項目中的模塊。獨立項目可以構建獨立應用程序。另一個應用程序使用包含兩個項目的工作區。該應用程序的模塊版本是從一個特殊的方案構建的,並且這個組合的應用程序不會在不使用工作區的情況下構建。

上述兩種情況的一種扭曲是構建文件夾的存儲位置。我必須更改Xcode首選項以將構建產品放入該組教程項目的唯一文件夾中,並在其他應用程序設置中爲該模塊使用常見的構建文件夾。

在其他情況下,我有大量的項目與嵌入式項目。在這些情況下,圖書館項目是穩定的。我不會試圖進一步開發圖書館項目,所以它們只是項目的另一個資源。我發現在我的文件系統組織項目資源的地方有點反映了我的Xcode項目的組織。所以這些庫項目被複制到主項目的文件層次結構中。如果我正在開發這些庫並在多個項目中使用它們,那麼使用工作區是有意義的。爲了方便,我經常不打擾。

有時我甚至會將工作區與包含嵌入式項目的項目組合在一起。

所以我認爲組織工具,嵌入式項目和工作空間都有它們的優點和問題。我根據具體情況選擇使用一種或另一種(或組合)。

+0

感謝您的洞察力。我同意你的大部分觀點,但是即使圖書館處於流動中,我也沒有看到使用工作區的好處。如果您的庫是在Git存儲庫中維護的,則應該能夠將其作爲子模塊添加到項目中,然後根據需要更新子模塊。 – mark 2012-07-23 19:59:04

+0

是的,git子模塊是管理庫開發的替代方法(也可能更好)。子模塊是一種先進的git功能,許多iOS開發人員由於缺乏知識而需要使用其他版本控制系統,因此無法使用這些功能。在這種情況下,工作空間可能是比嵌入式項目更好的選擇。 – 2012-07-23 20:50:51

+0

@ Mr.Berna - 抱歉,在xcode中使用git是一件痛苦的事......你無法控制什麼版本/分支/分支你在任何項目中使用什麼,除非你使用終端手動使用目錄目錄,手動註釋。 – SpaceDog 2013-10-24 10:20:21

1

我們在主項目的框架中添加了嵌套項目,所以我們可以將它們「包含」到框架產品中。

Main 
|-- Main 
|-- MainTests 
|-- Frameworks 
| |-- CommonLibrary.xcodeproj 
| |-- AnotherCommonLibrary.xcodeproj 
| |-- UIKit.framework 
| |-- Foundation.framework 
| |-- CoreFoundation.framework 
|-- Products 

查看this Great Tutorial by Jeff Verkoeyen用於將Universal Frameworks添加到項目中。起初,這並不容易,但要繼續努力,你會得到它的竅門。

+0

通過在每個.xcodeproj上放置CocoaPods可以實現這種結構嗎? – user023 2016-03-10 14:56:24