在 Xcode 上包含来自添加框架的标头

Posted

技术标签:

【中文标题】在 Xcode 上包含来自添加框架的标头【英文标题】:Include Headers from added frameworks on Xcode 【发布时间】:2013-03-10 07:19:01 【问题描述】:

我想使用glewcg 等一些框架,所以我手动添加了

通过右键单击项目来为我的项目添加所需的框架 -> 将文件添加到...

并选择正确的框架。问题是,当我尝试包含头文件时,

Xcode 找不到它们中的任何一个。希望这张图能帮助理解:

还有:

给出的错误是针对glew 框架的,但它也发生在Cg 上。

如您在左侧所见,已添加所需的框架。

知道如何包含这些标题吗?

尝试手动添加头文件后,出现架构错误:

我不知道这是否应该是这样的。 谢谢!

【问题讨论】:

我遇到了同样的问题并通过设置我必须将Build Settings -> Framework Search Paths 设置为$(SRCROOT) 来修复它(假设您的框架位于项目目录的根目录中)。 对于未来的搜索,另一个潜在的原因是您的项目中有一个重复的框架。 【参考方案1】:

在开始之前,删除框架和您在尝试使其工作时添加的所有文件。

然后,您必须在目标的Build Phases 中添加框架。然后进入Link Binary With Libraries 并从那里选择你的框架。

应该这样做。在每个 #import directive. 之后,您的标题应该可以自动完成 如果它不起作用(有时会发生),我可以为您提供其他步骤。

其他步骤:

在构建设置中转到您的项目设置:

用你的框架路径完成Framework Search PathsUser Header Search Path做同样的事情

然后,它应该可以工作。如果没有,您需要在 #import 指令中添加标题的完整路径。示例:

#import "/path/to/my/header.h"


Apple 的文档available here states:

    在项目导航器中,选择 你的项目 选择您的目标 选择“构建阶段”选项卡 打开“将二进制文件与库链接” 扩展器 点击“+”按钮 选择您的框架 (可选)拖放添加的 框架到“框架”组

【讨论】:

@Itzik984 我已经添加了额外的步骤。您的框架是否位于/Library/Frameworks 他们在/System/Library/Frameworks 下可以吗?还是应该把它们移到那里? @Itzik984 我想没关系。但是你可能需要告诉 Xcode 哪个文件夹是框架,哪个文件夹是头文件。我最近有一个类似的问题。 Xcode 不会像以前那样使用 /Library/Frameworks 中的链接框架进行编译。实际上,它找不到标题。在 #import 指令中添加完整路径解决了它。后来,我将该文件夹添加到 User Header Search Paths,这样我就不需要使用完整路径了。 我刚刚遇到了同样的问题,可以在将搜索路径设置为 $(SRCROOT) 和非递归时解决它!!!使用递归自动完成无法找到它,但是当设置为非递归自动完成时,找到子文件夹,然后找到头文件。【参考方案2】:

在我的例子中,我为 Target 添加了 Framework Search Paths,但它应该添加到 Project

Always Search Users Path 也应该是 yes

【讨论】:

目前已弃用【参考方案3】:

对于那些在添加框架后自动完成失败的人。

我曾经通过转到Build Phases 并选择Link Binary with Libraries 选项来添加框架。现在在 XCode 6.1 中,虽然项目构建良好,但 XCode 中的自动完成功能不起作用。

那么需要做的是:

    Project NavigatorLink Binary with Libraries 中删除已添加的框架。 只需通过 XCode 中的 File -> Add Files to 选项将框架添加到项目中。

自动完成将开始工作。

【讨论】:

我正在尝试包含我自己构建的框架。出于某种原因,将其添加到构建阶段链接二进制文件与库部分的项目中不起作用,但只需通过将文件添加到项目中添加框架即可。这次真是万分感谢。 (已投票) 谢谢!这是唯一的解决方案......只是想知道为什么做那些显而易见的事情总是那么难......【参考方案4】:

就我而言,外部框架已随 Windows 一起下载并添加到项目中。然后它被转移到 OSX,在那里构建了 Xcode 项目并且外部框架没有正确加载。我猜这是因为 Windows 将框架文件夹更改为常规文件夹,然后 OSX 遇到了麻烦。

我的解决方案是简单地用 OSX 下载框架并将其拖到 XCode 项目的框架文件夹中。

【讨论】:

【参考方案5】:

在我的情况下,我必须更新框架版本,所以我只是替换了文件系统中的 .framework,然后我得到了你在问题中提到的错误。

删除框架并重新添加它,使用搜索路径和所有其他建议都没有帮助。

最终,清理构建文件夹成功了:

从 xcode 菜单中选择“Product”,按住选项键并点击:“Clean Build Folder”。

之后,我成功构建并运行了该项目。

【讨论】:

以上是关于在 Xcode 上包含来自添加框架的标头的主要内容,如果未能解决你的问题,请参考以下文章

XCode3 - 库搜索路径和项目框架之间的关系

ResearchKit 标头无法在 Xcode 中导入

如何在 Xcode 中将标头放入框架中?

XCode6:收到错误“在框架模块中包含非模块化标头”

Xcode11 Swift5 框架不包含模拟器的头文件,仅适用于 arm64 和 armv7a

在 Xcode 4 中添加框架 [重复]