在 Xcode 中创建组与创建文件夹引用

Posted

技术标签:

【中文标题】在 Xcode 中创建组与创建文件夹引用【英文标题】:Create groups vs Create folder reference in Xcode 【发布时间】:2017-12-14 08:18:38 【问题描述】:

我在使用 Xcode 时很好奇。

在复制我的项目所需的开源类文件时,我总是需要选择一个选项。

选项是“创建组”和“创建文件夹引用”。

我已经读过两者的区别了。

但是根本看不懂。

当我选择这两个选项之一时,我从我的项目中删除了该文件,同时删除了开源类文件。

我不想要。

我希望始终作为独立文件存在。我应该选择什么?

【问题讨论】:

“当我选择了两个选项之一时,我从我的项目中删除了文件,同时开源类文件也被删除了。”,你能不能在这里更具体?你到底做了什么导致了这种行为? @YevhenDubinin 我不记得我选择了两个选项中的哪一个。但是,如果有“1”数字和“1”数字的“1 (1)”副本,我删除了重复的“1 (1)”但将其删除为“1”原件。所以我希望副本和原件独立存在。我应该选择哪个选项? 我只想知道这两个选项的区别。我做了什么并不重要。 【参考方案1】:

我花了一段时间才理解这两个选项之间的区别,所以我想分享一下:

当 Xcode 12 是当前版本时,我正在写这篇文章

最大的区别是如何从查找器访问导入的文件夹/文件。假设您想将一个新文件夹导入您的 Xcode 项目。当您选择Create groups时,Xcode 将导入您的新文件夹并创建一个组(黄色图标)。当您转到项目目录(使用 Finder)时,您应该会看到一个与您刚刚导入的文件夹名称类似的文件夹,但是您通过 Finder 放入该文件夹的任何其他文件都不会在您的 Xcode 项目中可见。

当您选择Create folder references 时,导入的文件夹将在 Xcode 中具有经典的蓝色文件夹图标。当您转到项目目录时,这个新文件夹也将可见,但现在您放在那里的每个新文件也将出现在您的 Xcode 项目中。

如果您想了解更多信息,请阅读此说明http://www.thomashanning.com/xcode-groups-folder-references/

它非常简单易懂。

【讨论】:

向项目添加资源时的不同行为也值得注意。如果您在组中使用资源,则组中的每个项目都将复制到构建中捆绑包的根目录。如果您创建一个文件夹引用,将在您的 Bundle 中创建一个包含资源的同名文件夹 - 文件夹结构在 Bundle 中维护。 我建议在 Xcode 中为库导入使用文件夹引用,以便文件随每个版本自动更新/删除。【参考方案2】:

任何 Xcode 项目结构组织有两种类型:

文件系统项目结构(可通过Finder.app检查) IDE 项目结构(可在 Xcode 的导航器区域中使用 Project Navigator 进行检查。)

Xcode 通过保持对“物理”文件或文件夹的引用来依赖文件系统组织。这就是为什么您可能会将项目的所有类、图像、plist 和其他部分存储在同一个文件夹中,而对这些部分的引用保持井井有条到 Xcode 项目中的各个中。

创建组时,它会影响 Xcode 中项目的组织。当您使用参考文件夹创建组时,它会同时创建 Xcode 项目中的组和文件系统中的文件夹。

但是,从 Xcode 9 it seems like, Apple enforces filesystem project structure to correspond to Xcode project structure 开始。这意味着,您必须明确选择“没有文件夹的新组”

【讨论】:

我还是不明白。换句话说,在将文件夹拖放到项目中时,您需要哪些选项才能使原始和副本分开存在?【参考方案3】:

Finder 中的文件和文件夹添加到Xcode 组中。 Xcode 10.2.1。看看没有Copy items if needed的例子

文件

create groupscreate folder references 的常见行为

    Finder 重命名文件不会重命名Xcode 中的文件,因此Xcode 不会处理它,它会用红色标记它们。 重命名Xcode中的文件重命名Finder中的文件 从Finder更改文件更改Xcode中的文件,反之亦然 从Xcode 删除以回收文件,更改Finder 中的文件,反之亦然 从Finder 中的文件夹 添加文件不会将该文件添加到Xcode 中的

文件夹

create groupscreate folder references 的常见行为:

    Xcode重命名文件夹/组重命名Finder中的文件夹

create groups

如果您选择create groups,则相应的文件夹会在项目导航器中出现一个黄色图标。

它只是一个虚拟文件夹。它在开发过程中很有用,当您复制一个文件并且它没有被编译并且您没有时间对其进行更改并且只想检查项目是否有效时。因此,您可以从文件中删除引用。它不会从文件夹中删除,因此您可以再次添加此文件。

    重命名Finder 中的文件夹 不会重命名Xcode 中的 名称。您可以与组一起使用,但之前的内容虽然可见但不可用 将文件添加到Finder 中的文件夹 不会将该文件添加到Xcode 中的 将文件添加到Xcode 中的 不会将文件添加到Finder 中的文件夹 删除Finder 中的文件夹 不会删除Xcode 中的。您可以与组一起使用,但之前的内容虽然可见但不可用

create folder references

如果您选择create folder references,则该文件夹会在项目导航器中显示为一个蓝色图标。

这是一个真实的文件夹,任何更改都会反映

    重命名Finder 中的文件夹 不会重命名Xcode 中的文件夹 名称。之前的内容没有了,你不能使用这个文件夹 将文件添加到Finder 中的文件夹 将文件添加到Xcode 中的文件夹 将文件添加到Xcode 中的文件夹 将文件添加到Finder 中的文件夹 删除Finder 中的文件夹 会删除Xcode 中的文件夹

[Copy items if needed]

【讨论】:

【参考方案4】:

创建文件夹引用:

没用,因为即使您列出要包含在目标中的此文件夹,Xcode 也不会在该目标中包含其任何 内容,并且无法单击文件夹中的某些内容并查看它包含在哪些目标中。

创建组:

如果您想在构建目标中包含任何文件夹的内容,这是唯一可行的方法。

【讨论】:

这也是我发现的。目标成员资格选择至关重要,所以首先我在文件系统上添加了我想要的目录,然后我在 Xcode 中创建了同名的组(右键单击,创建组),然后我将文件夹中的文件一一添加到通过拖放分组。现在 Xcode 匹配我的文件系统,但文件可能具有精确指定的目标成员资格。这让我可以为每个目标使用不同的 Firebase GoogleService-Info.plist,每个 Firebase 后端(开发、产品等)都有一个目标

以上是关于在 Xcode 中创建组与创建文件夹引用的主要内容,如果未能解决你的问题,请参考以下文章

在 ASmack 中创建组

我们如何在 Xcode 项目中创建自己的 plist 文件?

如何在 xcode 4.3.2 中创建 plist 文件

在 SQL 中创建组 ID

如何在 django 中创建组权限

XCode - iOS - <OCMock/OCMock.h> 文件未找到