Previous to iOS 9, the most reliable method of determining whether an external keyboard is connected was to listen for UIKeyboardWillShowNotification and make a
You could try checking for peripherals that are advertising services using Core Bluetooth
CBCentralManager *centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[centralManager scanForPeripheralsWithServices:nil options:nil];
And you should implement the delegate:
- (void)centralManager:(CBCentralManager * _Nonnull)central
didDiscoverPeripheral:(CBPeripheral * _Nonnull)peripheral
advertisementData:(NSDictionary * _Nonnull)advertisementData
RSSI:(NSNumber * _Nonnull)RSSI{
}