为什么从 Swift (Xcode) 调用时 fstream 不起作用?



我正在进行一个Xcode项目,该项目将渲染与Metal和OpenGL进行比较。

它被分为两个不同的目标,因此Metal部分在Swift中,OpenGL部分在C++中。

我制作了一个用于模型加载的C++类,供他们两个访问。OpenGL(C++(部分直接访问它,Metal部分有一些Objetice-C++代码可以桥接,因此它可以与Swift配合使用。ModelLoader构造函数看起来像这样:

ModelLoader(const char*  modelPath)
{
fstream modelFileStream(modelPath);
string line;
if (modelFileStream.is_open())
{
while (getline(modelFileStream, line))
{
// obj parsing
}
modelFileStream.close();
}
else
{
cout << "Failed to open model file at path: " << modelPathString << endl;
}
}

问题是,当我直接在OpenGL(C++(目标上使用它时,它工作得很好,但当我在Metal(Swift(目标中使用时,它无法成功打开文件并打印";无法打开路径为(参数中使用的路径("的模型文件;。

我已经尝试过使用相对路径(通过编辑方案>使用自定义工作目录(和绝对路径。两者都适用于OpenGL版本,但不适用于Metal版本。还尝试在ModelLoader构造函数上直接对路径进行硬编码,但一无所获。

与Objective-C++的桥接似乎也很好,因为它打印了消息。打印在两个目标中的路径完全相同,因此这不是桥接完成的。

那到底发生了什么?

禁用"应用程序沙盒";在权益方面解决了这一问题。

最新更新