2012-01-15 124 views
24

只是一個關於如何爲您創建的每個iOS應用程序安排Xcode 4目錄的簡短問題/意見。iOS項目目錄組織

個人而言,我仍然添加一個名爲/ Resources的目錄,其中包含/ Fonts,/ Images,/ Icons等子目錄。我使用選項「複製項目到目標組的文件夾(如果需要)」。如果我需要添加一個新的資源,我只需將它添加到我的項目目錄中的finder.app的正確目錄中(即,如果它是一個圖像,我將它添加到MyProject/Resources/Images/Foo.png),然後我在Xcode中加入我的組「Images」並從那裏添加文件。

我曾經試圖用「文件夾引用」選項,以防止Xcode和搜索同步,但IB無法獲得圖像...

而且,是你的icon.png,併爲Default.png在你的項目的根源? (即使用.xcodeproj文件?)當您使用Xcode 4(在項目信息>摘要中)時,將它們添加到那裏...想知道是否讓它們保留在那裏,因爲我個人總是希望將我的所有圖像放在示例目錄中!

那麼photoshop文件或其他任何文件相對於您的項目,你也把它們放在根目錄(再次與.xcodeproj文件)?

+0

我認爲這完全取決於你在哪裏你必須保存它,他們的目錄結構沒有任何指導原則或規則。 – rishi 2012-01-15 18:02:37

+0

我知道沒有關於它的「嚴格」規則,我想知道人們如何構建他們的項目,就是這樣:) – allaire 2012-01-15 18:04:50

+1

你可以參考iphone sdk論壇的以下主題 - http://www.iphonedevsdk.com /forum/iphone-sdk-development/6457-xcode-folder-directories.html – rishi 2012-01-15 18:05:25

回答

25

我建議保留所有的.m和.h和.xib文件在一個文件夾中,因爲它可以在運行ibtool以提取所有NSLocalizedString引用時簡化本地化字符串,並且還可以更輕鬆地將文件移動到int重構項目時,Xcode中的虛擬文件夾結構。

將第三方庫或框架保存在單獨的文件夾中,以避免將它們與自己的代碼混合在一起。

在Xcode本身中,我將這些類文件組織成獨立的虛擬文件夾,稱爲Views,Controllers,Model和Nibs(以及用於第三方的庫)。如果它是一個大型項目,我將它分解爲每個組件的文件夾,然後將它們分解爲視圖,控制器等,但這只是虛擬文件夾,而不是物理文件夾。

將資源保存在單獨的物理文件夾中是一個好主意,只是爲了方便在磁盤上瀏覽它們。將它們分成圖像,聲音,xml等是有意義的。在Xcode中,您可能希望按組件或類別(接口,內容等)將它們分解爲虛擬子文件夾,但我不建議在磁盤上進行這種操作隨着項目的增長,重構文件夾結構變得更加困難。

將所有圖像保存在同一個文件夾中是一個非常好的主意,因爲它避免了您無意中給出兩個圖像的相同名稱。如果你從不同的地方導入兩個具有相同名稱的圖像,Xcode不會警告你,但是當它構建應用程序時,最終會隨機選擇一個或另一個。

你不需要在根目錄下保存Default.png和Icon.png(甚至稱它們爲Default.png和Icon.png),但是如果標準文件不在預期的位置,有時Xcode會感到困惑。

是的,無論你做什麼,不要嘗試在導入圖像時使用藍色文件夾引用,否則無法使用imageNamed或代碼在Interface Builder中訪問它們。改爲使用黃色虛擬文件夾引用。基本上藍色的文件夾在構建應用程序時被複制到應用程序包中作爲實際文件夾,而黃色文件夾被忽略,並且其內容直接進入應用程序包的根目錄。要訪問藍色文件夾中的內容,您需要在加載時在路徑中包含藍色文件夾名稱,例如

NSString *path = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png" inDirectory:@"nameOfBlueFolderInXcode"]; 
UIImage *image = [UIImage imageWithContentsOfFile:path]; 
+1

我同意除了「保持所有.m和.h和.xib文件一個文件夾「。這會讓我堅果在我的svn倉庫中沒有結構!但每一個他自己。 – chown 2012-01-15 18:31:18

+0

那麼如果你使用svn,你就知道在svn中託管的項目中的文件夾之間移動文件是多麼的痛苦。將定製的UIButton子類從類/ somecomponent/views /移動到類/共享/視圖作爲重構過程的一部分而不會破壞本地鏈接和svn存儲庫會使我不得不重構以及任何使好的實踐努力工作是一個壞主意imho。 – 2012-01-15 18:39:47

+0

另外,請注意我關於使用ibtool生成localizable.strings文件的觀點。 ibtool是一個命令行工具,它接收文件夾路徑並從裏面的所有類生成單個字符串文件。它不會搜索子文件夾,所以如果你的類不是全部在一個文件夾中,它會使本地化很快。 – 2012-01-15 18:41:46

9

最近我一直在想這個,這裏是我決定去與結構:

ProjectName 
ProjectName/Assets 
ProjectName/Assets/Images 
ProjectName/Frameworks 
ProjectName/Logic 
ProjectName/Logic/Models 
ProjectName/Presentation 
ProjectName/Presentation/ViewControllers 
ProjectName/Presentation/Views 

我覺得這給了成長的良好結構,並提供合理的家任何東西。當然,根據需要添加其他子文件夾(例如Assets/Fonts)。爲我的結構檢查出的全部理由this blog post

因爲Xcode似乎很挑剔它,所以我確實把Icon.pngDefault.png這樣的東西放在了項目的根目錄中,但其他的東西都是整齊組織的。我將相應的.m,.h.xib文件保留在一起,但我將視圖控制器按功能(例如Initial,Settings)按邏輯劃分到子文件夾中。