【问题标题】:How backwards compatible are the various versions of Mac OSX? (Xcode C++不同版本的 Mac OSX 的向后兼容性如何? (Xcode C++
【发布时间】:2020-01-26 00:17:23
【问题描述】:

我正在开发一款使用 C++ 并依赖 OpenGL 的旧功能的游戏。

我主要在 Windows 机器上进行编程,现在正在考虑扩展到 Linux 和 Mac OS。作为个人挑战,我想让我的软件尽可能向后兼容并支持尽可能多的操作系统。使用 Windows,我已经能够维持对低至 Windows 95 的支持(使用 Visual Studio 在此过程中给我带来了一些麻烦,但仍然可以解决)。但是,我对 Mac OS 几乎一无所知,直到现在我自己从未使用过它。考虑到我的软件在 Windows 95 上运行,它当然不需要任何高级功能。

旧版本的 Xcode 似乎支持的最低 Mac OS 版本是 10.1.x。如果我要为这个版本的 Mac OS 编写软件,它会在更现代的 Mac OS 版本上运行吗?我读到有一些软件补丁可以支持某些旧版本的 MacOS 软件,但我不希望这样给最终用户带来不便。 我不介意构建两个不同版本的软件(例如,旧版和现代启动器),但必须构建五个或十个不同版本的软件将是一个巨大的痛苦,如果可能的话,我宁愿避免这种情况。

对于我在该领域缺乏知识,我深表歉意,我自己的研究只产生了非常有限的信息,我不想浪费数周时间在徒劳无益的努力上。

TL;DR:我想用 Xcode (C++) 为 Mac OSX 编写软件,以支持尽可能多的操作系统版本。如果我的目标是 Mac OS 版本 10.1,我可以期望它在现代版本的 Mac OS 上运行吗?如果不是,要支持尽可能多的 Mac OS 版本需要付出多少努力?

【问题讨论】:

  • Mac OS X 现在是 macOS,让您了解向后兼容的情况。

标签: c++ xcode macos backwards-compatibility


【解决方案1】:

您将不得不决定要在哪里切断支持,或者您将不得不在不同的专门构建的构建环境中构建应用的多个版本。

现代 macOS (10.15) 仅支持 64 位 x86-64,对 32 位应用程序的支持为零。如果您在 10.15 上构建,您甚至无法构建 32 位映像。如果你这样做了,它将链接到旧版本操作系统上不存在的库。

Mac OS X 10.6 是最后一个发布的 32 位 x86 版本,但也是该操作系统的第一个 64 位版本,因为它代表了向 64 位的过渡。它也是最后一个发布的 PowerPC 版本。

如果你想支持 PowerPC 机器,这是 10.1 天的唯一选择,你需要一个兼容的系统来构建它。

在生态系统方面,大多数 Mac 用户都能够运行当前版本的操作系统。 2012+ 的任何东西仍然能够获得当前的操作系统版本,这是很多硬件。在此之前的任何东西都是 32 位和 PowerPC 硬件的混合体,尽管在野外你不会看到很多人使用这样的系统。

简而言之,10.15 很容易,10.14 和 10.13 不会很难。超出这个范围的任何事情都会有不同程度的挑战,但是超过 10.6 的事情会变得超级复杂。

估算受欢迎程度的一种方法是Steam Hardware Survey,其细分如下所示:

  • 10.15:31.6%
  • 10.14:34.1%
  • 10.13:14.8%
  • 10.12:5.7%
  • 10.11:3.7%

所以好消息是在 10.13 之后情况急剧下降,到 10.11 时运行这么旧的操作系统的用户已经不多了。

【讨论】:

  • 就像我提到的,我对旧 OSX 版本的定位比任何事情都更加个人挑战。我怀疑还有很多人仍然在运行 Windows 95,但它仍然是一个有趣的实验。根据您所描述的,由 OSX 10.6 构建的程序在 10.7 到 10.14 版本上成功运行的可能性有多大?是不是有点像 Windows XP,它的程序在 Windows 7 上运行起来几乎没有什么问题,还是在 OSX 上的兼容性变幻无常?
  • 这真的很难说,因为同一操作系统的不同迭代改变了它们向后/向前兼容的方式,这对于多年来生产的各种 XCode 版本来说是双倍的。我认为您不必对代码本身进行大量更改,但您需要大惊小怪地设置构建环境so
  • Windows 代码库完全是为了向后兼容,一些来自 Windows 1.0 的应用程序可以继续正常工作,如果需要,您甚至可以运行 16-bit apps in Windows 10。 macOS 有不同的理念,Apple 会定期在某些兼容性存根上烧毁灌木丛并清理房屋。除非重新编译 64 位,否则 2012 年的 Mac 应用程序今天可能无法运行,但 1992 年的 Windows 应用程序可能运行良好。
  • @tadman AIUI 支持从 NeXTStep 继承的胖二进制文件,所以它从一开始就存在于 Mac OS X 中。 Apple 只是在 Intel Macs(运行 10.4)发布后才开始使用它。
  • @tadman BTW,早期版本的 Mac OS X 支持 Mach-O 可执行格式(继承自 NeXTStep)和 Preferred Executable Format (PEF) aka Code Fragment Manager (CFM) executables(继承自 pre-X MacOS)和 PEF 也 支持“胖”二进制文件(用于 68K 和 PPC)。请参阅Mac OS Runtime Architectures - For System 7 Through Mac OS 9 的第 7 章。但我认为 PEF 和 Mach-O 格式不可能结合起来。
猜你喜欢
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 2011-10-28
  • 2017-05-21
  • 1970-01-01
  • 2021-07-22
相关资源
最近更新 更多