Приложение работает нормально при сборке из Xcode, не запускается напрямую из .app

Работа над приложением Mac с ++ в XCode. Когда я нажимаю «Run», все в порядке (режим отладки и выпуска). Но когда я захожу в finder в папку Products / Release и дважды щелкаю на .app напрямую, приложение сразу закрывается с ошибкой (приложение неожиданно завершает работу. Щелкните отчет, чтобы увидеть более подробную информацию). Когда я нажимаю на отчет, строка кода это ошибки на кажется чтобы указать, что он не находит мои файлы ресурсов, но находит их в порядке, когда я собираю / запускаю одно и то же приложение от Xcode. Вот пример того, как я использую файлы ресурсов в коде:

std::ifstream file;
file.open("AppName.app/Contents/Resources/Saves/1.svd");
//do stuff
file.close();

у кого-нибудь есть идеи, почему двойной щелчок на .app, который только что создан xcode, дал бы другие результаты, чем запуск его из xcode?

также не уверен, является ли это частью проблемы, но кажется странным, что мне приходится ссылаться на папку ресурсов вне файла .app (AppName.app/Contents/Resources/Saves/1.svd). Я ожидал бы, что этот путь будет относительно исполняемого файла в .app / Contents / MacOS, как это (../Resources/Saves/1.svd), но это тоже не сработало.

0

Решение

У меня была похожая проблема, и, потратив некоторое время на изучение различных вариантов, я использовал объекты Apple. Мне нужно было получить папку ресурсов:

#ifdef __APPLE__
#include "CoreFoundation/CoreFoundation.h"#endif

Тогда фактический фрагмент кода:

#ifdef __APPLE__

char path[FILENAME_MAX];

CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);

if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX)){
//
//log("CFURLGetFileSystemRepresentation returned false. Path:%s", path);
exit(0);
}
CFRelease(resourcesURL);

chdir(path);

//log("Current path:%s", path);
#endif
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]