Возможно, вы предполагаете, что при запуске вашего приложения текущий рабочий каталог процесса является пакетом вашего приложения. Это не так. (Ничего общего с Xcode - это только то, как работает OS X).
Обычно вы используете NSBundle
(Objective-C) или CFBundle
(C)
найти ресурсы в вашем комплекте приложений. Поскольку вы используете C ++, давайте использовать C API.
Чтобы найти URL-адрес файла "myFile.ini" в каталоге ресурсов в вашем комплекте приложений:
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef url = CFBundleCopyResourceURL(mainBundle, CFSTR("myFile"), CFSTR("ini"), NULL);
UInt8 filePath[PATH_MAX];
if (CFURLGetFileSystemRepresentation(url, true, filePath, sizeof(filePath)))
{
// use your API of choice to open and read the file at filePath
}
Или, чтобы просто заменить CWD на ваш пакет приложений:
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef url = CFBundleCopyBundleURL(mainBundle);
UInt8 bundlePath[PATH_MAX];
if (CFURLGetFileSystemRepresentation(url, true, bundlePath, sizeof(bundlePath)))
{
if (chdir((const char*)bundlePath) == 0)
{
// now the CWD is your app bundle, and you can use relative path names to access files inside it
}
}