Create groups vs Create folder reference in Xcode
Create folder references:
- Useless because even if you list this folder to be included with a target, Xcode won't include any of its contents in that target and there's no way to click on something in the folder and see which targets it's included in.
Create groups:
- This is the only way to go, if you want to include any of the folders' contents in a build target.
There are two types of any Xcode project structure organization:
- filesystem project structure (inspectable with Finder.app)
- IDE project structure (inspectable with Project Navigator in Xcode's navigator area.)
Xcode relies on filesystem organization by keeping a reference to a "physical" file or folder. That is why you may have all the classes, images, plists, and other parts of your projects stored in the same folder, while the references to these parts are being kept organized into respective groups within Xcode project.
When you create a group, it affects the organization of your project in Xcode. When you create a group with a reference folder, it creates both, a group in Xcode project and a folder in your filesystem.
However, since Xcode 9 it seems like, Apple enforces filesystem project structure to correspond to Xcode project structure. It means, that you explicitly has to choose "New Group without Folder"
Added files and folders from Finder
into the Xcode
group. Xcode 10.2.1. Just take a look at the examples without Copy items if needed
Files
Common behaviour for create groups
and create folder references
- Rename a file from
Finder
does not rename the file inXcode
, as a result Xcode doesn't handle it and it will mark them by red color. - Rename a file from
Xcode
rename the file inFinder
- Change a file from
Finder
change the file inXcode
and vice versa - Remove to trash a file from
Xcode
change the file inFinder
and vice versa - Add a file from folder in
Finder
does not add the file to group inXcode
Folders
Common behaviour for create groups
and create folder references
:
- Rename a folder/group from
Xcode
rename the folder inFinder
create groups
If you choose create groups
, then the corresponding folder appears with a yellow icon in the project navigator.
It is just a virtual folder. It useful during development when you copy a file and it is not compiled and you do not have a time to make changes in it and want only to check if a project works. So you can just remove a reference from a file. It will not be removed from a folder as a result you will be able to add this file again.
- Rename a folder in
Finder
does not rename a name of group inXcode
. You steal can work with group but previous content inside although visible but unavailable - Add a file to a folder in
Finder
does not add the file to group inXcode
- Add a file to a group in
Xcode
does not add the file to folder inFinder
- Remove a folder in
Finder
does not remove the group inXcode
. You steal can work with group but previous content inside although visible but unavailable
create folder references
If you are choosing create folder references
, then the folder appears with a blue icon in the project navigator.
It is a real folder and any changes will be reflected
- Rename a folder in
Finder
does not rename a name of folder in Xcode. The previous content is gone and you can not work with this folder - Add a file to a folder in
Finder
adds the file to folder inXcode
- Add a file to a folder in
Xcode
adds the file to folder inFinder
- Remove a folder in
Finder
removes the folder inXcode
.
[Copy items if needed]
It took me a while to understand the difference between those two options so I thought I'd share:
I'm writing this when Xcode 12 is the current version
The biggest difference is how the imported folder / file will be accessible from the finder. Let's say you want to import a new folder to your Xcode project. When you choose Create groups
Xcode will import your new folder and create a group (the yellow icon). When you go to your project's directory (using Finder) you should see a folder named like the one you've just imported, but any additional files you put to this folder trough Finder won't be visible in your Xcode project.
When you choose Create folder references
the imported folder will have a classic blue folder icon in Xcode. This new folder will also be visible when you go to your projects directory, but now every new file you put there will also appear in your Xcode project.
If you want to know more just read this explanation http://www.thomashanning.com/xcode-groups-folder-references/
It's pretty straightforward and easy to understand.