从Xcode构建时,应用程序运行正常,不会直接从.app运行

时间:2016-06-24 06:10:31

标签: c++ xcode macos build .app

在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),但它也没有用。

1 个答案:

答案 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