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

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

本文关键字:运行 app Xcode 构建 应用程序      更新时间:2023-10-16

在Xcode中使用C MAC应用程序。当我打运行时,一切都很好(调试和发布模式)。但是,当我进入Finder进入产品/发行文件夹并直接双击.App时,该应用会立即关闭错误(应用程序意外戒烟。单击报告以查看更多详细信息)。当我单击报告时,上的代码行似乎表示它没有找到我的资源文件,但是当我从中构建/运行相同的精确应用时,它会发现它们正常 xcode。这是我如何使用代码中资源文件的示例:

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

有人有任何想法,为什么要双击Xcode刚创建的.App与从Xcode运行它的结果不同?

也不确定这是否是问题的一部分,但是我必须从.app文件(appname.app/contents/resources/resources/saves/saves/1.svd)引用资源文件夹似乎很奇怪。我希望这条路径相对于这样的.app/contents/macos中的可执行文件(../resources/saves/1.svd),但这也无法正常工作。

我有类似的问题,花了一些时间研究我最终使用苹果对象的不同选项。我需要获取资源文件夹:

#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