Cocoa: 在运行时获取 Darwin 版本

Cocoa: Get Darwin version at runtime

如何在运行时获取 darwin 版本? 我知道我可以使用 [[NSProcessInfo processInfo] operatingSystemVersion] 获得 macOS 或 iOS 版本,但我想要 Darwin 版本。

Internet 上有 are tables 将 macOS 和 iOS 版本链接到 darwin 版本,但我想实现这个面向未来的版本。

使用uname() POSIX/BSD库函数。您声明一个 struct utsname 类型的变量并传入其地址。该结构的 release 字段将包含带有 Darwin 版本号的 C 字符串,例如“16.3.0”。如果您希望将各个组件作为整数,则必须自己解析它。

向@Ken Thomases 回复添加代码

  var systemInfo = utsname()
  uname(&systemInfo)
  let machineMirror = Mirror(reflecting: systemInfo.release)
  let darvinVersionString = machineMirror.children.reduce("") { identifier, element in
    guard let value = element.value as? Int8,
      value != 0 else {
        return identifier
    }

    return identifier + String(UnicodeScalar(UInt8(value)))
  }

响应示例:

19.3.0

here a list of available versions