Get user's preferred temperature setting on macOS

I am trying to read the system settings of a custom dial for a temperature unit (Celsius / Fahrenheit). I tried to get this data using NSLocale, but I can't find any temperature setting data there.

Can this data even be read?

Thank!

+3


source to share


2 answers


The official API is described in the Settings Utility :

let key = "AppleTemperatureUnit" as CFString
let domain = "Apple Global Domain" as CFString

if let unit = CFPreferencesCopyValue(key, domain, kCFPreferencesCurrentUser, kCFPreferencesAnyHost) as? String {
    print(unit)
} else {
    print("Temperature unit not found")
}

      



If you're wondering how I found it, I used the utility defaults

in the terminal:

> defaults find temperature
Found 1 keys in domain 'Apple Global Domain': {
    AppleTemperatureUnit = Fahrenheit;
}
Found 1 keys in domain 'com.apple.ncplugin.weather': {
    WPUseMetricTemperatureUnits = 1;
}

      

+4


source


It's a bit of a hack, but you can do it like this on macOS 10.12+ and iOS 10+:

// Create a formatter.
let formatter = MeasurementFormatter()

// Create a dummy temperature, the unit doesn't matter because the formatter will localise it.
let dummyTemp = Measurement(value: 0, unit: UnitTemperature.celsius)

let unit = formatter.string(from: dummyTemp).characters.last // -> F

      



This outputs "F" in my playground, which is the US locale by default. But change your language, or use that code on the device, and either way, you get a local temperature measurement system - or a string for it.

+2


source







All Articles