Swift Bluetooth HID Keyboard Emulator
After the release of macOS Catalina (10.15), I‘m unable to pair devices and publish HID services using Bluetooth Classic. 🤷♂️
Bluetooth LE (Low Energy) as provided by the “Core Bluetooth” APIs explicitly disallows publishing HID GATT service (0x1812) since macOS ~10.11.
- Run the Xcode project
From your phone/tablet:
- Go to Bluetooth settings
- If already paired with desktop, then "Forget the Device"
- Connect to your dekstop.
- Start Typing!
-
BTKeyboard.swift
Creates a Bluetooth SDP service using SerialPortDictionary.plist and listens for incoming connections.
-
KeyCodes.swift
Converts virtual key codes (the number assigned to keys according NSEvent) to HID key codes (as specified in the USB specification).
-
AppDelegate.swift
Initializes BTKeyboard then uses CGEventTap to get keyboard events and send them to the connected Bluetooth device.
-
SerialPortDictionary.plist
A service record with a Human Interface Device Profile (HID). The HID profile describes a keyboard and the report used is outlined in HIDReportDescriptor.txt
-
HIDReportDescriptor.txt
The parsed HIDReportDescriptor outlines how the bytes are described for a generic keyboard.