Xcode - 使用SDK 10.9链接ApplicationServices.framework会导致10.7不兼容

时间:2013-11-26 01:36:32

标签: xcode macos cocoa core-graphics osx-lion

我在10.7上运行Cocoa应用程序时遇到了麻烦,尽管看起来我正在采取正确的步骤。这是对我正在做什么和看似错误的描述:

我正在使用XCode 5.0.2和SDK 10.9的10.8机器上构建,部署目标为10.7。我的一个动态库使用了一些CoreGraphics函数,因此我将该库与ApplicationServices.framework相关联。 (据我所知,在10.8之前,CoreGraphics包含在ApplicationServices中,因此我无法直接链接CoreGraphics或者我会遇到问题。)

构建之后,我使用CoreGraphics的库直接引用了/System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics中的CoreGraphics.framework,但该路径在10.7上不存在。当我在10.8+上运行应用程序时,它运行正常,但在10.7上,它试图加载不存在的框架。

我的(hacky)解决方案:

在我的头撞了一会儿之后,我决定去核并添加一个新的构建阶段,将我的库中的CoreGraphics引用更改为与ApplicationServices.framework下面的10.7兼容的路径。我的脚本执行以下操作:

install_name_tool -change /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics /System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics myLibrary.dylib

这很有效,但它似乎是一个愚蠢的黑客。有没有人见过这个?

1 个答案:

答案 0 :(得分:0)

您必须对其进行测试,但也许只需链接ApplicationServices.framework即可。

否则,您应该能够使用弱链接:在链接二进制文件库构建阶段中,将状态从必需更改为 Optimal < / strong>即可。有关弱链接的更多详细信息,请参见here