diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 00000000..0442567c --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,23 @@ +disabled_rules: + - cyclomatic_complexity + - identifier_name + - multiple_closures_with_trailing_closure + - nesting + - type_name + - unused_closure_parameter + +excluded: # case-sensitive paths to ignore during linting. Takes precedence over `included` + - Pods + - "**/*.pb.swift" # exclude files with a wildcard + +line_length: 300 +type_body_length: + - 600 + +function_body_length: + - 150 + +file_length: + warning: 800 + +reporter: "xcode" diff --git a/packages/reactive_ble_mobile/ios/Classes/BleData extras/BLEStatus.swift b/packages/reactive_ble_mobile/ios/Classes/BleData extras/BLEStatus.swift index 25b0d36e..7f48f181 100644 --- a/packages/reactive_ble_mobile/ios/Classes/BleData extras/BLEStatus.swift +++ b/packages/reactive_ble_mobile/ios/Classes/BleData extras/BLEStatus.swift @@ -1,7 +1,7 @@ import enum CoreBluetooth.CBManagerState func encode(_ centralState: CBManagerState) -> Int32 { - switch (centralState) { + switch centralState { case .unknown, .resetting: return 0 case .unsupported: diff --git a/packages/reactive_ble_mobile/ios/Classes/BleData extras/FailureCodes.swift b/packages/reactive_ble_mobile/ios/Classes/BleData extras/FailureCodes.swift index 4c608970..b7fdc2c9 100644 --- a/packages/reactive_ble_mobile/ios/Classes/BleData extras/FailureCodes.swift +++ b/packages/reactive_ble_mobile/ios/Classes/BleData extras/FailureCodes.swift @@ -25,6 +25,6 @@ enum MaximumWriteValueLengthRetrieval: Int { } enum RequestConnectionPriorityFailure: Int { - + case operationNotSupported = 1 } diff --git a/packages/reactive_ble_mobile/ios/Classes/Plugin/Common/EventSink.swift b/packages/reactive_ble_mobile/ios/Classes/Plugin/Common/EventSink.swift index 713e5378..0e220d37 100644 --- a/packages/reactive_ble_mobile/ios/Classes/Plugin/Common/EventSink.swift +++ b/packages/reactive_ble_mobile/ios/Classes/Plugin/Common/EventSink.swift @@ -29,4 +29,3 @@ struct EventSink { } } } - diff --git a/packages/reactive_ble_mobile/ios/Classes/Plugin/PluginController.swift b/packages/reactive_ble_mobile/ios/Classes/Plugin/PluginController.swift index 7341fb22..c56a6d84 100644 --- a/packages/reactive_ble_mobile/ios/Classes/Plugin/PluginController.swift +++ b/packages/reactive_ble_mobile/ios/Classes/Plugin/PluginController.swift @@ -22,7 +22,7 @@ final class PluginController { } } } - var messageQueue: [CharacteristicValueInfo] = []; + var messageQueue: [CharacteristicValueInfo] = [] var connectedDeviceSink: EventSink? var characteristicValueUpdateSink: EventSink? @@ -128,11 +128,11 @@ final class PluginController { } } let sink = context.characteristicValueUpdateSink - if (sink != nil) { + if sink != nil { sink!.add(.success(message)) } else { // In case message arrives before sink is created - context.messageQueue.append(message); + context.messageQueue.append(message) } } @@ -205,8 +205,7 @@ final class PluginController { let servicesWithCharacteristicsToDiscover: ServicesWithCharacteristicsToDiscover if args.hasServicesWithCharacteristicsToDiscover { let items = args.servicesWithCharacteristicsToDiscover.items.reduce( - into: [ServiceID: [CharacteristicID]](), - { dict, item in + into: [ServiceID: [CharacteristicID]](), { dict, item in let serviceID = CBUUID(data: item.serviceID.data) let characteristicIDs = item.characteristics.map { CBUUID(data: $0.data) } @@ -221,7 +220,7 @@ final class PluginController { let timeout = args.timeoutInMs > 0 ? TimeInterval(args.timeoutInMs) / 1000 : nil completion(.success(nil)) - + if let sink = connectedDeviceSink { let message = DeviceInfo.with { $0.id = args.deviceID @@ -231,7 +230,7 @@ final class PluginController { } else { print("Warning! No event channel set up to report a connection update") } - + do { try central.connect( to: deviceID, @@ -296,10 +295,10 @@ final class PluginController { Uuid.with { $0.data = characteristic.uuid.data } } $0.characteristics = (service.characteristics ?? []).map { characteristic in - DiscoveredCharacteristic.with{ - $0.characteristicID = Uuid.with{$0.data = characteristic.uuid.data} + DiscoveredCharacteristic.with { + $0.characteristicID = Uuid.with {$0.data = characteristic.uuid.data} if characteristic.service?.uuid.data != nil { - $0.serviceID = Uuid.with{$0.data = characteristic.service!.uuid.data} + $0.serviceID = Uuid.with {$0.data = characteristic.service!.uuid.data} } $0.isReadable = characteristic.properties.contains(.read) $0.isWritableWithResponse = characteristic.properties.contains(.write) @@ -308,7 +307,7 @@ final class PluginController { $0.isIndicatable = characteristic.properties.contains(.indicate) } } - + $0.includedServices = (service.includedServices ?? []).map(makeDiscoveredService) } } @@ -463,20 +462,20 @@ final class PluginController { completion(.success(result)) } } - + func writeCharacteristicWithoutResponse(name: String, args: WriteCharacteristicRequest, completion: @escaping PlatformMethodCompletionHandler) { guard let central = central else { completion(.failure(PluginError.notInitialized.asFlutterError)) return } - + guard let characteristic = QualifiedCharacteristicIDFactory().make(from: args.characteristic) else { completion(.failure(PluginError.invalidMethodCall(method: name, details: "characteristic, service, and peripheral IDs are required").asFlutterError)) return } - + let result: WriteCharacteristicInfo do { try central.writeWithoutResponse( diff --git a/packages/reactive_ble_mobile/ios/Classes/Plugin/SwiftReactiveBlePlugin.swift b/packages/reactive_ble_mobile/ios/Classes/Plugin/SwiftReactiveBlePlugin.swift index e0a4fb93..a2bcdf5d 100644 --- a/packages/reactive_ble_mobile/ios/Classes/Plugin/SwiftReactiveBlePlugin.swift +++ b/packages/reactive_ble_mobile/ios/Classes/Plugin/SwiftReactiveBlePlugin.swift @@ -137,7 +137,7 @@ public class SwiftReactiveBlePlugin: NSObject, FlutterPlugin { }), AnyPlatformMethod(UnaryPlatformMethod(name: "negotiateMtuSize") { (name, context, args: NegotiateMtuRequest, completion) in context.reportMaximumWriteValueLength(name: name, args: args, completion: completion) - }), + }) ]) public func handle(_ call: FlutterMethodCall, result completion: @escaping FlutterResult) { diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Central.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Central.swift index 95f2f9dc..4696a166 100644 --- a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Central.swift +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Central.swift @@ -143,7 +143,7 @@ final class Central { discover: servicesWithCharacteristicsToDiscover, completion: central.onServicesWithCharacteristicsInitialDiscovery ) - case .failedToConnect(_), .disconnected(_): + case .failedToConnect, .disconnected: break } } @@ -172,7 +172,7 @@ final class Central { for peripheralID: PeripheralID, discover servicesWithCharacteristicsToDiscover: ServicesWithCharacteristicsToDiscover, completion: @escaping ServicesWithCharacteristicsDiscoveryHandler - ) throws -> Void { + ) throws { let peripheral = try resolve(connected: peripheralID) discoverServicesWithCharacteristics( @@ -186,7 +186,7 @@ final class Central { for peripheral: CBPeripheral, discover servicesWithCharacteristicsToDiscover: ServicesWithCharacteristicsToDiscover, completion: @escaping ServicesWithCharacteristicsDiscoveryHandler - ) -> Void { + ) { servicesWithCharacteristicsDiscoveryRegistry.registerTask( key: peripheral.identifier, params: .init(servicesWithCharacteristicsToDiscover: servicesWithCharacteristicsToDiscover), @@ -226,10 +226,10 @@ final class Central { guard characteristic.properties.contains(.read) else { throw Failure.notReadable(qualifiedCharacteristic) } - + guard let peripheral = characteristic.service?.peripheral else { throw Failure.peripheralIsUnknown(qualifiedCharacteristic.peripheralID) } - + peripheral.readValue(for: characteristic) } @@ -251,16 +251,16 @@ final class Central { completion(central, qualifiedCharacteristic, error) } ) - + guard let peripheral = characteristic.service?.peripheral - else{ throw Failure.peripheralIsUnknown(qualifiedCharacteristic.peripheralID) } + else { throw Failure.peripheralIsUnknown(qualifiedCharacteristic.peripheralID) } characteristicWriteRegistry.updateTask( key: qualifiedCharacteristic, action: { $0.start(peripheral: peripheral) } ) } - + func writeWithoutResponse( value: Data, characteristic qualifiedCharacteristic: QualifiedCharacteristic @@ -269,10 +269,10 @@ final class Central { guard characteristic.properties.contains(.writeWithoutResponse) else { throw Failure.notWritable(qualifiedCharacteristic) } - + guard let response = characteristic.service?.peripheral?.writeValue(value, for: characteristic, type: .withoutResponse) else { throw Failure.characteristicNotFound(qualifiedCharacteristic) } - + return response } diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/CentralManagerDelegate.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/CentralManagerDelegate.swift index c7a94132..22244dcc 100644 --- a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/CentralManagerDelegate.swift +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/CentralManagerDelegate.swift @@ -30,7 +30,7 @@ final class CentralManagerDelegate: NSObject, CBCentralManagerDelegate { onStateChange(central.state) } - func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi: NSNumber) { + func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String: Any], rssi: NSNumber) { onDiscovery(peripheral, advertisementData, rssi.intValue) } diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicNotify/CharacteristicNotifyTaskController.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicNotify/CharacteristicNotifyTaskController.swift index a0119c50..b5c74ba2 100644 --- a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicNotify/CharacteristicNotifyTaskController.swift +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicNotify/CharacteristicNotifyTaskController.swift @@ -13,7 +13,7 @@ struct CharacteristicNotifyTaskController: PeripheralTaskController { func start(characteristic: CBCharacteristic) -> SubjectTask { guard let peripheral = characteristic.service?.peripheral else { return task.with(state: task.state.finished(CharacteristicNotifyError.unExpected)) } - + peripheral.setNotifyValue(task.params.state.isOn, for: characteristic) return task.with(state: task.state.processing(.applying)) } @@ -26,7 +26,7 @@ struct CharacteristicNotifyTaskController: PeripheralTaskController { return task.with(state: task.state.finished(error)) } - private enum CharacteristicNotifyError: Error{ - case unExpected; + private enum CharacteristicNotifyError: Error { + case unExpected } } diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/Connect/ConnectTaskController.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/Connect/ConnectTaskController.swift index 5eb67c19..b5019d1f 100644 --- a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/Connect/ConnectTaskController.swift +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/Connect/ConnectTaskController.swift @@ -39,7 +39,7 @@ struct ConnectTaskController: PeripheralTaskController { case .processing(since: _, .connecting): centralManager.cancelPeripheralConnection(peripheral) return task.with(state: task.state.finished(.failedToConnect(error))) - case .finished(in: _, _): + case .finished: assert(false) return task } diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/Connect/ConnectTaskSpec.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/Connect/ConnectTaskSpec.swift index 208f0e99..2d5d8b87 100644 --- a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/Connect/ConnectTaskSpec.swift +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/Connect/ConnectTaskSpec.swift @@ -1,7 +1,7 @@ struct ConnectTaskSpec: PeripheralTaskSpec { typealias Key = PeripheralID - + struct Params {} enum Stage { diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/PeripheralTaskRegistry/PeripheralTaskRegistry.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/PeripheralTaskRegistry/PeripheralTaskRegistry.swift index 37e6f8fb..c0315a05 100644 --- a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/PeripheralTaskRegistry/PeripheralTaskRegistry.swift +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/PeripheralTaskRegistry/PeripheralTaskRegistry.swift @@ -46,8 +46,7 @@ final class PeripheralTaskRegistry { tasks.update(record.with(task: updatedTask)) if case .pending = record.task.state, case .processing = updatedTask.state, - let timeout = record.task.timeout - { + let timeout = record.task.timeout { scheduleTaskTimeout(record.uniqueID, timeout) } }