4

如果我运行这个命令:

file /System/Library/Frameworks/GameKit.framework/GameKit

我得到:

/System/Library/Frameworks/GameKit.framework/GameKit: Mach-O 64-bit dynamically linked shared library x86_64

这相当于我的 iMac(一个全新的)缺少 x86 版本的 GameKit。所以我的 x86 Mac 应用程序(它是一个 C# Xamarin.Mac 应用程序)在引用 GameKit 时崩溃。

有谁知道这是否会成为未来 Mac 的持续问题?或者这是我的机器上缺少的Apple错误?

4

1 回答 1

2

一切都指向 Apple 在某个时候弃用 32 位(架构 i386)代码。这是因为他们利用从 32 位代码切换到 64 位代码的优势来为 Objective-C 运行时添加功能,使 64 位运行时功能更加丰富。

我对此没有任何确认,但从 PowerPC 转换的处理方式以及 64 位代码如何弃用大量古老技术来看,这可能并不遥远。

虽然我的机器上确实有 32 位 GameKit,但如果 OS X 的未来版本可能不包含 32 位代码,我一点也不感到惊讶。由于所有包含 GameKit 的 Mac 都必须能够运行 64 位代码(Mountain Lion 的要求),我能给出的最佳建议是添加 64 位版本的应用程序。我不知道 MonoMac 是否支持 64 位代码,但这是你应该去的方向。

我怀疑操作系统更新(例如即将推出的 10.8.3)可能会安装恰好包含 32 位代码的 GameKit 版本。或者它可能会为我们其他人删除 32 位代码。但我绝对不会指望 Apple 维护或向 32 位代码添加新功能,正是因为所谓的 32 位 Objective-C无法支持他们喜欢的许多功能(例如 ARC 或合成 ivars)在不破坏二进制兼容性的情况下运行时。

于 2012-12-19T15:46:50.630 回答