我喜欢在Xcode 4项目导航器窗格中将我的类组织成组.我还通过终端使用GIT版本控制,这比Xcode 4集成更适合我.对我来说,当我在Xcode中创建的组与我的文件系统上的真实文件夹相对应时,这是最有意义的.

然而,Xcode似乎并不关心文件(例如Objective-C.h/.m文件)在文件系统中的位置,每次添加一个组(Option+Command+N)时,这纯粹是装饰性的,因为放入其中的任何文件都将与其他文件共享硬盘上的同一位置.

奇怪的是,如果你先在硬盘上创建一个文件夹,然后把它拖到Xcode,你就创建了一个在文件系统上有自己位置的组.您在其中创建的每个文件都将在磁盘上的文件夹中创建.我很喜欢,但如果Xcode能在Option+Command+N岁时帮我做到这一点,我会更喜欢它.切换到要创建的每个组的Finder,然后将其拖回project navigator中的正确位置,这种工作流程非常愚蠢.

这感觉就像是一个设置可以修复的东西,但我找不到它!有更好的办法吗?

Update:将文件夹拖动到Xcode时,会出现一个对话框窗口,您可以在其中 Select "文件夹引用".这看起来很有希望,但是我的Xcode 4不接受其中的文件作为类,并且一直告诉我它找不到任何文件.也许答案就在这里,但我还是找不到.

Another update:我已经将我的主编辑器环境从Xcode更改为AppCode.后者支持实际创建文件夹来支持项目组,同时保持与Xcode的Another update:%兼容性.那些AppCode的家伙肯定知道他们在做什么.

推荐答案

使现代化

下面介绍Xcode 9及更高版本.

从Xcode 9开始,在项目中创建组时,Xcode可以自动创建文件系统文件夹.

在"项目导航器"中右键单击(或控制单击)时,关联菜单将包括"新建组"菜单项和"新建带文件夹的组"菜单项or"新建不带文件夹的组"菜单项.

  • 如果Xcode提供"新组"和"带文件夹的新组",那么"新组"将创建一个不带文件夹的组.

  • 如果Xcode提供"新组"和"不带文件夹的新组",那么"新组"将创建一个带文件夹的组.

换句话说,"新建组"在创建文件夹时总是与其他(明确的)菜单项相反.

如果重命名一个组,并且该组有一个同名的对应文件夹,Xcode 9也会重命名该文件夹.

在Xcode 9中,如果将文件从一个组拖到另一个组,并且这些组有不同的文件夹,则无论新组的文件夹是否与组同名,Xcode 9都会将文件移动到新组的文件夹中.

如果想要在Xcode 9中实现这种行为,可以从命令行设置一个未记录的设置:

defaults write com.apple.dt.Xcode IDEDisableStructureEditingCoordinator -bool YES

无法推断"带文件夹的新组"和"不带文件夹的新组"的详细信息

Xcode如何决定是显示"新组"和"带文件夹的新组",还是"新组"和"不带文件夹的新组",这一点并不明显.WWDC 2018的一位苹果工程师(我想他的名字是Paul)查看了Xcode源代码,并向我解释:

  • Xcode会计算出你点击了哪个组(或者,如果你没有点击一个组,它会计算出哪个组包含你点击的项目).
  • Xcode查看subgroups个(以及链接的文件夹),它们是单击组的子级.
  • 如果大多数子组都有自己的文件夹,那么Xcode假定您希望新组也有自己的文件夹.所以Xcode显示"新建组"(将创建一个文件夹)和"不带文件夹的新建组".
  • 如果大多数子组都有自己的文件夹,那么Xcode假设您希望新组也有自己的文件夹.所以Xcode显示"新建组"(它将创建一个文件夹)和"新建带文件夹的组".
  • 我不知道Xcode如何打破僵局,如果正好有一半的子组有自己的文件夹,我现在不想测试它…
  • 如果单击的组没有子组,Xcode将根据单击的组本身是否有自己的文件夹来决定显示什么.

基本上,Xcode会根据future 的同级是否有自己的文件夹来猜测新组是否应该有自己的文件夹.

起初的

你可以直接在Xcode中创建一个新组,它有自己的文件夹,但这一点都不明显.

不要 Select "新建组",而是 Select "将文件添加到"<;项目>;".然后,在"文件 Select 器"对话框中,单击"新建文件夹"按钮或按Command-Shift-N并键入新文件夹/组的名称.然后,确保选中"为任何添加的文件夹创建组",然后单击"添加"或按"返回".

adding a group with its own folder

This doesn't save you much if you need to move existing files into the new group, because Xcode still won't do that.

但是,如果你正在创建一个新组来保存新文件,它确实可以节省一些步骤.

Objective-c相关问答推荐

在 MacOS 上截屏

跨平台 iPhone/Android 代码共享

iOS - 如何预加载键盘?

将 NSArray 保存到 NSUserDefaults 并在 NSMutableArray 中获取它

Xcode 的任何 ReSharper 类似功能?

Objective-C 中的正式协议和非正式协议有什么区别?

单元测试私有方法 - 目标 C

是否可以将 NSInteger 转换为 NSNumber?

如何为代码自动格式化设置 Xcode 插件

NSPredicate 与整数比较

将子视图添加到 UIButton

更改 UIBarButtonItem 的 Tint colored颜色

使用情节提要的条件转场

Xcode 在 iOS 8 中的 Main() 中引发异常,并带有所有异常断点

UIWebView didFinishLoading 多次触发

主队列上的 performSelectorOnMainThread: 和 dispatch_async() 有什么区别?

iOS 10 中的错误:无法从 https://mesu.apple.com/assets/ 复制assets资源信息以获取assets资源类型

iPhone:如何确定线程是否是主线程?

iOS:开源 VoIP/SIP Objective-C 代码

将 Xcode 组创建为文件系统文件夹的工作流程