为什么我的 Xcode 项目只有在工作区中时才能编译?

Why does my Xcode project compile only when it's in a workspace?

我有一个 Xcode 项目 P2,它是我有另一个项目 P1 的工作空间的一部分。

当我构建 P1 时,它会创建一个 Cocoa 触控框架。在 P2 中,我通过转到添加了 P1 创建的框架 常规-->Link 框架和库-->Select P1.framework.

然后我构建了 P2 项目,它通过集成在其中的 P1.framework 成功编译。所以,一切都很好。

现在我不再打开工作区并从工作区构建 P2 项目,而是通过单击 [=11] 直接打开 P2 项目=] 文件。我可以在其中看到 p1.framework 文件。

但是,现在当我尝试构建 P2 时,它给出了错误:

framework not found P1. clang: error: linker command failed with exit code 1 (use -v to see invocation).

谁能帮我理解为什么直接从 p2.xcodeproj 文件打开 P2 出错?

要使 p1.framework 可以正确链接,从 引用 p1.framework 的项目必须可见的。

这可能是因为您最初使用标准 Xcode UI 从工作区的 P1 项目中选择 p1.framework。 Xcode 不直接引用 p1.framework,而是 通过 P1 项目。这很有用,因为它允许您随意修改 P1(更改构建目标等),同时允许其他项目使用 p1.framework

一个更简单的类比可能是文件夹别名。这就像您通过文件夹别名引用文件,然后删除该文件夹。自然会出现错误。