如何让Xcode在磁盘的文件夹结构中复制项目组结构?

44

我有一个Xcode项目,具有以下的组织结构:

ProjectName/
    Classes/
        class1.h
        class1.m
        class2.h
        class2.m
        ...
    XMLDocs/
        doc1.xml
        doc2.xml
        ...
    Resources/
        Info.plist
        MainMenu.xib
        ...

等等,诸如此类。

我希望这在磁盘上的文件夹结构中也能得到体现:

ProjectFolder/
    Project.xcodeproj
    Classes/
        class1.h
        class1.m
        class2.h
        class2.m
        ...
    XMLDocs/
        doc1.xml
        doc2.xml
        ...
    Resources/
        Info.plist
        MainMenu.xib
        ...

与通常的将所有内容放在根项目文件夹中的方法不同。

是否有办法在不手动创建磁盘上的文件夹结构,然后不得不重新指向Xcode中的所有引用到新位置来完成此操作?

如果您能告诉我如何自动完成每次在Xcode中创建新组或向现有组添加文件时的操作,那就更好了。


我很久以前就想做这件事了。只是又一个 Xcode 似乎无法处理的简单问题。至少现在我知道这个功能肯定不存在了。感谢您提出这个好问题! - John Gallagher
我最近发现了一个命令行工具,可以组织你的文件夹结构。它设置简单,使用也很简单。更多详情请查看我的另一个回答,关于同样的文件夹结构问题 - Cornel
实际上,有一种方法 - https://github.com/venmo/synx - ULazdins
6个回答

63

你可以在一定程度上实现这个目标!只需多做一个额外的步骤,每次创建新组时都要执行(第一次你需要赶上许多工作!):

Xcode location setting

每当在Xcode中创建一个组时,立即选中它并打开右侧边栏。注意其名称下方的“位置:”设置。点击“无”旁边的文件夹图标,并将其设置为一个同名的新文件夹。

现在,每当你向该组添加文件时,它们将会被放置到相应的磁盘文件夹中。棒极了!

不幸的是,在初始时,你需要进行许多文件移动。(当你更改组路径时,所有文件将变成红色,因为Xcode将开始在新文件夹中寻找它们。你需要手动从Finder中移动它们以修复问题。)然而,有一个命令行工具可以为您执行此初始迁移:https://github.com/venmo/synx


1
获取信息已经在 Xcode 4 上移动了(如上所述)- 正在尝试找到它的位置 :( - theiOSDude
我已经尝试过了,但在Xcode4中无法复制。你有xc4的解决方案吗? - sandstrom
5
哦天啊,他们真的不能再把它弄得更晦涩难懂了。感谢你的回答。 - Andrew Young
有没有什么方法可以自动化这个过程?也许是一个插件或什么的? - James Billingham
一个完美的答案,你救了我的一天,非常感谢。我认为这个答案应该被标记为正确答案。 - Reza Dehnavi

11

您需要的是文件夹引用。将文件拖到项目中或添加文件时,会出现“为添加的任何文件夹创建文件夹引用”的选项。请选择该选项,您将获得所需的行为。

alt text http://img.skitch.com/20081203-prtxsp7c36ern4afxxdixy93sq.png

您可以尝试将整个项目的外壳文件夹作为一个文件夹引用添加。这样应该能获得所有内容。或者分别为“Classes”“Resources”和“XML”添加引用。


谢谢,这对于添加未来的项目很有帮助,但是有没有办法将现有的组转换为文件夹? - Redwood
当您拖入文件时,您只能获得此选项,而在添加新文件时,您无法获得此选项。 - TheLearner
这是一个很好的添加资源的解决方案。您可能已经注意到了PhoneGap中的蓝色文件夹“www”。只需将任何内容添加到该文件夹中,它就会被添加到您的项目中。但是,如果您转到项目的Build Phases部分中的“Copy Bundle Resources”,您会注意到只有文件夹出现在那里,而不是其内容。要访问所引用文件夹的内容,您需要使用您添加的文件夹的名称附加要获取的资源的路径,如下所示:NSURL *htmlURL = [[NSBundle mainBundle] URLForResource:@"mypage" withExtension:@"html" subdirectory:@"www"]; - aeldron

1
Xcode9解决了这个问题。默认情况下,一个新的组会被创建,并在磁盘上对应一个文件夹。

1

0

我发现如果你在Xcode中移动文件并同时按下[CMD]键,那么文件夹结构将与Xcode结构匹配。


0

Xcode中没有“使我的磁盘看起来像我的项目结构”的功能。

不过,你可以使用AppleScript自动化任务:你可以从脚本中检查和更改项目结构。因此,你只需要编写一个脚本,迭代项目结构并使文件夹层次结构看起来与项目结构相同,并同时调整Xcode的文件和组引用指向。


你能写一个脚本的例子吗? - Leonif
抱歉,我不能分享。 - Chris Hanson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接