For example I drag in a folder "SharedClasses" with shared source code files as a folder reference into Xcode. The folder reference appears in the Project Navigator and lists all .h and .m files correctly.
But Xcode refuses to import them. I tried all kinds of import:
#import "Utility.h"
#import "SharedClasses/Utility.h"
#import <SharedClasses/Utility.h>
None of them work. But a folder reference exists and it contains "Utilities.h"
Xcode knows where the folder comes from so what must I do that it looks inside it?
Because the files are in a different folder than the project Xcode will not include it in the header search path. To fix this add an entry for User Header Search Paths (select your project, select Build Settings, filter to "user header search paths", add the value) in the project that points to the original folder reference. For example in a project I'm working on I have code that is shared between several projects in a workspace which is stored at the same folder level as the projects in a folder named shared. My User Header Search Paths has the following:
$(PROJECT_DIR)/../Shared/MySharedCode/
Related
I'm curious when using Xcode.
I always need to choose an option when copying the open source class files I need for my project.
The options are "Create groups" and "Create folder references".
I've read the difference between the two already.
But it is not understood at all.
When I chose one of the two options, I deleted the file from my project and the open source class file was deleted at the same time.
I do not want it.
I want to always exist as an independent file. What should I choose?
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.
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 in Xcode, as a result Xcode doesn't handle it and it will mark them by red color.
Rename a file from Xcode rename the file in Finder
Change a file from Finder change the file in Xcode and vice versa
Remove to trash a file from Xcode change the file in Finder and vice versa
Add a file from folder in Finder does not add the file to group in Xcode
Folders
Common behaviour for create groups and create folder references:
Rename a folder/group from Xcode rename the folder in Finder
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 in Xcode. 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 in Xcode
Add a file to a group in Xcode does not add the file to folder in Finder
Remove a folder in Finder does not remove the group in Xcode. 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 in Xcode
Add a file to a folder in Xcode adds the file to folder in Finder
Remove a folder in Finder removes the folder in Xcode.
[Copy items if needed]
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.
This is not the first time I've had trouble with this and I suspect not the last time either. Despite having learned many frameworks inside out I still find the organizational structure of a simple xcode project elusive. I simply wanted to retitle a project from CATouchSynth to ABTouchSynth. A while ago I discovered that if you click on the Project folder in project navigator and than change the name in the Identity and Type section it will rename many of the relevant files and directories to the new name. However, there is one main folder inside the folder on your computer that doesn't change and still has the old name. I could see no way to change this folder name through Xcode and so I renamed it manually from finder. This turned all of my source files and assets red so I manually "relinked" them in xcode and they are now non-red and seemingly linked with the newly named folder. However I am getting several compile-time errors talking about the old folder name but I have no clue what Xcode is referring too. The errors look like this
It seemed as if derived data was an issue so I deleted the derived data folder from Xcode and I still get these errors. Has anyone experienced this before and what can I do to ressurrect my project?
Note: Before doing any changes do backup your project folder. This is seriously recommended.
Follow the steps below to rename the source folder of your project –
Close XCode.
Rename the Source Folder.
Right click the project bundle .xcodeproj file and select “Show Package Contents” from the context menu. Open the .pbxproj file with any text editor (Xcode).
This step should be done with extreme caution. Search and replace any occurrence of the original folder name with the new folder name.
Save and Close the file.
Open XCode project.
The error is happening at build time during the compile phase, so you will have to go into the app target's Compile Sources build phase, remove all those .m files, and add them again.
Whenever creating a new project or importing an existing one, Xcode usually creates three files and a folder. The first two files are found in the root of the project:
ProjectNameHere-Info.plist
ProjectNameHere-Prefix.pch
And the folder which can also be found in the project root directoy, is called:
en.lproj
which has this file:
InfoPlist.strings
Does anyone know what the purpose of these files are/what they contain? Im not sure whether to add these to my SVN (I'm using SmartSVN). Likewise if I don't check-in these generated files, how will Xcode react when someone else checks-out the project? Does Xcode re-create these files?
you should include these files to source control.
'plist' is a property list file for application written with xml
that include icon file name, build option, and more.
'pch' is precompiled header file has referenced from all of your project.
'en.lproj' and 'InfoPlist.strings' are for language localized files.
default language have set by English.
if you remove these files, occur error on build.
and Xcode can not re create these from other files.
When I am adding a new folder, that i took from another project, to my Xcode project (which has many subfolders and classes in it) it creates this folder with a gray color and not the yellow one as the rest of my project's folders.
Then when I am trying, from another class in my project to #import class.h that is in this folder, I get an error saying Xcode doesn't see it in the project.
class-name file is not found
I have added the folder using "Add files to project-name".
What am I doing wrong?
A gray folder is a reference to a folder on disk, whereas a yellow one is a group representing a collection of files in a project. For most source code, you'll want to use the yellow kind. To do this, when you add the files to the project make sure that you use Create groups for any added folders as opposed to Create folder references for any added folders.
I have folder that I would like to include in my Xcode project, but I would like it to retain it's structure (subfolder, etc). When I drag it into the resources in Xcode it expands that folder into a group in the Xcode project.
I would also like it to retain it's structure so I can add and remove files without re-adding the modified folder to the project constantly.
When adding your package, select the option to "Create Folder References for any added folders". Xcode will create a reference to the directory, and notice changes every time you rebuild the package.