Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Relative Paths Not Working in Xcode C++

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?

like image 603
Brock Woolf Avatar asked Feb 05 '09 14:02

Brock Woolf


1 Answers

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!!!!

like image 98
Brock Woolf Avatar answered Sep 18 '22 18:09

Brock Woolf