iOS项目目录组织

时间:2012-01-15 17:51:51

标签: iphone objective-c ios xcode

关于如何为您创建的每个iOS应用安排Xcode 4目录的快速问题/意见。

就个人而言,我仍然添加一个名为/ Resources的目录,其中包含/ Fonts,/ Images,/ Icons等子目录。我使用“将项目复制到目标组的文件夹(如果需要)”选项。如果我需要添加一个新的资源,我只需将它添加到我的项目目录中finder.app中的正确目录(即如果它是一个图像,我将它添加到MyProject / Resources / Images / Foo.png)然后我只是在Xcode中继续我的组“Images”并从那里添加文件。

我曾尝试使用“文件夹引用”选项让Xcode和Finder保持同步,但IB无法获取图像...

另外,你的Icon.png和Default.png是你项目的根目录吗? (即使用.xcodeproj文件?)当你使用Xcode 4(在项目信息>摘要中)时,他们将它们添加到那里...想知道你是否将它们保留在那里,因为我个人总是喜欢将所有图像放在样本目录中!

那么相对于你的项目的photoshop文件或任何其他文件呢,你也把它们放在根目录中(再次使用.xcodeproj文件)?

2 个答案:

答案 0 :(得分:26)

我建议将所有.m和.h以及.xib文件保存在一个文件夹中,因为它可以简化在运行ibtool以提取所有NSLocalizedString引用时本地化字符串,并且还可以更轻松地在虚拟文件中移动文件重构项目时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 :(得分: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

我确实将Icon.pngDefault.png这样的内容保留在项目的根目录中,因为Xcode看起来很挑剔,但除此之外整齐有序。我将相应的.m.h.xib文件保存在一起,但我按功能将视图控制器按逻辑分割为子文件夹(例如InitialSettings )。