There are numerous post over the net that detail how relative paths don't work in Xcode. I do have an Xcode template that I downloaded where the relative paths DO work, however I have not been able to figure out why nor replicate it in other projects.
Firstly, I am using C++ in Xcode 3.1. I am not using Objective-C, nor any Cocoa/Carbon frameworks, just pure C++.
Here is the code that works in my other Xcode template:
sound->LoadMusic( (std::string) "Resources/Audio/Pop.wav" );
This relative path works for me also in Windows. Running the following command gives me an absolute path to the application's full path:
std::cout << "Current directory is: " << getcwd( buffer, 1000) << "\n";
/Applications/myApp
How can we get relative paths to work in an Xcode .app bundle?
Took me about 5 hours of Google and trying different things to FINALLY find the answer!
#ifdef __APPLE__ #include "CoreFoundation/CoreFoundation.h" #endif // ---------------------------------------------------------------------------- // This makes relative paths work in C++ in Xcode by changing directory to the Resources folder inside the .app bundle #ifdef __APPLE__ CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle); char path[PATH_MAX]; if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX)) { // error! } CFRelease(resourcesURL); chdir(path); std::cout << "Current Path: " << path << std::endl; #endif // ----------------------------------------------------------------------------
I've thrown some extra include guards because this makes it compile Apple only (I develop cross platform) and makes the code nicer.
I thank the other 2 guys for your answers, your help ultimately got me on the right track to find this answer so i've voted you both up. Thanks guys!!!!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With