2

在构建任何使用未内置于核心的任何框架(即某些第三方框架)的 Mac OS X 应用程序时,当我查看框架时,似乎很常见的问题是框架显示为红色在 XCode 4.5 中。

有两个最常见的位置可以显示为红色,一个在项目导航器窗格(左侧)中,一个在构建阶段区域。第三个位置,在 Copy Files 区域,通常显示为红色。这三个都有不同的原因。

以下是所有三个地方都显示为红色时的样子:

在此处输入图像描述

我们中间观察者的线索:红色部分后面的一些灰色文本表明 XCode 可能错误地在 XCode.app 包中寻找有问题的框架。另请注意,显示的框架没有任何框架图标,仅显示上图中无效框架的占位符图标。

如果根本找不到框架,那么在我构建时,无法导入框架的头文件,所以我得到一个“词法或预处理器问题”。解决方案通常是修复框架搜索路径。然而,即使这似乎是正确的,我仍然经常得到红色框架。

有时,图标是红色的,但是,框架搜索路径运行良好,编译工作正常(#import <Thingy/Thingy.h>工作正常,我没有得到任何词法或预处理器问题),但项目不会链接或崩溃时run,因为框架在编译阶段被准确引用,而不是在链接或复制文件阶段。

如果 XCode 无法导入框架内的头文件,下面是一个示例:

在此处输入图像描述

这个问题应该是通用的,并且对将来在框架列表中看到“红色”框架的任何人都有用。是的,我已经去供应商那里向供应商寻求有关他们框架的帮助,这应该是第一步。但是,我觉得“XCode 以红色显示框架”令人困惑,它值得一个普遍有用的答案,因此这个问题。另外,我有理由相信,在这种情况下,供应商的安装程序工作得很好,这是我机器上的一个本地问题,其他人将来可能会遇到并且可能希望帮助理解和修复。

扯掉头发后,我发现我可以通过将红色显示的框架复制到其中来解决这个问题,/Applications/Xcode.app/Contents/Developer/Library/Frameworks但这可能不是正确的方法。这样做似乎是错误的。如果我将位于 /Developer/VendorName 中的框架复制到 xcode 应用程序包的库/框架中,我可以避免编译器找不到框架。

第三方框架当前自动安装到下面的文件夹中,该文件夹/Developer以制作框架的公司命名。XCode 是否应该自动搜索所有文件夹/Developer并以某种方式找到这些框架?
目前我在猜测,不,它不能,所以 XCode 可能必须每次都准确地被告知找到这个第三方框架的路径

我无法找到有关“Xcode 如何查找框架”的 Apple 文档。这里有一个问题就是这么问的,但答案都与 GCC 标头搜索路径有关,而不是 Xcode 如何查找框架和构建该搜索路径。

XCode 4.5 搜索哪些文件夹来定位库?/Developer即使 XCode 4.5 本身不再存在,是否仍在搜索该文件夹/Developer

当要为 Mac OS X 客户端使用安装第三方框架时,应该将其安装到哪里,以及如何检查安装程序是否正常工作?是否有一些命令行调用可以列出 XCode 可见并安装在我的系统上的所有可用框架?

脚注: 第二种工作方式是使用“添加其他”按钮来查找不在已知位置的框架,如果我使用它,那么我经常会遇到一个构建的项目,但在运行时仍然失败,因为复制文件功能没有找到和复制东西,因为使用加号按钮将框架添加到复制阶段似乎在 XCode 中被破坏了。不过有一个解决方法。我最初问的是如何工作,这样您就不需要使用 Add Other,但是,如果 Add Other 是第三方框架的唯一方法,那么,我仍然会遇到 Copy Files 功能无法正常工作的问题。我相信解决这个问题的方法是 XCode 项目自己的框架搜索路径没有为我的系统正确设置,而这就是我需要做的所有事情来解决这个特殊情况。简而言之,我 我想知道全局“框架搜索路径”是什么,它在哪里设置?还是只有 XCode 项目搜索路径,而不是全局框架搜索路径?如果我清理了 Framework 搜索路径,然后使用 Add Other 添加了新的框架,并小心地右键单击并从项目导航器窗格中删除所有 Red 项,如果我只使用鼠标拖放而不使用+ 按钮将框架添加到复制文件中,然后我可以在私有搜索路径位置获取框架来构建和复制。任何尝试使用 Copy Files 区域中的 + 按钮,并通过该对话框添加框架似乎都被某种奇怪的 XCode 错误阻止,在错误的位置添加框架,如第一张图片所示以上,

4

2 回答 2

2

是的,这是一个很好的问题。我一直想来就一个相关问题发表一篇文章:为静态库项目创建一个包,其中包含一个已编译的 momd 文件我只能通过使用该包将库项目嵌套在项目下才能开始工作。也就是说,嵌套在 Xcode 中,在文件系统级别它仍然显示为对等点。这与项目如何找到其他项目的产品有关。

同时,在你的具体问题上,我多年来在每个项目中都使用了 OCHamcrest,除非我在项目中实际安装框架文件,否则我一直无法让它可靠地工作。理想情况下,我想将 OCHamcrest 安装在 /Library/Developer/Frameworks 之类的位置之一,但尝试完成这项工作非常痛苦,简直是疯了。

我已经阅读了有关 Xcode 在哪里查找框架的文档,它位于 /Developer/Library/Frameworks 和 /Library/Frameworks 中。如果你往里看,你只会看到苹果的东西。另外,请记住 /Developer 曾经是一个单独的目录,直到 Xcode 4,所以它看起来并不那么愚蠢。现在,如果你决定去使用测试版,你会被搞砸的。我很确定当 Xcode 4.5 自我更新时,在应用程序中,它会复制框架。

我希望有人有更好的想法!

于 2013-01-22T16:27:53.800 回答
1

当我在 Xcode 项目中使用第三方框架时,对我有用的是在我的 Mac 上的 /Library/Frameworks 中安装框架,并按照您在脚注中描述的方式添加它们。如果项目构建失败,将 /Library/Frameworks 的搜索路径添加到框架搜索路径构建设置通常足以让项目构建。

如果您将框架复制到应用程序包并且复制不起作用,请将以下设置添加到运行时搜索路径构建设置:

`@loader_path/../Frameworks`

我不确定您是否需要开头和结尾的引号。我只是引用了我在 SDL 上写的一篇博客文章的评论,该文章来自发现 SDL 框架没有被复制到应用程序包的人。

关于在最终用户的机器上安装第三方框架的位置的问题,如果您的应用程序使用框架并且您希望用户能够运行您的应用程序而无需安装框架,请将框架复制到您的应用程序包。如果您需要在用户的 Mac 上安装框架,/Library/Frameworks 是第三方框架的常用位置。

于 2013-01-22T20:44:08.097 回答