如何在运行时检查Mac OS X版本

Par*_*fna 4 macos cocoa objective-c nsapplication osx-elcapitan

我使用下面的代码在运行时检查OS X版本.

if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_10)
{
    /* On a 10.10.x or earlier system */
}
Run Code Online (Sandbox Code Playgroud)

但是这个条件在10.10.4 OS X上返回false.我正在使用Xcode 6.3.2.

在此输入图像描述

根据适用于OS X v10.11的AppKit发行说明,它应该可以工作.

if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_9) {
  /* On a 10.9.x or earlier system */
} else if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_10) {
  /* On a 10.10 - 10.10.x system */
} else {
  /* 10.11 or later system */
}
Run Code Online (Sandbox Code Playgroud)

pki*_*kis 7

从Xcode 9.0开始,您可以使用下面的代码.参考Apple文档.

迅速

if #available(macOS 10.13, *) {
      // macOS 10.13 or later code path
} else {
      // code for earlier than 10.13
}
Run Code Online (Sandbox Code Playgroud)

Objective-C的

if (@available(macOS 10.13, *)) {
      // macOS 10.13 or later code path
} else {
      // code for earlier than 10.13
}
Run Code Online (Sandbox Code Playgroud)


Par*_*fna 0

更新:

使用#define NSAppKitVersionNumber10_10_Max 1349

老的:

从10.11 SDK开始

#define NSAppKitVersionNumber10_7_2 1138.23
#define NSAppKitVersionNumber10_7_3 1138.32
#define NSAppKitVersionNumber10_7_4 1138.47
#define NSAppKitVersionNumber10_8 1187
#define NSAppKitVersionNumber10_9 1265
#define NSAppKitVersionNumber10_10 1343
#define NSAppKitVersionNumber10_10_2 1344
#define NSAppKitVersionNumber10_10_3 1347
Run Code Online (Sandbox Code Playgroud)

对于 10.10.4 它1348.0(来自 NSLog 输出)

它们增加了 10.10.x 常量的小数部分。

解决方法是使用10.11 上的CFBundleVersion值。/System/Library/Frameworks/AppKit.framework/Resources/Info.plist

if (NSAppKitVersionNumber < 1391.12)
{
    /* On a 10.10.x or earlier system */
}
Run Code Online (Sandbox Code Playgroud)

注意:我的 OS X 10.11 构建版本是 15A244a。如果有人第一次构建,请更新 if 条件中的值。