An issue is that it duplicates peripheral services after Bluetooth is turned off/on. Calling removeAllServices of CBPeripheralManager, fixes that.

You can also use IOBluetoothDevice API to iterate through connected Central devices. We found situations when after starting the peripheral app, the central app running on an iPhone would not establish Bluetooth LE communication. We were able to use IOBluetoothDevice to force disconnect all connected devices at app start on the Mac, to skirt the issue.