尝试将CoreGraphics与MacRuby一起使用时出现运行时错误

时间:2012-12-29 05:41:12

标签: xcode macos cocoa core-graphics macruby

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

 @context = NSGraphicsContext.currentContext.graphicsPort

抛出此错误:

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

我可以解除引用NSGraphicsContext.currentContext就好了,但是currentContext.graphicsPort在运行时失败了。

从一些随机的谷歌来看,似乎MacRuby没有正确链接到CoreGraphics。我尝试明确地添加ApplicationServices.framework,但这没有帮助。为了增加混乱,在我朋友的几乎相同的设置上刚刚检查出来的确切的一些项目工作正常,所以问题可能在于我的系统配置而不是项目设置。

之前是否有人遇到此问题,并可提供一些建议?

1 个答案:

答案 0 :(得分:2)

好的,经过@jballanc IRC客户端#macruby的大量帮助后,我们确定这是Mountain Lion特有的问题,这是由CoreGraphics打包方式的一些变化引起的。最新的XCode。如果你遇到它,这是如何解决它:

  1. 使用以下内容重新生成CoreGraphics和ApplicationServices的Bridge Support文件:

    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。

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