应用程序 运行 从 Xcode 构建时没问题,不会 运行 直接从 .app

Application runs fine when built from Xcode, won't run directly from the .app

正在 Xcode 中开发 C++ mac 应用程序。当我点击 运行 时一切正常(调试和发布模式)。但是当我进入 finder 进入 Products/Release 文件夹并直接双击 .app 时,应用程序立即关闭并出现错误(应用程序意外退出。单击报告以查看更多详细信息)。当我点击报告时,它在 上出错的代码行似乎 表明它没有找到我的资源文件,但是当我 build/run 完全相同时它发现它们很好应用 来自 xcode。这是我如何在代码中使用资源文件的示例:

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

任何人都知道为什么双击 xcode 刚创建的 .app 会得到与 运行 从 xcode 创建的 .app 不同的结果?

也不确定这是否是问题的一部分,但我必须从 .app 文件 (AppName.app/Contents/Resources/Saves/1.svd) 外部引用资源文件夹似乎很奇怪。我希望该路径相对于 .app/Contents/MacOS 中的可执行文件,就像这样 (../Resources/Saves/1.svd) 但这也不起作用。

我遇到了类似的问题,花了一些时间研究不同的选项,最终我使用了 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