1

我正在尝试在 OSX 10.8 上构建一个 MacRuby 0.12 项目。问题似乎是这一行:

 @context = NSGraphicsContext.currentContext.graphicsPort

抛出此错误:

unrecognized runtime type `{CGContext=}' (TypeError)

我可以NSGraphicsContext.currentContext很好地取消引用,但currentContext.graphicsPort在运行时失败。

从一些随机的谷歌搜索来看,MacRuby 似乎没有正确链接到 CoreGraphics。我尝试显式添加 ApplicationServices.framework,但这没有帮助。更令人困惑的是,在我朋友几乎相同的设置上新签出的某些项目工作得很好,所以问题可能出在我的系统配置而不是项目设置上。

有没有人遇到过这种情况,可以提供一些建议吗?

4

1 回答 1

2

@jballanc好的,经过 IRC 客户端的大量帮助后#macruby,我们确定这是一个特定于 Mountain Lion 的问题,原因是 CoreGraphics 在最新 XCode 中的打包方式发生了一些变化。如果您遇到它,以下是如何解决它:

  1. 使用以下内容为 CoreGraphics 和 ApplicationServices 重新生成 Bridge 支持文件:

    gen_bridge_metadata --64-bit -f /System/Library/Frameworks/CoreGraphics.framework/ -o /System/Library/Frameworks/CoreGraphics.framework/Resources/BridgeSupport/CoreGraphics.bridgesupport

  2. 在 Mountain Lion 中,您需要从 MacRuby 代码中显式加载 CoreGraphics 框架——但在 Mountain Lion 之前的版本中,这样做会崩溃。因此,您需要以下检查:

    framework 'CoreGraphics' if (/12/ =~ `uname -r`) == 0

  3. 根据您的环境,您可能需要也可能不需要在 XCode 项目设置中显式链接 ApplicationServices.framework。

完成上述所有操作后,我和我使用 Snow Leopard 的伙伴可以共享相同的代码库,并让它对我们双方都有效。

于 2013-01-15T00:34:35.293 回答