在Xcode 4中,组织是否有“最佳实践”?

我来自java世界,在我的理解中,文件/类应该在包/文件夹中良好地结构化。

Xcode4的最佳做法是什么? 我还没有find苹果的指导方针。 如果有人能把我推到正确的文件,我会很高兴。

如果没有文件,最好怎么办? 我发现有一个项目文件夹中的所有类 – 无论是在Xcode视图或文件结构(奇怪的文件结构似乎不等于Xcode中的可视化结构)有点奇怪。 当然,这个项目将在版本控制(在GitHub上)。

提前谢谢了!

首先,我喜欢把消防控制器和相关的类别分类。 但不只是在XCode中创build的组中,也在真实的文件夹中。 所以,当创build一个组而不是在XCode中创build它时,首先在Finder中创build它,然后将该文件夹拖到XCode中,并将其组成一个组。 现在,当您在该组中添加新文件时,他们也将进入磁盘上的该文件夹。

其他一些随意的想法:

命名:因为你没有命名空间,所以你必须在前面添加一个两个或三个字母的前缀(苹果推荐三个)。 即使起初看起来很奇怪,也要这样做。

资源:像从视图控制器分离xib文件的默认项目。 在任何大小的应用程序中,我都非常喜欢将视图控制器和xib文件分组在一个位置。 你甚至可以用这种方法来做图像,但是通常只有很less的东西,只要把它们放在一个地方就可以了。

应用程序的东西:我喜欢在列表顶部的一个应用程序组中将所有其他应用程序特定文件(应用程序委托,info.plist,pch文件,main.m等)分组,以使这些位易于查找。

首先,看看默认的项目结构。 虽然不完美,但Xcode中有一些默认的“组”。 使用这些作为一般的指导原则。 (正如您所提到的,组不是文件系统文件夹,但是当您导入资源时,系统会提示您select为文件夹创build组。

虽然关于文件的结构化没有太多的官方惯例,但是像我这样,有一些事情可以做,以便抓住组织的痒。 我在我的磁盘上的项目目录中创build一些子文件夹。 这里是其中的一些:

  • audio:audio文件也可能得到他们自己的组。

  • 外部库:如果我导入其他人的代码,我将创build一个名为“库”的组,然后是每个组的子组。

  • 图片:在那里,你可以创build子文件夹/子组,如果你喜欢。 (一个用于图标,一个用于主菜单等)

  • pipe理对象:当我在项目中使用Core Data时,我经常会通过Xcode的build模工具生成子类。 我喜欢把它们保存在一个单独的组和一个单独的文件夹中。

  • 视图控制器:根据项目的不同,我可能会对视图控制器进行不同的分组。 例如,我可能把所有的“编辑”和“观众”都放在不同的组中。

归根结底,组织是为了使您的项目pipe理更容易,文件夹使文件pipe理更容易。 这完全取决于你如何做到这一点。 正如比尔·布拉斯基(Bill Brasky)在汇编时所指出的那样,组织中没有一个真正起作用。 (如果你想疯了,看一下Xcode 4中的“Build Phases”屏幕。复制阶段是所有相关文件的混乱。)

当谈到如何在XCode中组织项目时,我还没有遇到过任何具体的问题。 我可能是错的,但我相信你自己创build的任何文件夹和布局在编译时都会被彻底清除掉。

例如,如果你有一个embedded到Resources / Images / Background / image.png的图像,你仍然只是引用.png文件名而不是文件夹结构。

我不得不说,如果你觉得合适,你仍然可以组织你的项目。 从一些Java中借用一些最好的方法。

这真的是你喜欢的。 组织者不反映实际的文件结构。 最后,源文件只是被编译成一个二进制文件,资源都被转储到应用程序包的“Resources”文件夹中。 我只是扩展了默认设置 – 我把资源放入资源文件夹,根据需要分组。 在一个游戏中,我可能会有图标​​,背景,精灵,audio和其他的组。 对于生产力应用程序,我可能只有纹理和图标。 外部库和框架都进入框架组(我很less费心组织这些,除非像Dropbox SDK或GData这样的库已经进入了一个整齐的组,通常它只是一个文件)。 在Sources组中,我可以按function视图进行分组,例如Document Library,Editing View或Utilities(用于文档编辑程序)或Main Menu和Gameplay。 对于一个较小的项目,我可以按照控制器进行分组(根据需要分为视图控制器和模型控制器),模型和视图。 如果您来自Java项目,保留现有组织没有任何问题; 实际上,默认情况下,当您添加到Xcode时,它将根据磁盘上的文件夹创build新组。

无论如何,所有东西都会在最终的包中变得平坦,而且你的组织对文件系统没有影响。 使用任何必要的项目 – 不要使用相同的结构的俄罗斯方块克隆,因为你会…专业的医疗应用程序或东西。