我正在尝试在OSX 10.8上构建MacRuby 0.12项目。问题似乎是此行:
@context = NSGraphicsContext.currentContext.graphicsPort
抛出此错误:
unrecognized runtime type `{CGContext=}' (TypeError)
我可以很好地取消引用
NSGraphicsContext.currentContext
,但是currentContext.graphicsPort
在运行时失败。从一些随机的Google搜寻看来,MacRuby似乎没有正确链接到CoreGraphics。我尝试显式添加ApplicationServices.framework,但这没有帮助。更令人困惑的是,在我朋友的几乎完全相同的设置中刚检出的某些项目确实可以正常工作,因此问题可能出在我系统的配置而不是项目设置上。
以前有人遇到过,可以提供一些建议吗?
最佳答案
好的,因此在@jballanc
IRC客户端上#macruby
的大量帮助之后,我们确定这是特定于Mountain Lion的问题,是由于对CoreGraphics在最新XCode中的打包方式进行了一些更改而引起的。如果遇到问题,请按以下方法解决:
使用以下方法为CoreGraphics和ApplicationServices重新生成Bridge支持文件:gen_bridge_metadata --64-bit -f /System/Library/Frameworks/CoreGraphics.framework/ -o /System/Library/Frameworks/CoreGraphics.framework/Resources/BridgeSupport/CoreGraphics.bridgesupport
在Mountain Lion中,您需要从MacRuby代码中显式加载CoreGraphics框架-但在Mountain Lion之前的版本中,这样做将崩溃。因此,您将需要进行以下检查:framework 'CoreGraphics' if (/12/ =~ `uname -r`) == 0
根据您的环境,您可能需要也可能不需要在XCode项目设置中显式链接到ApplicationServices.framework。
完成上述所有操作后,我和与我使用Snow Leopard的伙伴可以共享相同的代码库,并使它对我们俩都有效。