Xcode 第二次构建后不再找到框架

Xcode framework no longer found after second build

自从我升级到Xcode11后,我开始的每一个包含框架的新项目在第二次构建项目后都无法再编译。

例如使用此命令包括 SDL2:

#include <SDL2/SDL.h> 

将导致此错误:

'SDL2/SDL.h' file not found

项目第二次编译后。

在Xcode 10 中创建的项目在Xcode 11 中正常工作。 我尝试更改框架的嵌入选项,但没有设置有效。此错误发生在所有 Xcode 11 版本 (0 - 2.1) 中。 我使用的是 macOS 版本 10.14.6.

为什么会发生这种情况或如何解决?

SDL2 不是框架。相反,它是静态库或动态库。当然,除非您正在为 SDL2 使用其他一些定制框架。

您通常会遇到两种情况:

  1. SDL2安装在默认位置如/usr/local
  2. SDL2 安装在自定义位置(我就是这样做的)

我猜你在做前者。如果是这种情况,可能是 Xcode 11 的默认系统 header 搜索路径以某种方式更改为不包括 /usr/local(或您安装它的位置)。

要解决此问题,您应该首先找到您的 SDL2 库。特别是包含文件所在的位置。

然后在构建设置中,转到搜索 Paths:System Header 搜索路径并输入该路径。

请记住 #include 使用 SDL2 作为路径的一部分,因此您不想将 SDL2 部分放在路径中。这是我的目录结构的示例。所以我的路径条目是 $(PROJECT_DIR)/3rdParty/SDL2/include。您可以在我的项目目录中看到,我有一个 3rdParty 目录,用于保存我集成到项目中的第 3 方库。

您正在使用尖括号进行包含,这利用了系统路径。

请注意,您可能还需要更新 link 针对 SDL2 的方式(即它可能无法找到它)。

我在 XCode 11.1 中遇到了同样的问题。我发现我需要在 Build Settings/Search Paths to:

中添加 Header Search Path
/Library/Frameworks/SDL2.framework/Versions/A/Headers

然后就成功了。好像改路径了。

我终于找到了解决办法。我将此屏幕截图中带有菜单的框架添加到我的项目中:

在 Xcode 9 和 10 中,这与使用此菜单添加框架相同:

但现在在 Xcode 11 中,这已不一样了。使用第一个菜单添加框架会将框架从其原始路径复制到项目的构建文件夹中,但由于某些原因 Xcode 而不是 复制 Headers框架中的文件夹。我认为这是一个错误,但似乎他们至少没有将其修复到 Xcode 版本 11.2.1

所以现在解决这个问题的方法是使用第二张图片中的 Build Phases 菜单添加框架。