import Foundation import CoreBluetooth let SERVICE_UUID: CBUUID = CBUUID(string: "76a3a3fa-b8d3-451a-9c78-bf5d7434d3cc") let CHARACTERISTIC_UUID: CBUUID = CBUUID(string: "bffe9d64-0ee6-472b-849c-ab98182bd592") final class ContentViewModel: NSObject, ObservableObject { @Published var isStateActive = false private var peripheralManager: CBPeripheralManager? override init() { super.init() if CBManager.authorization != .allowedAlways { print("Bluetooth Permission missing") return } peripheralManager = CBPeripheralManager(delegate: self, queue: nil) } private func setupServices() { let service = CBMutableService(type: SERVICE_UUID, primary: true) let characteristic = CBMutableCharacteristic(type: CHARACTERISTIC_UUID, properties: .write, value: nil, permissions: .writeable) service.characteristics = [characteristic] peripheralManager?.add(service) let data = [CBAdvertisementDataLocalNameKey: "Sample Service", CBAdvertisementDataServiceUUIDsKey: [SERVICE_UUID]] as [String : Any] peripheralManager?.startAdvertising(data) } } extension ContentViewModel: CBPeripheralManagerDelegate { func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) { switch peripheral.state { case .poweredOn: isStateActive = true setupServices() default: isStateActive = false } } func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveWrite requests: [CBATTRequest]) { for request in requests { guard let value = request.value else { continue } let stringValue = String(decoding: value, as: UTF8.self) print("Write request: \(stringValue)") } } }