在Xcode中处理c ++ mac应用程序。当我点击运行时一切都很好(调试和发布模式)。但是当我进入Finder进入Products / Release文件夹并直接双击.app时,应用程序会立即关闭并显示错误(应用程序意外退出。单击报告以查看更多详细信息)。当我单击报告时,它在上出错的代码行似乎表示它没有找到我的资源文件,但是当我构建/运行相同的应用程序时它会发现它们很好 xcode。下面是我如何在代码中使用资源文件的示例:
std::ifstream file;
file.open("AppName.app/Contents/Resources/Saves/1.svd");
//do stuff
file.close();
任何人都有任何想法为什么双击.xc刚创建的.app会比从xcode运行它有不同的结果?
也不确定这是否是问题的一部分,但似乎很奇怪我必须从.app文件外部引用资源文件夹(AppName.app/Contents/Resources/Saves/1.svd)。我希望这条路径相对于.app / Contents / MacOS中的可执行文件,就像这样(../Resources/Saves/1.svd),但它也没有用。
答案 0 :(得分: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