2012-01-15 131 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)按逻辑划分到子文件夹中。