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
如何在运行时获取 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