Search code examples
macosswiftcocoabrightness

Adjust screen brightness in Mac OS X app


I want to control the brightness of the main-screen within my Mac OS X app (like the F1/F2 buttons). In iOS, there's something like this:

UIScreen.mainScreen().brightness = CGFloat(0.5)

In OSX we have NSScreen, which is nice to find out what the main-screen is, but it misses the .brightness method.

So how can I adjust the monitor brightness using Swift on OSX?


Solution

  • There's no such nice API for doing this on OS X.

    We have to use IOServiceGetMatchingServices to find "IODisplayConnect" (the display device) then use the kIODisplayBrightnessKey to set the brightness:

    func setBrightnessLevel(level: Float) {
    
        var iterator: io_iterator_t = 0
    
        if IOServiceGetMatchingServices(kIOMasterPortDefault, IOServiceMatching("IODisplayConnect"), &iterator) == kIOReturnSuccess {
    
            var service: io_object_t = 1
    
            while service != 0 {
    
                service = IOIteratorNext(iterator)
                IODisplaySetFloatParameter(service, 0, kIODisplayBrightnessKey, level)
                IOObjectRelease(service)
    
            }
    
        }
    }
    
    setBrightnessLevel(0.5)