如何知道该应用运行的Mac OS是什么?

Ped*_*ira 8 macos xcode cocoa objective-c osx-mountain-lion

我在一些项目中看到过类似的东西:

#if .....
    code...
#endif
Run Code Online (Sandbox Code Playgroud)

但我现在找不到它......
比方说,如果应用程序在10.8运行,应用程序会执行1项操作,如果不是应用程序执行其他操作.什么代码来检查它是否在10.8上运行?
谢谢.

Ste*_*her 23

你可能会问错误的问题.除非极少数情况下,您不应该关心用户正在运行的系统版本.相反,您应该检查您感兴趣的具体事物是否可用.

例如,如果Apple在Mac OS X 10.9中引入了您想要使用的MagicHologram类,则不会检查用户是否正在运行Mac OS X 10.9.而是检查MagicHologram类是否可用.如果是,您可以使用它.如果没有,它就不可用.它甚至不重要.也许他们正在跑10.8.但也许是五年之后,Apple决定完全放弃MagicHologram课程.

(另外,请记住,您需要弱连接到HologramKit,即提供MagicHologram类的库.)

同样,如果他们向NSString引入一个新方法,而不是检查操作系统版本,您将检查NSString是否知道新方法.

也就是说,NSApplication.h包含一个名为的外部常量NSAppKitVersionNumber.你可以将它与常数进行比较,比如NSAppKitVersionNumber10_7哪些(应该注意)是1138这样的数字,而不是10.7.这里只有少数几个适合的地方,主要是那些类是私有的和没有文档的,但在记录之前得到了重大改变,并成为SDK公共部分的一部分.此外,如果您想避免自那以后修复的特定错误,可能会有所帮助.

回顾一下:

  1. 检测个别类别和方法,这些类别和方法应涵盖99.44%的案例.
  2. 使用NSAppKitVersionNumberNSAppKitVersionNumber10_7涵盖那些类或方法检测对您而言的情况.
  3. 前两点涵盖所有正常情况.你不应该再进一步了.但是如果你必须有基于人性化版本的行为,请看下面的abarnert答案.这是获得它们的最佳方式.
  4. 不要使用operatingSystemVersionString,特别列出的解析不安全.

参考/更多信息:

  • SDK兼容性指南 "如果您希望应用程序针对特定版本或多个版本的iOS或Mac OS X,请阅读本文档."
    • 使用基于SDK的开发描述如何使用弱链接的类,方法和函数来支持在多个版本的操作系统上运行.


Mon*_*olo 12

一个快速的方法是:

if ( NSAppKitVersionNumber >= NSAppKitVersionNumber10_7 ) {

    // Do stuff for Lion or later
}
Run Code Online (Sandbox Code Playgroud)

更多这里.

您可以在NSApplication.h中看到所有可用的常量,您可以在Xcode中使用Open Quickly ...(Cmd-Shift O)来获取这些常量.

如果您如此倾向,头文件提供了一些令人惊讶的有趣的阅读材料.

  • 这样做的问题在于它并未涵盖Mac OS X的每个版本,并且没有办法在未来证明(例如,如果您尝试报告操作系统版本以进行诊断). (2认同)