Cocoa: Get Darwin version at runtime

1.2k views Asked by At

How can I get the darwin version at runtime? I know that I can get the macOS or iOS version using [[NSProcessInfo processInfo] operatingSystemVersion], but I want the Darwin version.

There are tables on the internet linking macOS and iOS releases to a darwin version, but i want to implement this future-proof.

2

There are 2 answers

0
Ken Thomases On BEST ANSWER

Use the uname() POSIX/BSD library function. You declare a variable of type struct utsname and pass in its address. The release field of the struct will contain a C string with the Darwin version number, such as "16.3.0". If you want the individual components as integers, you'll have to parse it yourself.

0
hbk On

adding code to @Ken Thomases response

  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)))
  }

Sample response:

19.3.0

enter image description here

And here a list of available versions