Various ‘macOS’-oriented Tools and Utilities
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

47 lines
2.1 KiB

#' Retrieve macOS Operating System Version Information
#'
#' @return data frame (tibble)
#' @export
sw_vers <- function() {
res <- sys::exec_internal("sw_vers")
if (length(res$stdout) == 0) {
stop('Error retrieving macOS version info. Are you running on macOS?', call.=FALSE)
}
out <- rawToChar(res$stdout)
purrr::map_dfc(strsplit(out, "\n")[[1]], ~{
.x <- strsplit(.x, "\t")[[1]]
as.list(purrr::set_names(.x[2], gsub(":", "", .x[1])))
}) -> out
case_when(
grepl("^10\\.0$|^10\\.0\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.0 (Cheetah)",
grepl("^10\\.1$|^10\\.1\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.1 (Puma)",
grepl("^10\\.2$|^10\\.2\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.2 (Jaguar)",
grepl("^10\\.3$|^10\\.3\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.3 (Panther)",
grepl("^10\\.4$|^10\\.4\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.4 (Tiger)",
grepl("^10\\.5$|^10\\.5\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.5 (Leopard)",
grepl("^10\\.6$|^10\\.6\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.6 (Snow Leopard)",
grepl("^10\\.7$|^10\\.7\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.7 (Lion)",
grepl("^10\\.8$|^10\\.8\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.8 (Mountain Lion)",
grepl("^10\\.9$|^10\\.9\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.9 (Mavericks)",
grepl("^10\\.10$|^10\\.10\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.10 (Yosemite)",
grepl("^10\\.11$|^10\\.11\\.[0-9]*$", out$ProductVersion) ~ "Mac OS X 10.11 (El Capitan)",
grepl("^10\\.12$|^10\\.12\\.[0-9]*$", out$ProductVersion) ~ sprintf("macOS Sierra (%s)", out$ProductVersion),
grepl("^10\\.13$|^10\\.13\\.[0-9]*$", out$ProductVersion) ~ sprintf("macOS High Sierra (%s)", out$ProductVersion),
grepl("^10\\.14$|^10\\.14\\.[0-9]*$", out$ProductVersion) ~ sprintf("macOS Mojave (%s)", out$ProductVersion),
grepl("^10\\.15$|^10\\.15\\.[0-9]*$", out$ProductVersion) ~ sprintf("macOS Catalina (%s)", out$ProductVersion),
TRUE ~ "Unknown"
) -> out$ProductFullName
out$Hardware <- system("uname -m", intern=TRUE)
out$KernelVersion <- system("uname -r", intern=TRUE)
out
}