You can override the flagsChanged() method of NSViewController and have your code like below to detect Fn key press and release in macOS: override func flagsChanged(with event: NSEvent) { if event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.function) { print("fn key pressed") } if event.modifierFlags.intersection(.deviceIndependentFlagsMask) == [] { print("fn key released") } } P.S. The above solution was derived from this answer on SOF. This solution woul...