From a59e1f6163955391a85aedab3fddeeb1e8c32ff2 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 11 Jul 2025 14:27:36 -0400 Subject: [PATCH 01/34] Update for iOS 17 --- BluetoothExplorer.swiftpm/Package.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BluetoothExplorer.swiftpm/Package.swift b/BluetoothExplorer.swiftpm/Package.swift index 7cc0fec..80f0219 100644 --- a/BluetoothExplorer.swiftpm/Package.swift +++ b/BluetoothExplorer.swiftpm/Package.swift @@ -10,8 +10,8 @@ import AppleProductTypes let package = Package( name: "BluetoothExplorer", platforms: [ - .iOS("15.2"), - .macOS("12.0") + .iOS("17.0"), + .macOS("15.0") ], products: [ .iOSApplication( @@ -59,5 +59,5 @@ let package = Package( // Xcode only settings #if os(macOS) package.dependencies[0] = .package(url: "https://github.com/PureSwift/GATT.git", branch: "master") -package.platforms = [.iOS("15.0")] +package.platforms = [.iOS("17.0")] #endif From 5b8048866cd3d1047571d4ef6f549a12826115c8 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 11 Jul 2025 14:57:52 -0400 Subject: [PATCH 02/34] #12 Migrate `Store` to `@Observable` --- .../Model/Mock/MockCentral.swift | 105 +++++++++++------- .../Model/NativeCentral.swift | 44 ++------ BluetoothExplorer.swiftpm/Model/Store.swift | 92 ++++----------- .../Views/CentralList.swift | 4 +- .../Views/CharacteristicView.swift | 10 +- .../Views/DescriptorView.swift | 8 +- .../Views/PeripheralView.swift | 7 +- .../Views/ServiceView.swift | 7 +- 8 files changed, 112 insertions(+), 165 deletions(-) diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift index 19cd8bb..2b570be 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift @@ -11,6 +11,7 @@ import Bluetooth import GATT import DarwinGATT +@MainActor internal final class MockCentral: CentralManager, @unchecked Sendable { /// Central Peripheral Type @@ -21,51 +22,62 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { /// Central Attribute ID (Handle) typealias AttributeID = UInt16 - - lazy var state = AsyncStream { [unowned self] in - $0.yield(.poweredOn) - } - - var log: (@Sendable (String) -> ())? + + nonisolated(unsafe) var log: (@Sendable (String) -> ())? var peripherals: [GATT.Peripheral : Bool] { get async { var peripherals = [Peripheral: Bool]() - for scanData in _state.scanData { - peripherals[scanData.peripheral] = _state.connected.contains(scanData.peripheral) + for scanData in state.scanData { + peripherals[scanData.peripheral] = state.connected.contains(scanData.peripheral) } return peripherals } } - var _state = State() + var isEnabled: Bool { + get async { + state.isEnabled + } + } + + private var state = State() private var continuation = Continuation() init() { } /// Scans for peripherals that are advertising services. - func scan(filterDuplicates: Bool) -> AsyncCentralScan { + func scan( + with services: Set, + filterDuplicates: Bool + ) -> AsyncCentralScan { return AsyncCentralScan { continuation in - self._state.scanData.forEach { + await self.state.scanData.forEach { continuation($0) } } } + func scan( + filterDuplicates: Bool + ) -> AsyncCentralScan { + scan(with: [], filterDuplicates: filterDuplicates) + } + /// Connect to the specified device func connect(to peripheral: Peripheral) async throws { - _state.connected.insert(peripheral) + state.connected.insert(peripheral) } /// Disconnect the specified device. - func disconnect(_ peripheral: Peripheral) { - _state.connected.remove(peripheral) + func disconnect(_ peripheral: Peripheral) async { + state.connected.remove(peripheral) } /// Disconnect all connected devices. func disconnectAll() { - _state.connected.removeAll() + state.connected.removeAll() } /// Discover Services @@ -73,7 +85,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { _ services: Set = [], for peripheral: Peripheral ) async throws -> [Service] { - return _state.characteristics + return state.characteristics .keys .filter { $0.peripheral == peripheral } .sorted(by: { $0.id < $1.id }) @@ -87,14 +99,14 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Discover Characteristics for service - func discoverCharacteristics( + nonisolated func discoverCharacteristics( _ characteristics: Set = [], for service: Service ) async throws -> [Characteristic] { - guard _state.connected.contains(service.peripheral) else { + guard await state.connected.contains(service.peripheral) else { throw CentralError.disconnected } - guard let characteristics = _state.characteristics[service] else { + guard let characteristics = await state.characteristics[service] else { throw CentralError.invalidAttribute(service.uuid) } return characteristics @@ -102,22 +114,22 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Read Characteristic Value - func readValue( + nonisolated func readValue( for characteristic: Characteristic ) async throws -> Data { - guard _state.connected.contains(characteristic.peripheral) else { + guard await state.connected.contains(characteristic.peripheral) else { throw CentralError.disconnected } - return _state.characteristicValues[characteristic] ?? Data() + return await state.characteristicValues[characteristic] ?? Data() } /// Write Characteristic Value - func writeValue( + nonisolated func writeValue( _ data: Data, for characteristic: Characteristic, withResponse: Bool = true ) async throws { - guard _state.connected.contains(characteristic.peripheral) else { + guard await state.connected.contains(characteristic.peripheral) else { throw CentralError.disconnected } if withResponse { @@ -130,50 +142,56 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } } // write - _state.characteristicValues[characteristic] = data + await updateState { state in + state.characteristicValues[characteristic] = data + } } /// Discover descriptors - func discoverDescriptors( + nonisolated func discoverDescriptors( for characteristic: Characteristic ) async throws -> [Descriptor] { - guard _state.connected.contains(characteristic.peripheral) else { + guard await state.connected.contains(characteristic.peripheral) else { throw CentralError.disconnected } - return _state.descriptors[characteristic] ?? [] + return await state.descriptors[characteristic] ?? [] } /// Read descriptor - func readValue( + nonisolated func readValue( for descriptor: Descriptor ) async throws -> Data { - guard _state.connected.contains(descriptor.peripheral) else { + guard await state.connected.contains(descriptor.peripheral) else { throw CentralError.disconnected } - return _state.descriptorValues[descriptor] ?? Data() + return await state.descriptorValues[descriptor] ?? Data() } /// Write descriptor - func writeValue( + nonisolated func writeValue( _ data: Data, for descriptor: Descriptor ) async throws { - guard _state.connected.contains(descriptor.peripheral) else { + guard await state.connected.contains(descriptor.peripheral) else { throw CentralError.disconnected } - _state.descriptorValues[descriptor] = data + await updateState { state in + state.descriptorValues[descriptor] = data + } } - func notify( + nonisolated func notify( for characteristic: GATT.Characteristic ) async throws -> AsyncCentralNotifications { - guard _state.connected.contains(characteristic.peripheral) else { + guard await state.connected.contains(characteristic.peripheral) else { throw CentralError.disconnected } return AsyncCentralNotifications { [unowned self] continuation in - if let notifications = self._state.notifications[characteristic] { + if let notifications = await self.state.notifications[characteristic] { for notification in notifications { - try await Task.sleep(nanoseconds: 1_000_000_000) + if #available(iOS 16.0, *) { + try await Task.sleep(for: .seconds(1)) + } continuation(notification) } } @@ -182,7 +200,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { /// Read MTU func maximumTransmissionUnit(for peripheral: Peripheral) async throws -> MaximumTransmissionUnit { - guard _state.connected.contains(peripheral) else { + guard state.connected.contains(peripheral) else { throw CentralError.disconnected } return .default @@ -194,9 +212,17 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } } +private extension MockCentral { + + func updateState(_ body: (inout State) -> ()) { + body(&state) + } +} + internal extension MockCentral { struct State { + var isEnabled = false var isScanning = false var scanData: [MockScanData] = [.beacon, .smartThermostat] var connected = Set() @@ -253,7 +279,6 @@ internal extension MockCentral { struct Continuation { var scan: AsyncThrowingStream, Error>.Continuation? - var isScanning: AsyncStream.Continuation? } } #endif diff --git a/BluetoothExplorer.swiftpm/Model/NativeCentral.swift b/BluetoothExplorer.swiftpm/Model/NativeCentral.swift index 387e126..d48b670 100644 --- a/BluetoothExplorer.swiftpm/Model/NativeCentral.swift +++ b/BluetoothExplorer.swiftpm/Model/NativeCentral.swift @@ -14,66 +14,36 @@ import DarwinGATT #if os(Android) || os(iOS) && targetEnvironment(simulator) typealias NativeCentral = MockCentral - -extension NativeCentral { - - private struct Cache { - static let central = MockCentral() - } - - static var shared: NativeCentral { - return Cache.central - } -} - #elseif canImport(Darwin) typealias NativeCentral = DarwinCentral - -extension NativeCentral { - - private struct Cache { - static let central = DarwinCentral( - options: .init(showPowerAlert: true) - ) - } - - static var shared: NativeCentral { - return Cache.central - } -} #else #error("Platform not supported") #endif #if canImport(Darwin) -public extension NativeCentral { +extension NativeCentral { /// Wait for CoreBluetooth to be ready. func wait( - for state: DarwinBluetoothState, warning: Int = 3, timeout: Int = 10 ) async throws { var powerOnWait = 0 - var currentState: DarwinBluetoothState + var currentState: Bool repeat { - currentState = await self.state + currentState = await self.isEnabled // inform user after 3 seconds if powerOnWait == warning { - NSLog("Waiting for CoreBluetooth to be ready, please turn on Bluetooth") + NSLog("Waiting for Bluetooth to be ready, please turn on Bluetooth") } // sleep for 1s - if #available(macOS 13, iOS 16, watchOS 9, tvOS 16, *) { - try await Task.sleep(for: .seconds(1)) - } else { - try await Task.sleep(nanoseconds: 1_000_000_000) - } + try await Task.sleep(for: .seconds(1)) powerOnWait += 1 guard powerOnWait < timeout else { - throw DarwinCentralError.invalidState(currentState) + throw CocoaError(.featureUnsupported) // TODO: Update error } - } while currentState != state + } while currentState != true } } #endif diff --git a/BluetoothExplorer.swiftpm/Model/Store.swift b/BluetoothExplorer.swiftpm/Model/Store.swift index 80ac143..b6be341 100644 --- a/BluetoothExplorer.swiftpm/Model/Store.swift +++ b/BluetoothExplorer.swiftpm/Model/Store.swift @@ -15,7 +15,8 @@ import DarwinGATT /// Store @MainActor -final class Store: ObservableObject, @unchecked Sendable { +@Observable +final class Store: @unchecked Sendable { typealias Central = NativeCentral @@ -33,110 +34,53 @@ final class Store: ObservableObject, @unchecked Sendable { // MARK: - Properties - @Published private(set) var activity = [Peripheral: Bool]() - @Published private(set) var state: DarwinBluetoothState = .unknown - @Published private(set) var scanResults = [Peripheral: ScanResult]() var isScanning: Bool { self.scanStream?.isScanning ?? false } - @Published - private(set) var connected = Set() + var connected: Set { + get async { + await Set(central.peripherals.compactMap { $0.value ? $0.key : nil }) + } + } - @Published private(set) var services = [Peripheral: [Service]]() - @Published private(set) var characteristics = [Service: [Characteristic]]() - @Published private(set) var includedServices = [Service: [Service]]() - - @Published + private(set) var descriptors = [Characteristic: [Descriptor]]() - - @Published + private(set) var characteristicValues = [Characteristic: Cache]() - - @Published + private(set) var descriptorValues = [Descriptor: Cache]() - - @Published + private(set) var isNotifying = [Characteristic: Bool]() internal let central: Central - - @Published + private var scanStream: AsyncCentralScan? - private var centralObserver: AnyCancellable? - // MARK: - Initialization - deinit { - centralObserver?.cancel() - } - - init(central: Central) { + init(central: Central = Central()) { self.central = central - observeValues() setupLog() } - - static let shared = Store(central: .shared) - + // MARK: - Methods private func setupLog() { central.log = { print("Central: \($0)") } } - private func observeValues() { - centralObserver = central.objectWillChange - .receive(on: DispatchQueue.main) - .sink { [unowned self] _ in - self.objectWillChange.send() - Task { [unowned self] in - await self.updateState() - await self.updateConnected() - } - } - - } - - private func updateState() async { - assert(Thread.isMainThread) - let oldValue = self.state - let newValue = await self.central.state - guard newValue != oldValue else { - return - } - // update value - self.state = newValue - // start scanning when powered on - guard newValue == .poweredOn else { - return - } - do { try await self.scan() } - catch { } // ignore error - } - - private func updateConnected() async { - assert(Thread.isMainThread) - let oldValue = self.connected - let newValue = await Set(central.peripherals.compactMap { $0.value ? $0.key : nil }) - guard oldValue != newValue else { - return - } - self.connected = newValue - } - func scan( with services: Set = [], filterDuplicates: Bool = true @@ -159,7 +103,11 @@ final class Store: ObservableObject, @unchecked Sendable { private func found(scanData: ScanData) async { var cache = scanResults[scanData.peripheral] ?? ScanDataCache(scanData: scanData) cache += scanData - #if canImport(CoreBluetooth) + #if os(Android) + + #elseif os(iOS) && targetEnvironment(simulator) + + #elseif canImport(CoreBluetooth) cache.name = try? await central.name(for: scanData.peripheral) for serviceUUID in scanData.advertisementData.overflowServiceUUIDs ?? [] { cache.overflowServiceUUIDs.insert(serviceUUID) @@ -180,8 +128,6 @@ final class Store: ObservableObject, @unchecked Sendable { scanStream?.stop() } try await central.connect(to: peripheral) - assert(Thread.isMainThread) - connected.insert(peripheral) } func disconnect(_ peripheral: Central.Peripheral) async { diff --git a/BluetoothExplorer.swiftpm/Views/CentralList.swift b/BluetoothExplorer.swiftpm/Views/CentralList.swift index d28fea0..648d9a6 100644 --- a/BluetoothExplorer.swiftpm/Views/CentralList.swift +++ b/BluetoothExplorer.swiftpm/Views/CentralList.swift @@ -12,7 +12,7 @@ import GATT struct CentralList: View { - @EnvironmentObject + @Environment(Store.self) var store: Store var scanResults: [Store.ScanResult] { @@ -88,7 +88,7 @@ struct CentralList_Preview: PreviewProvider { NavigationView { CentralList() } - .environmentObject(Store.shared) + .environment(Store()) } } } diff --git a/BluetoothExplorer.swiftpm/Views/CharacteristicView.swift b/BluetoothExplorer.swiftpm/Views/CharacteristicView.swift index 7506aa3..db28829 100644 --- a/BluetoothExplorer.swiftpm/Views/CharacteristicView.swift +++ b/BluetoothExplorer.swiftpm/Views/CharacteristicView.swift @@ -11,7 +11,7 @@ import GATT struct CharacteristicView: View { - @EnvironmentObject + @Environment(Store.self) var store: Store let characteristic: Store.Characteristic @@ -153,7 +153,8 @@ extension CharacteristicView { } var isConnected: Bool { - store.connected.contains(peripheral) + //store.connected.contains(peripheral) + true } var descriptors: [Store.Descriptor] { @@ -251,16 +252,17 @@ struct CharacteristicView_Preview: PreviewProvider { Group { NavigationView { CharacteristicView( - store: .shared, characteristic: .deviceName ) } + .environment(Store()) + NavigationView { CharacteristicView( - store: .shared, characteristic: .batteryLevel ) } + .environment(Store()) } } } diff --git a/BluetoothExplorer.swiftpm/Views/DescriptorView.swift b/BluetoothExplorer.swiftpm/Views/DescriptorView.swift index 7df7207..58f1cc9 100644 --- a/BluetoothExplorer.swiftpm/Views/DescriptorView.swift +++ b/BluetoothExplorer.swiftpm/Views/DescriptorView.swift @@ -11,7 +11,7 @@ import GATT struct DescriptorView: View { - @EnvironmentObject + @Environment(Store.self) var store: Store let descriptor: Store.Descriptor @@ -128,7 +128,9 @@ extension DescriptorView { } var isConnected: Bool { - store.connected.contains(peripheral) + // FIXME + //store.connected.contains(peripheral) + false } var showActivity: Bool { @@ -191,9 +193,9 @@ struct DescriptorView_Preview: PreviewProvider { Group { NavigationView { DescriptorView( - store: .shared, descriptor: .clientCharacteristicConfiguration(.beacon) ) + .environment(Store()) } } } diff --git a/BluetoothExplorer.swiftpm/Views/PeripheralView.swift b/BluetoothExplorer.swiftpm/Views/PeripheralView.swift index 3f409ed..1ee8039 100644 --- a/BluetoothExplorer.swiftpm/Views/PeripheralView.swift +++ b/BluetoothExplorer.swiftpm/Views/PeripheralView.swift @@ -12,7 +12,7 @@ import GATT struct PeripheralView: View { - @EnvironmentObject + @Environment(Store.self) var store: Store let peripheral: Store.Peripheral @@ -84,7 +84,8 @@ extension PeripheralView { } var isConnected: Bool { - store.connected.contains(peripheral) + //store.connected.contains(peripheral) + true } var services: [Store.Service] { @@ -152,10 +153,10 @@ struct PeripheralView_Preview: PreviewProvider { Group { NavigationView { PeripheralView( - store: .shared, peripheral: .beacon ) } + .environment(Store()) } } } diff --git a/BluetoothExplorer.swiftpm/Views/ServiceView.swift b/BluetoothExplorer.swiftpm/Views/ServiceView.swift index fb1c8e9..2b9b003 100644 --- a/BluetoothExplorer.swiftpm/Views/ServiceView.swift +++ b/BluetoothExplorer.swiftpm/Views/ServiceView.swift @@ -11,7 +11,7 @@ import GATT struct ServiceView: View { - @EnvironmentObject + @Environment(Store.self) var store: Store let service: Store.Service @@ -88,7 +88,8 @@ extension ServiceView { } var isConnected: Bool { - store.connected.contains(peripheral) + //store.connected.contains(peripheral) + true } var characteristics: [Store.Characteristic] { @@ -134,10 +135,10 @@ struct ServiceView_Preview: PreviewProvider { Group { NavigationView { ServiceView( - store: .shared, service: .deviceInformation ) } + .environment(Store()) } } } From fa8cab9479d847575af03dcf74ea1619f09fc173 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 11 Jul 2025 14:58:25 -0400 Subject: [PATCH 03/34] #12 Move `Store.shared` to `BluetoothExplorerApp.store` --- BluetoothExplorer.swiftpm/App.swift | 4 ++-- .../Entity/CharacteristicEntity.swift | 10 +++++---- .../Entity/ManufacturerDataEntity.swift | 2 +- .../AppIntents/Entity/PeripheralEntity.swift | 21 +++++++++++++++---- .../AppIntents/Entity/ServiceEntity.swift | 10 +++++---- .../DiscoverCharacteristicsIntent.swift | 6 +++--- .../Intent/DiscoverServicesIntent.swift | 6 +++--- .../AppIntents/Intent/ScanIntent.swift | 4 ++-- 8 files changed, 40 insertions(+), 23 deletions(-) diff --git a/BluetoothExplorer.swiftpm/App.swift b/BluetoothExplorer.swiftpm/App.swift index eae5d24..dae42ba 100644 --- a/BluetoothExplorer.swiftpm/App.swift +++ b/BluetoothExplorer.swiftpm/App.swift @@ -12,7 +12,7 @@ import SwiftUI @main struct BluetoothExplorerApp: App { - let store = Store.shared + static let store = Store() var body: some Scene { WindowGroup { @@ -20,7 +20,7 @@ struct BluetoothExplorerApp: App { CentralList() Text("Scan for devices") } - .environmentObject(Store.shared) + .environment(Self.store) } } } diff --git a/BluetoothExplorer.swiftpm/AppIntents/Entity/CharacteristicEntity.swift b/BluetoothExplorer.swiftpm/AppIntents/Entity/CharacteristicEntity.swift index adc5b9a..cd92f0b 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Entity/CharacteristicEntity.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Entity/CharacteristicEntity.swift @@ -25,18 +25,20 @@ extension CharacteristicEntity { struct ID: Equatable, Hashable, EntityIdentifierConvertible, Sendable { - let peripheral: UUID + typealias Peripheral = NativeCentral.Peripheral.ID + + let peripheral: Peripheral let attributeID: Int var entityIdentifierString: String { - return peripheral.uuidString + "/" + attributeID.description + return peripheral.description + "/" + attributeID.description } static func entityIdentifier(for string: String) -> ID? { let components = string.components(separatedBy: "/") guard components.count == 2, - let peripheral = UUID(uuidString: components[0]), + let peripheral = Peripheral(components[0]), let attributeID = Int(components[1]) else { return nil } @@ -80,7 +82,7 @@ struct CharacteristicQuery: EntityQuery { @MainActor func entities(for identifiers: [CharacteristicEntity.ID]) -> [CharacteristicEntity] { - let allServices = Store.shared.characteristics.values.lazy.reduce([], { $0 + $1 }) + let allServices = BluetoothExplorerApp.store.characteristics.values.lazy.reduce([], { $0 + $1 }) return identifiers.compactMap { id in allServices .first(where: { $0.peripheral.id == id.peripheral && $0.id.hashValue == id.attributeID }) diff --git a/BluetoothExplorer.swiftpm/AppIntents/Entity/ManufacturerDataEntity.swift b/BluetoothExplorer.swiftpm/AppIntents/Entity/ManufacturerDataEntity.swift index 7083458..79cba0b 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Entity/ManufacturerDataEntity.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Entity/ManufacturerDataEntity.swift @@ -59,7 +59,7 @@ struct ManufacturerDataQuery: EntityQuery { @MainActor func suggestedEntities() throws -> [ManufacturerDataEntity] { - return Store.shared.scanResults + return BluetoothExplorerApp.store.scanResults .values .lazy .compactMap { $0.manufacturerData } diff --git a/BluetoothExplorer.swiftpm/AppIntents/Entity/PeripheralEntity.swift b/BluetoothExplorer.swiftpm/AppIntents/Entity/PeripheralEntity.swift index 724e7df..e896313 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Entity/PeripheralEntity.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Entity/PeripheralEntity.swift @@ -12,7 +12,7 @@ import GATT @available(macOS 13, iOS 16, watchOS 9, tvOS 16, *) struct PeripheralEntity: AppEntity, Identifiable { - let id: UUID + let id: NativeCentral.Peripheral.ID /// Timestamp for when device was scanned. let date: Date @@ -73,8 +73,8 @@ extension PeripheralEntity { struct PeripheralQuery: EntityQuery { @MainActor - func entities(for identifiers: [UUID]) -> [PeripheralEntity] { - let scanResults = Store.shared.scanResults.values + func entities(for identifiers: [PeripheralEntity.ID]) -> [PeripheralEntity] { + let scanResults = BluetoothExplorerApp.store.scanResults.values return identifiers.compactMap { id in scanResults.first(where: { $0.id == id }) .map { PeripheralEntity($0.scanData) } @@ -83,9 +83,22 @@ struct PeripheralQuery: EntityQuery { @MainActor func suggestedEntities() throws -> [PeripheralEntity] { - Store.shared.scanResults + BluetoothExplorerApp.store.scanResults .values .sorted(by: { ($0.name ?? $0.id.description) < ($1.name ?? $1.id.description) }) .map { .init($0.scanData) } } } + +// MARK: - EntityIdentifierConvertible + +extension BluetoothAddress: @retroactive EntityIdentifierConvertible { + + public var entityIdentifierString: String { + rawValue + } + + public static func entityIdentifier(for entityIdentifierString: String) -> Bluetooth.BluetoothAddress? { + .init(rawValue: entityIdentifierString) + } +} diff --git a/BluetoothExplorer.swiftpm/AppIntents/Entity/ServiceEntity.swift b/BluetoothExplorer.swiftpm/AppIntents/Entity/ServiceEntity.swift index d46c8fa..d32da39 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Entity/ServiceEntity.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Entity/ServiceEntity.swift @@ -24,18 +24,20 @@ extension ServiceEntity { struct ID: Equatable, Hashable, EntityIdentifierConvertible, Sendable { - let peripheral: UUID + let peripheral: PeripheralEntity.ID let attributeID: Int var entityIdentifierString: String { - return peripheral.uuidString + "/" + attributeID.description + return peripheral.description + "/" + attributeID.description } /// Identifiers should be able to initialize via a `String` format. static func entityIdentifier(for string: String) -> ID? { let components = string.components(separatedBy: "/") - guard components.count == 2, let peripheral = UUID(uuidString: components[0]), let attributeID = Int(components[1]) else { + guard components.count == 2, + let peripheral = PeripheralEntity.ID(components[0]), + let attributeID = Int(components[1]) else { return nil } return ServiceEntity.ID.init(peripheral: peripheral, attributeID: attributeID) @@ -75,7 +77,7 @@ struct ServiceQuery: EntityQuery { @MainActor func entities(for identifiers: [ServiceEntity.ID]) -> [ServiceEntity] { - let allServices = Store.shared.services.values.lazy.reduce([], { $0 + $1 }) + let allServices = BluetoothExplorerApp.store.services.values.lazy.reduce([], { $0 + $1 }) return identifiers.compactMap { id in allServices .first(where: { $0.peripheral.id == id.peripheral && $0.id.hashValue == id.attributeID }) diff --git a/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverCharacteristicsIntent.swift b/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverCharacteristicsIntent.swift index 83b0016..7ca8279 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverCharacteristicsIntent.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverCharacteristicsIntent.swift @@ -31,15 +31,15 @@ struct DiscoverCharacteristicsIntent: AppIntent { @MainActor func perform() async throws -> some IntentResult { - let store = Store.shared + let store = BluetoothExplorerApp.store guard let peripheral = store.scanResults.keys.first(where: { $0.id == service.id.peripheral }) else { throw CentralError.unknownPeripheral } guard let service = store.services[peripheral, default: []].first(where: { $0.id.hashValue == service.id.attributeID && $0.peripheral.id == service.id.peripheral }) else { throw CentralError.invalidAttribute(BluetoothUUID(rawValue: service.uuid) ?? .bit128(.zero)) } - try await store.central.wait(for: .poweredOn, warning: 1, timeout: 2) - if store.connected.contains(peripheral) == false { + try await store.central.wait(warning: 1, timeout: 2) + if await store.connected.contains(peripheral) == false { try await store.connect(to: peripheral) } try await store.discoverCharacteristics(for: service) diff --git a/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverServicesIntent.swift b/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverServicesIntent.swift index 7bd4aa8..07e1872 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverServicesIntent.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverServicesIntent.swift @@ -31,12 +31,12 @@ struct DiscoverServicesIntent: AppIntent { @MainActor func perform() async throws -> some IntentResult { - let store = Store.shared + let store = BluetoothExplorerApp.store guard let peripheral = store.scanResults.keys.first(where: { $0.id == device.id }) else { throw CentralError.unknownPeripheral } - try await store.central.wait(for: .poweredOn, warning: 1, timeout: 2) - if store.connected.contains(peripheral) == false { + try await store.central.wait(warning: 1, timeout: 2) + if await store.connected.contains(peripheral) == false { try await store.connect(to: peripheral) } try await store.discoverServices(for: peripheral) diff --git a/BluetoothExplorer.swiftpm/AppIntents/Intent/ScanIntent.swift b/BluetoothExplorer.swiftpm/AppIntents/Intent/ScanIntent.swift index 4db5d3b..b6354f0 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Intent/ScanIntent.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Intent/ScanIntent.swift @@ -51,8 +51,8 @@ struct ScanIntent: AppIntent { @MainActor func perform() async throws -> some IntentResult { let services = Set(self.services.compactMap({ BluetoothUUID(rawValue: $0) })) - let store = Store.shared - try await store.central.wait(for: .poweredOn, warning: 1, timeout: 2) + let store = BluetoothExplorerApp.store + try await store.central.wait(warning: 1, timeout: 2) try await store.scan( with: services, filterDuplicates: filterDuplicates From 8893f61a20574fb9330cab75ab9d5b56b880f551 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 11 Jul 2025 15:23:33 -0400 Subject: [PATCH 04/34] #12 Add `Store.observeValues()` --- .../Model/Mock/MockCentral.swift | 9 +++- BluetoothExplorer.swiftpm/Model/Store.swift | 52 ++++++++++++++++--- .../Views/CentralList.swift | 13 ++--- 3 files changed, 57 insertions(+), 17 deletions(-) diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift index 2b570be..81ae8e2 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift @@ -45,7 +45,14 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { private var continuation = Continuation() - init() { } + init() { + Task { + try await Task.sleep(for: .seconds(1)) + updateState { + $0.isEnabled = true + } + } + } /// Scans for peripherals that are advertising services. func scan( diff --git a/BluetoothExplorer.swiftpm/Model/Store.swift b/BluetoothExplorer.swiftpm/Model/Store.swift index b6be341..fdc5122 100644 --- a/BluetoothExplorer.swiftpm/Model/Store.swift +++ b/BluetoothExplorer.swiftpm/Model/Store.swift @@ -36,7 +36,7 @@ final class Store: @unchecked Sendable { private(set) var activity = [Peripheral: Bool]() - private(set) var state: DarwinBluetoothState = .unknown + private(set) var isEnabled = false private(set) var scanResults = [Peripheral: ScanResult]() @@ -44,11 +44,7 @@ final class Store: @unchecked Sendable { self.scanStream?.isScanning ?? false } - var connected: Set { - get async { - await Set(central.peripherals.compactMap { $0.value ? $0.key : nil }) - } - } + private(set) var connected: Set = [] private(set) var services = [Peripheral: [Service]]() @@ -67,12 +63,13 @@ final class Store: @unchecked Sendable { internal let central: Central private var scanStream: AsyncCentralScan? - + // MARK: - Initialization init(central: Central = Central()) { self.central = central setupLog() + observeValues() } // MARK: - Methods @@ -81,6 +78,47 @@ final class Store: @unchecked Sendable { central.log = { print("Central: \($0)") } } + private func observeValues() { + Task { [weak self] in + do { + while let self { + try await Task.sleep(for: .seconds(1)) + await self.updateState() + } + } + catch { + + } + } + } + + private func updateState() async { + assert(Thread.isMainThread) + let oldValue = self.isEnabled + let newValue = await self.central.isEnabled + guard newValue != oldValue else { + return + } + // update value + self.isEnabled = newValue + // start scanning when powered on + guard newValue else { + return + } + do { try await self.scan() } + catch { } // ignore error + } + + private func updateConnected() async { + assert(Thread.isMainThread) + let oldValue = self.connected + let newValue = await Set(central.peripherals.compactMap { $0.value ? $0.key : nil }) + guard oldValue != newValue else { + return + } + self.connected = newValue + } + func scan( with services: Set = [], filterDuplicates: Bool = true diff --git a/BluetoothExplorer.swiftpm/Views/CentralList.swift b/BluetoothExplorer.swiftpm/Views/CentralList.swift index 648d9a6..1ad64de 100644 --- a/BluetoothExplorer.swiftpm/Views/CentralList.swift +++ b/BluetoothExplorer.swiftpm/Views/CentralList.swift @@ -16,7 +16,7 @@ struct CentralList: View { var store: Store var scanResults: [Store.ScanResult] { - return store.scanResults + store.scanResults .values .sorted(by: { $0.id.description < $1.id.description }) .sorted(by: { ($0.name ?? "") < ($1.name ?? "") }) @@ -47,18 +47,13 @@ extension CentralList { } var leftBarButtonItem: some View { - switch store.state { - case .unknown: - return AnyView(EmptyView()) - case .poweredOff, - .resetting, - .unauthorized, - .unsupported: + switch store.isEnabled { + case false: return AnyView( Image(systemName: "exclamationmark.triangle.fill") .foregroundColor(.red) ) - case .poweredOn: + case true: if store.isScanning { return AnyView(Button(action: { Task { From 89ead8af2a6b4e6c3b549a0a9b172e93765dd118 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 11 Jul 2025 15:39:02 -0400 Subject: [PATCH 05/34] Update Bundle Identifier --- BluetoothExplorer.swiftpm/Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BluetoothExplorer.swiftpm/Package.swift b/BluetoothExplorer.swiftpm/Package.swift index 80f0219..a54f614 100644 --- a/BluetoothExplorer.swiftpm/Package.swift +++ b/BluetoothExplorer.swiftpm/Package.swift @@ -17,7 +17,7 @@ let package = Package( .iOSApplication( name: "BluetoothExplorer", targets: ["BluetoothExplorer"], - bundleIdentifier: "com.pureswift.bluetooth-explorer", + bundleIdentifier: "org.pureswift.bluetoothexplorer", teamIdentifier: "4W79SG34MW", displayVersion: "1.0", bundleVersion: "5", From d7755e75752fa28de5750f5bd5a601f1ac2aa101 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Fri, 11 Jul 2025 16:33:20 -0400 Subject: [PATCH 06/34] #12 Fix `Store.isScanning` --- BluetoothExplorer.swiftpm/Model/Store.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BluetoothExplorer.swiftpm/Model/Store.swift b/BluetoothExplorer.swiftpm/Model/Store.swift index fdc5122..326866d 100644 --- a/BluetoothExplorer.swiftpm/Model/Store.swift +++ b/BluetoothExplorer.swiftpm/Model/Store.swift @@ -61,7 +61,7 @@ final class Store: @unchecked Sendable { private(set) var isNotifying = [Characteristic: Bool]() internal let central: Central - + private var scanStream: AsyncCentralScan? // MARK: - Initialization @@ -134,6 +134,7 @@ final class Store: @unchecked Sendable { for try await scanData in stream { await found(scanData: scanData) } + self.scanStream = nil } } From 4b3533edeb6f237b62b50363d11cf3258ff1eed2 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 01:25:52 -0400 Subject: [PATCH 07/34] Remove legacy code --- Android/.gitignore | 7 - Android/app/.gitignore | 4 - Android/app/build.gradle | 35 - Android/app/proguard-rules.pro | 21 - .../ExampleInstrumentedTest.kt | 24 - Android/app/src/main/AndroidManifest.xml | 32 - .../bluetoothexplorer/Application.kt | 13 - .../bluetoothexplorer/MainActivity.kt | 5 - .../swiftbindings/MainActivityBindings.java | 16 - .../MainActivityBindings_ListenerProxy.java | 32 - .../drawable-v24/ic_launcher_foreground.xml | 34 - .../src/main/res/drawable/ic_arrow_back.xml | 5 - .../src/main/res/drawable/ic_bluetooth.xml | 9 - .../res/drawable/ic_launcher_background.xml | 170 ---- Android/app/src/main/res/layout/list_cell.xml | 15 - .../app/src/main/res/layout/list_header.xml | 19 - .../src/main/res/layout/peripheral_item.xml | 50 -- .../src/main/res/layout/peripheral_item_2.xml | 43 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 4230 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 6811 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2294 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 3634 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 5746 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 9310 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 10563 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 17438 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 17424 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 26287 -> 0 bytes Android/app/src/main/res/values/colors.xml | 6 - Android/app/src/main/res/values/strings.xml | 3 - Android/app/src/main/res/values/styles.xml | 37 - Android/app/src/main/swift/Package.resolved | 97 --- Android/app/src/main/swift/Package.swift | 33 - .../ActivityIndicatorViewController.swift | 151 ---- .../swift/Sources/AndroidTableViewCell.swift | 59 -- .../src/main/swift/Sources/AppDelegate.swift | 239 ------ .../src/main/swift/Sources/Appearance.swift | 31 - .../app/src/main/swift/Sources/Async.swift | 32 - .../app/src/main/swift/Sources/Central.swift | 55 -- .../swift/Sources/CentralViewController.swift | 265 ------ .../CharacteristicViewController.swift | 470 ----------- .../CharacteristicsViewController.swift | 191 ----- .../src/main/swift/Sources/ErrorAlert.swift | 50 -- Android/app/src/main/swift/Sources/Log.swift | 19 - .../src/main/swift/Sources/MainActivity.swift | 37 - .../swift/Sources/MainActivityBindings.swift | 18 - .../MainActivityBindings_Listener.swift | 85 -- .../MainActivityBindings_Responder.swift | 18 - .../main/swift/Sources/NibTableViewCell.swift | 37 - .../swift/Sources/ReusableTableViewCell.swift | 66 -- .../swift/Sources/ScanDataTableViewCell.swift | 64 -- .../Sources/ServicesViewController.swift | 196 ----- .../bluetoothexplorer/ExampleUnitTest.kt | 17 - Android/build.gradle | 32 - Android/gradle.properties | 13 - Android/gradle/wrapper/gradle-wrapper.jar | Bin 54708 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - Android/gradlew | 172 ---- Android/gradlew.bat | 84 -- Android/settings.gradle | 1 - Cartfile | 1 - Cartfile.resolved | 2 - .../project.pbxproj | 774 ------------------ .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcschemes/BluetoothExplorer.xcscheme | 89 -- .../AppIcon.appiconset/Contents.json | 158 ---- .../AppIcon.appiconset/Icon-40.png | Bin 1940 -> 0 bytes .../AppIcon.appiconset/Icon-40@2x.png | Bin 4411 -> 0 bytes .../AppIcon.appiconset/Icon-40@3x.png | Bin 7535 -> 0 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 7535 -> 0 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 13112 -> 0 bytes .../AppIcon.appiconset/Icon-72.png | Bin 3869 -> 0 bytes .../AppIcon.appiconset/Icon-72@2x.png | Bin 9652 -> 0 bytes .../AppIcon.appiconset/Icon-76.png | Bin 4118 -> 0 bytes .../AppIcon.appiconset/Icon-76@2x.png | Bin 10373 -> 0 bytes .../AppIcon.appiconset/Icon-83.5@2x.png | Bin 11633 -> 0 bytes .../AppIcon.appiconset/Icon-Small-50.png | Bin 2554 -> 0 bytes .../AppIcon.appiconset/Icon-Small-50@2x.png | Bin 5883 -> 0 bytes .../AppIcon.appiconset/Icon-Small.png | Bin 1303 -> 0 bytes .../AppIcon.appiconset/Icon-Small@2x.png | Bin 2976 -> 0 bytes .../AppIcon.appiconset/Icon-Small@3x.png | Bin 4897 -> 0 bytes .../AppIcon.appiconset/Icon.png | Bin 2959 -> 0 bytes .../AppIcon.appiconset/Icon@2x.png | Bin 6911 -> 0 bytes .../NotificationIcon@2x.png | Bin 1940 -> 0 bytes .../NotificationIcon@3x.png | Bin 3069 -> 0 bytes .../NotificationIcon~ipad.png | Bin 799 -> 0 bytes .../NotificationIcon~ipad@2x.png | Bin 1940 -> 0 bytes .../AppIcon.appiconset/ios-marketing.png | Bin 189000 -> 0 bytes .../Assets.xcassets/Contents.json | 6 - .../Logo.imageset/Contents.json | 21 - .../Logo.imageset/PureSwiftBluetooth.png | Bin 69662 -> 0 bytes .../Assets.xcassets/Tab Bar/Contents.json | 6 - .../Tab Bar/Near.imageset/Contents.json | 23 - .../Tab Bar/Near.imageset/Near.png | Bin 593 -> 0 bytes .../Tab Bar/Near.imageset/Near@2x.png | Bin 1367 -> 0 bytes .../Tab Bar/Near.imageset/Near@3x.png | Bin 2332 -> 0 bytes .../NearSelected.imageset/Contents.json | 23 - .../NearSelected.imageset/NearSelected.png | Bin 534 -> 0 bytes .../NearSelected.imageset/NearSelected@2x.png | Bin 1094 -> 0 bytes .../NearSelected.imageset/NearSelected@3x.png | Bin 1715 -> 0 bytes .../Base.lproj/LaunchScreen.storyboard | 25 - iOS/Old/BluetoothExplorer/Info.plist | 43 - .../ScanDataTableViewCell.xib | 33 - 106 files changed, 4347 deletions(-) delete mode 100644 Android/.gitignore delete mode 100644 Android/app/.gitignore delete mode 100644 Android/app/build.gradle delete mode 100644 Android/app/proguard-rules.pro delete mode 100644 Android/app/src/androidTest/java/com/millertech/bluetoothexplorer/ExampleInstrumentedTest.kt delete mode 100644 Android/app/src/main/AndroidManifest.xml delete mode 100644 Android/app/src/main/java/com/millertech/bluetoothexplorer/Application.kt delete mode 100644 Android/app/src/main/java/com/millertech/bluetoothexplorer/MainActivity.kt delete mode 100644 Android/app/src/main/java/com/millertech/bluetoothexplorer/swiftbindings/MainActivityBindings.java delete mode 100644 Android/app/src/main/java/org/swiftjava/com_millertech/MainActivityBindings_ListenerProxy.java delete mode 100644 Android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml delete mode 100644 Android/app/src/main/res/drawable/ic_arrow_back.xml delete mode 100644 Android/app/src/main/res/drawable/ic_bluetooth.xml delete mode 100644 Android/app/src/main/res/drawable/ic_launcher_background.xml delete mode 100644 Android/app/src/main/res/layout/list_cell.xml delete mode 100644 Android/app/src/main/res/layout/list_header.xml delete mode 100644 Android/app/src/main/res/layout/peripheral_item.xml delete mode 100644 Android/app/src/main/res/layout/peripheral_item_2.xml delete mode 100644 Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100755 Android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100755 Android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100755 Android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100755 Android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100755 Android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100755 Android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100755 Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100755 Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100755 Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100755 Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 Android/app/src/main/res/values/colors.xml delete mode 100644 Android/app/src/main/res/values/strings.xml delete mode 100644 Android/app/src/main/res/values/styles.xml delete mode 100644 Android/app/src/main/swift/Package.resolved delete mode 100644 Android/app/src/main/swift/Package.swift delete mode 100755 Android/app/src/main/swift/Sources/ActivityIndicatorViewController.swift delete mode 100644 Android/app/src/main/swift/Sources/AndroidTableViewCell.swift delete mode 100644 Android/app/src/main/swift/Sources/AppDelegate.swift delete mode 100644 Android/app/src/main/swift/Sources/Appearance.swift delete mode 100755 Android/app/src/main/swift/Sources/Async.swift delete mode 100644 Android/app/src/main/swift/Sources/Central.swift delete mode 100644 Android/app/src/main/swift/Sources/CentralViewController.swift delete mode 100644 Android/app/src/main/swift/Sources/CharacteristicViewController.swift delete mode 100644 Android/app/src/main/swift/Sources/CharacteristicsViewController.swift delete mode 100755 Android/app/src/main/swift/Sources/ErrorAlert.swift delete mode 100644 Android/app/src/main/swift/Sources/Log.swift delete mode 100644 Android/app/src/main/swift/Sources/MainActivity.swift delete mode 100644 Android/app/src/main/swift/Sources/MainActivityBindings.swift delete mode 100644 Android/app/src/main/swift/Sources/MainActivityBindings_Listener.swift delete mode 100644 Android/app/src/main/swift/Sources/MainActivityBindings_Responder.swift delete mode 100644 Android/app/src/main/swift/Sources/NibTableViewCell.swift delete mode 100644 Android/app/src/main/swift/Sources/ReusableTableViewCell.swift delete mode 100644 Android/app/src/main/swift/Sources/ScanDataTableViewCell.swift delete mode 100644 Android/app/src/main/swift/Sources/ServicesViewController.swift delete mode 100644 Android/app/src/test/java/com/millertech/bluetoothexplorer/ExampleUnitTest.kt delete mode 100644 Android/build.gradle delete mode 100644 Android/gradle.properties delete mode 100644 Android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 Android/gradle/wrapper/gradle-wrapper.properties delete mode 100755 Android/gradlew delete mode 100644 Android/gradlew.bat delete mode 100644 Android/settings.gradle delete mode 100644 Cartfile delete mode 100644 Cartfile.resolved delete mode 100644 iOS/Old/BluetoothExplorer.xcodeproj/project.pbxproj delete mode 100644 iOS/Old/BluetoothExplorer.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 iOS/Old/BluetoothExplorer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 iOS/Old/BluetoothExplorer.xcodeproj/xcshareddata/xcschemes/BluetoothExplorer.xcscheme delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-40.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-72.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-76.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/NotificationIcon@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/NotificationIcon@3x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/ios-marketing.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Contents.json delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Logo.imageset/Contents.json delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Logo.imageset/PureSwiftBluetooth.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Contents.json delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Contents.json delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Near.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Near@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Near@3x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/NearSelected.imageset/Contents.json delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/NearSelected.imageset/NearSelected.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/NearSelected.imageset/NearSelected@2x.png delete mode 100755 iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/NearSelected.imageset/NearSelected@3x.png delete mode 100644 iOS/Old/BluetoothExplorer/Base.lproj/LaunchScreen.storyboard delete mode 100644 iOS/Old/BluetoothExplorer/Info.plist delete mode 100644 iOS/Old/BluetoothExplorer/ScanDataTableViewCell.xib diff --git a/Android/.gitignore b/Android/.gitignore deleted file mode 100644 index 70acd67..0000000 --- a/Android/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.iml -.gradle -/local.properties -/.idea -/build -/captures -.externalNativeBuild diff --git a/Android/app/.gitignore b/Android/app/.gitignore deleted file mode 100644 index 81cda7b..0000000 --- a/Android/app/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/build -/src/main/jniLibs -/src/main/swift/.build -/src/main/swift/Package.resolved \ No newline at end of file diff --git a/Android/app/build.gradle b/Android/app/build.gradle deleted file mode 100644 index 78595eb..0000000 --- a/Android/app/build.gradle +++ /dev/null @@ -1,35 +0,0 @@ -apply plugin: 'com.android.application' - -apply plugin: 'kotlin-android' - -apply plugin: 'kotlin-android-extensions' - -apply plugin: 'net.zhuoweizhang.swiftandroid' - -android { - compileSdkVersion 28 - defaultConfig { - applicationId "com.millertech.bluetoothexplorer" - minSdkVersion 21 - targetSdkVersion 28 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - - implementation 'com.github.PureSwift:SwiftAndroidSupport:0.2.4' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' -} diff --git a/Android/app/proguard-rules.pro b/Android/app/proguard-rules.pro deleted file mode 100644 index f1b4245..0000000 --- a/Android/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/Android/app/src/androidTest/java/com/millertech/bluetoothexplorer/ExampleInstrumentedTest.kt b/Android/app/src/androidTest/java/com/millertech/bluetoothexplorer/ExampleInstrumentedTest.kt deleted file mode 100644 index 9f8b95d..0000000 --- a/Android/app/src/androidTest/java/com/millertech/bluetoothexplorer/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.millertech.bluetoothexplorer - -import android.support.test.InstrumentationRegistry -import android.support.test.runner.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getTargetContext() - assertEquals("com.millertech.bluetoothexplorer", appContext.packageName) - } -} diff --git a/Android/app/src/main/AndroidManifest.xml b/Android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 5601e0b..0000000 --- a/Android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Android/app/src/main/java/com/millertech/bluetoothexplorer/Application.kt b/Android/app/src/main/java/com/millertech/bluetoothexplorer/Application.kt deleted file mode 100644 index ea86e6a..0000000 --- a/Android/app/src/main/java/com/millertech/bluetoothexplorer/Application.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.millertech.bluetoothexplorer - -import org.pureswift.swiftandroidsupport.app.SwiftApplication - -class Application: SwiftApplication() { - - companion object { - - init { - System.loadLibrary("BluetoothExplorer") - } - } -} \ No newline at end of file diff --git a/Android/app/src/main/java/com/millertech/bluetoothexplorer/MainActivity.kt b/Android/app/src/main/java/com/millertech/bluetoothexplorer/MainActivity.kt deleted file mode 100644 index 0664887..0000000 --- a/Android/app/src/main/java/com/millertech/bluetoothexplorer/MainActivity.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.millertech.bluetoothexplorer - -import org.pureswift.swiftandroidsupport.app.SwiftAppCompatActivity - -class MainActivity : SwiftAppCompatActivity() diff --git a/Android/app/src/main/java/com/millertech/bluetoothexplorer/swiftbindings/MainActivityBindings.java b/Android/app/src/main/java/com/millertech/bluetoothexplorer/swiftbindings/MainActivityBindings.java deleted file mode 100644 index ceec0ee..0000000 --- a/Android/app/src/main/java/com/millertech/bluetoothexplorer/swiftbindings/MainActivityBindings.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.millertech.bluetoothexplorer.swiftbindings; - -public interface MainActivityBindings { - - // Messages from Java to Swift - interface Listener { - - void hi(); - - } - - // Messages from Swift back to Java Activity - interface Responder{ - - } -} diff --git a/Android/app/src/main/java/org/swiftjava/com_millertech/MainActivityBindings_ListenerProxy.java b/Android/app/src/main/java/org/swiftjava/com_millertech/MainActivityBindings_ListenerProxy.java deleted file mode 100644 index 5392ae8..0000000 --- a/Android/app/src/main/java/org/swiftjava/com_millertech/MainActivityBindings_ListenerProxy.java +++ /dev/null @@ -1,32 +0,0 @@ - -/// generated by: genswift.java 'java/lang|java/util|java/sql' 'Sources' '../java' /// - -/// interface com.millertech.bluetoothexplorer.swiftbindings.MainActivityBindings$Listener /// - -package org.swiftjava.com_millertech; - -@SuppressWarnings("JniMissingFunction") -public class MainActivityBindings_ListenerProxy implements com.millertech.bluetoothexplorer.swiftbindings.MainActivityBindings.Listener { - - // address of proxy object - long __swiftObject; - - MainActivityBindings_ListenerProxy( long __swiftObject ) { - this.__swiftObject = __swiftObject; - } - - /// public abstract void com.millertech.bluetoothexplorer.swiftbindings.MainActivityBindings$Listener.hi() - - public native void __hi( long __swiftObject ); - - public void hi() { - __hi( __swiftObject ); - } - - public native void __finalize( long __swiftObject ); - - public void finalize() { - __finalize( __swiftObject ); - } - -} diff --git a/Android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/Android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index c7bd21d..0000000 --- a/Android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - diff --git a/Android/app/src/main/res/drawable/ic_arrow_back.xml b/Android/app/src/main/res/drawable/ic_arrow_back.xml deleted file mode 100644 index d426473..0000000 --- a/Android/app/src/main/res/drawable/ic_arrow_back.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/Android/app/src/main/res/drawable/ic_bluetooth.xml b/Android/app/src/main/res/drawable/ic_bluetooth.xml deleted file mode 100644 index cb32298..0000000 --- a/Android/app/src/main/res/drawable/ic_bluetooth.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/Android/app/src/main/res/drawable/ic_launcher_background.xml b/Android/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index d5fccc5..0000000 --- a/Android/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Android/app/src/main/res/layout/list_cell.xml b/Android/app/src/main/res/layout/list_cell.xml deleted file mode 100644 index 9c176dd..0000000 --- a/Android/app/src/main/res/layout/list_cell.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Android/app/src/main/res/layout/list_header.xml b/Android/app/src/main/res/layout/list_header.xml deleted file mode 100644 index 0877334..0000000 --- a/Android/app/src/main/res/layout/list_header.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Android/app/src/main/res/layout/peripheral_item.xml b/Android/app/src/main/res/layout/peripheral_item.xml deleted file mode 100644 index 835b636..0000000 --- a/Android/app/src/main/res/layout/peripheral_item.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Android/app/src/main/res/layout/peripheral_item_2.xml b/Android/app/src/main/res/layout/peripheral_item_2.xml deleted file mode 100644 index c155d47..0000000 --- a/Android/app/src/main/res/layout/peripheral_item_2.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index eca70cf..0000000 --- a/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index eca70cf..0000000 --- a/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/Android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100755 index 93690f9b97e686f53bcd20871d56c3b836c0748b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4230 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 diff --git a/Android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/Android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100755 index 6e2ae022a97dd1e55173f1e502f5b5c423d53169..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6811 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 JPDHLkV1ir`3BLdU diff --git a/Android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/Android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100755 index a039e0766daea262f237a039f0d1c086dce61131..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2294 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 QQUCw|07*qoM6N<$g4_=})c^nh diff --git a/Android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/Android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100755 index e52115fceb474291c6b24ccb873810eac98f3357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3634 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 M07*qoM6N<$f^o$8OaK4? diff --git a/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100755 index 2175529cff0d9f5bd18070b146e5c071637252f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10563 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 RE_VO`002ovPDHLkV1oZl3s?XE diff --git a/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100755 index e4fd6c11f6a0b248d349c71616f9555e054604c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17438 zcmV)4K+3;~P)FUlc@0@k9N?1%y8Q_Sc{O zx&rtWK)-^ZPb=^%fcmt2zyA1F07b_@taZ_Tg-rJq_`eJwKKICXTA|+7g@ecprf8r2 zpTOGx1pu)*&Y3gE(r?0%uI!>*yVoW-!iwlD$j&XYxt*hJf@P#8iUp!5WDA0j4MEHj z1R)Co3Iq*;s%dqarZuUm)+`EWQdKl+id-+N%7$>rzpB2mxk{6?5JGLC+SXub$@{B= zbLU>703cxfqN&y|5kQ?3<>{y2_KZIAu;EUdb(FP&X|P1@UOIQP6S)FZ5oi|$twjXt z6h&Sd3I;ygvZeCN-yc4@9)S8wp-w+{0Eu(v%(0F=@RY2)0eQo+v-2;uT5TsO8Zs4C z-=*FzGj-_`kRm(ct7?2M0uTkjBBE6ehu>;yZF#D;YTL#y-(1}E*kiM$pEH<#jsT)D zi*J9jDz9wBz=Iuj$H5TAsSqvW6$SQqpos)jpMVn!oxD>Tsrd#1KwuI?$WYavL?~Z` zIs#vpZz=zF#^K{?0C2hKXCr|BoB+gtGws}SZ4ce`&(j=E=Ov0Jj!+?Ft6J&?(cKB4 zZdekS{G^G3)@*^gITQ@cz2=tL&wu{xvqX_Ni`(mg^m71^Flo{x>#cu#Jf~#n$f+K$ z?+yjxD20UG6n4KiZqvD2(I^O~Ch=A*#tmq!X3l0t27PX|02WQ%)ZX5D*Ory57uE3Dxzwm9#!85~C~zSRuT_Q5X@%WtfyH8B!07=9 zPKh)Ps;aVAFf73zQqd+02xxYwf`wUy7zg8kGO;tp!i?2U=0UJgx3cs}{m#mp7tMQa z)totVLVJ^pw6_3=$vKa`_}&CxX6~7S)jC6kP^vJVk)BHjj|Q72!Dm&FX$L$`8?07q zOu)puGf^fRNZWGlk38U5)}vKjrUJ_w=+O@vklIsAHkeZvd0Pe1DWy+uAs z+Xls3>|VYXr%jt?f8g1-Pjz~{w=04;h#CA+UF|40qKzi-c;QE(*9y184vR&XWnxjA zMCZf$CjO$T@OOkz+b*L`@Gx14^=+C*U#BDpP_2SiE(QG$&bjQGXWo5x?jEN`dlEoQ zW_;$=4{|0QbofP9r}Jh>gDb7TF<6#GlaONzBj00(-OedQq7X^0T`&|veR~)Uk`oHC zHGza}fr(tPw6Nsv09ZwY^%h_Vf4(IwkPj;eE-bsoLe=) zGF^@EK_$DWk?nQLpuveSa_us*J&r!Ht3=163)~8t+C!)di3q^~jR`;LU22l=MOFTy zwYllO>u;I$#ka4$M%1WFl}vQNeQcNBStT|Y;vJS{<*jEryuRBc6$8{RjXAL%5@@BV z3Oop+&?CU>a`Y-3C(vC|O$bCJXcJ4@=~vOFxd4%*;q+dj2vyXy>Y%^%t^)>TJ+mh? zwcQCI_888Y^QiZf3op1qbh>XM4U4Y6$_9K}xRynBoD3m|0-qIbr=!nuPO96^w6#ze zJKJS6DGori8eOG#*{vcF^0(gk!JAJ%Jm>1GTX!c*OYcl#uQZc){`uUSS%)0;+Z$oE zU#4n;E7gsO{yPnts=)>sxpoP;9y@Hd)HSShjg6>LSd!4_52GPWTAJO^=hM6NBDAog zgr5KQ!;f#h{DPBe4OKr`*I?4qPVX$D-=2Zz{PVAOUv=M|PpN|K1WglM>7qJ11=GRf zMhN*X4ViAzvMhUy@#>*r_ljz@PuEn~(j_o+tFm1UA>W}O+q-*I^uBFx z*RM$~l1bHX3!*k;K}g_&e&4pk?1B>n$dE$|uRrJbnV)>}NnlrjsBa_gMdta-y-#GE zb^ZkpD}w!;^sy~{i8NJ(8(|c=Rb+VgUX~RPa0H~*c0X$T0{o;?^ub;fEsBJ?6XekA zFTC*BtOu^Uu5nig*1G~gmK$!k&pY$af4e&^F^vY`O@nA5?W+C6p<0?l;oml;(-W+<#6EHdCxz6^Sw9CZYI}k8Z9SjklwoQ z9_^-eX?gQCPItylswQ~TCi5@>DvUgvj2xd6Hj2PXgD)#7@M#2M-L2kNA6h3>Hhed- zte~;213SZ3NQ|W=|6s&gYm0zDsI~dNDMPa#06-CsX$zfACj}BQbf|6NyPr?b%P)Of zp$M!#LtUpjWNEY`ghHo`Y_Ds#T9vy2i~tmB0y^pe-vGd3Pb-j!8nyU?s18^VH0(u* zYH2Y7Av=wb#H1qI^Jq@L^;jp=Ep zU@xC2A>XaR?R4%r@EBv%G!<(3r%+qB!!qzF2)@#ks70*xVJ;A6FVfJaP@GZX#?W}w z-U79& z{g7B%o4*6KL4mO}O|-^0;CQI&Wz4mGA&98L0S7QguD^36z$s;tenK2 zQ@Dt-;X^3j&jpk);4Omfu$v*~rA7Sf0V0aQu5AsWK{KKqqp-7N*59hBJ2tFccINL7 z-|xG=$U}VrkmcC3&hp%T=i|3Hd>L1(l%9~%W%8n1L&)_xV6&wsYLKW68a6=*w!>05 z3WC+q2^Oub2GZguU>Q6O;()0TtoEcv&tiTWH$(pTHfa7jX15VCi(s9mgD72UzFFO; z`0KjX4m8S6gawj|NGj5|Fi{r9`x5|FYH$0`BR5}r^Gh$yZAsNqohpDB>w5dERfi57 zKI#P(Vt!Jq-#KNnjjC`867n4?GQAF1ddZ4N{vLp)$WY3^0Rl}B2Tg_O&S48r0MK@> zhWx|-Aoe=|mf=T0aQKphi{*(G=}ysQR@X zBFhFrCyP(vUYgoixoOQsCr#aVKFRHdP@U8=r*KyWdCR0plRVG7_sz$e)xLjfam*T% zLo(2Tf(#oAbf*PR_oCBksNn#V6|X~Wu7G{&pCGuhbqEu<)_)B7djipZura6P*|H(0AwjCDRI2@)v9Z3-kduUzEhVJqUUC5GO{co6lXYCp!+Vp zm;taI(q|7sZQcRfw5uQ%j(}jX7@t1`Wy`k^`%QrD&{+^Ni*?qJ00mL2*C6!fHGoPU z0-cu-2<=DR$ofm9k5uPQUj3TZAQ}}XWEL8tv$SMnAqxL!Z>YKB)I;`tpuWC7n5=4_ zEP$xJ?bVMK?>l0`)pRJ9QDh-JC$u=OD?E17$fNn2^Ifb`iTfWHaW zaVNvF&yj%539Yq;eXdrlfS5M~mWeZA89W8B#?hs< z!I>OeOlD48)o=2LP!|*sB)4M<4p~7{tJkkwa>kiQ9kj%xl_fNkWC3I?96Q$W#%rI= z_GIT0_2EIjac`#QW~uN9Ar!hP(A~bLyla9Ah(4njsD)S7jW z7CZ>8emewjE-d3ugk}6m5FNdSOYNTD0 zs^4x7;3s`10qSYOyBut8`q!B=4!dpps#WdDP@!Z1#2lq}KK9?z<7S-pnqak0N@Rka zA@h{jr}zI+X|+KoE<&@{GpOe-oG4aX^WK=kM`*RH(izQJG+m2C=| zRiZ>mMms9fx`pq*e%f^xow?BvsLA0P_euspL~ZN~R&4!ae#yYc5_MP5#4O~JU{QlM z*wdt<$DLWM1|$zD6696$A$|T75Dr4jDT8IqQLyYY4f5&*kiY&P6Yz)Jvr+EEdC0Dt@r zNv&_F+IHhn69)Yo0LenUa$2uHP82|l`kZ*i8QFI}{QOc?u=I~VB)zHyrP$tg8Xib#{u{DXXqLuY$n|6Lw@WmTuD&OmJk&K9p7XkFkvcX}GFOVkIZ~9uP;SNZP zo`p=?|Xb<2;;I?luis~wgxhr@d4A0TEH>gEPYR`E2nLd8t zBL)?U8+?`sfY|aq^6wW09(vNuH({}jiN6xMt-_%N(ccSr+20jcrqbSs@Tbo} zS-yY_Lwa+Y3u0~=)aELngJeqMB9_)~G;9a`4wm8M_p(C%X(2+d-Nh7y9##>ezy$+f zKl>h7a!TVbTN+!?-28zKY-`mJ6kHHkt)uwcttryhkKcOfJ%r+H&n__zrfaQr5H%t6-lI@gf7w+x&!8}5DQ6es zOuEBB@Mghsz=^OOa5AL%PeT5I47n!Rr>iLhZw?&i+yhJ5$aD=kp?WUkWnK0mK02FxED;0_dAVz(rPMzw#_nEhD^JVAGCM6@@3`nhXXdw*D z6yR~CDI_}HP5b!0+E|V7yN^LxzZ6hNfbNc^9@aT3Mm1z2w5m-YIfyL^`;D%JF$@u= zTwXZOy$6;-ty6$riiPblk_b`80c^28#yoHH20 zbA%aKaC+c4?`~L!PS_*MKmv6|QwQo~Vq=MA>&jAi)BLwzoH=LKc^l&S$a(`1^LY_~ zUYNgl`shgqyha7S;;jN>2}&3xP6-8>?!LwI#JgFVzbAoNBdzL{`*jd?g2AXgLyuF; z0xA*6;qGyF2Amh(4eQ{sX&!B2-4QpaYYAX`z{WJl1bvP2`jy{baMtw6Z^cvT;{k}s zhil2U*5~YQ-^uZZYy`o}K@9M!$oBm_bGFomYJ}hUH{_LH0*c||>Xd^xt1{O-jLz3t z+I3DLoR|C!meL{dmv0xepa;68y#rfX1t=B=L@wLKxtG7C{++{y=bsNs<=17QsPWUi z0f@1$i?6%6^s?*jSfwF;H4R?mKv04hoB?EbcCYrO3&br<9T(lH`=FT1qoD@j_nwBl z{0l$|MV31>2{}Eh(VOKZalk%sU2-?XtP~<%(f}x$3q>?;YSEyGPG(V0hze3fW*Hvkd)a=iY@_cMo#o%C!Xb0Gk!l+UAtbO3pGKY-NgZIHfv2ev84 zKA`xZ)SakKYkeqQnW)XImnz;Y&IkcupV$UoM&Cj43&H0;sDy%tUFlfJ3A;PvtVAZyDUcTKz`zV3Cu8@sFin;q zEu4qYC$GXb@o?Ct90{?oKj26$Sx=S1kQaZ9@H@{yYpgRBI*d~EkXFrX4id?sIs=Xw zmqM`jFi!hum8OI(SZ{V`OOO! zi?t|`nd#ATDr8wgwiv>|JU5GP-V>MF){OAG&m;Wl+brl^aJnJn6hJH;46*+ZSo#lx zSXc(Z;{_~Mwy+x6e?md1^)*noZ-TmI4b<|DQ0gjyAW`v%i>vswim{@&=$NPBlq5agfP<_>odybhn;8Bwt)Qycr0}y>?8#!{M@9{Sl-k6hLbag^b6u#c9 z%&iPn3Zd8~qbx5oF{wYH870?4Ni;8(=^5=wy~N<+i%^<;RA) zFv6k>R=Zv|GTF=D+Whr@9-MQ*|NiwzMKn1m8i1JmbHP=ADZOC!O)t1SzWvQNHRm72 z`katY#kS>e2$^CCg9^NG8d(>~P9QDqi4u{Cp}GPckK74$$5v?J5KAfQygEzC^Oy|! z#{74LoD+F^3SUXuB$BC^FfVuALlohdaSj}3UX+kesxR{<@Pxu)Y_4rXqvU|y;V`IA zd|z1PeM24owJ*+nppML~t)sKd3WC%NvPlwr+5o-~Q&jq&! z)^Ynm95xDKPA&ru0ajkN1j^fu9XYPfjWPAIV6i4{fhEnwdq;D z2^kP0=BX-j{ktzed+ME6U$n}QgNTiFu1q9=xc$d@*W=Icd;H9^KiAOH{}mTNjQ?wB z4}@^<>r1e?svcJ#Jrw6o8@0y^Vd|kKDwBt#H7g-4oDX^RN}!$Ua~nY7ix`!Kb)7ZF zc%j1u>*%qtAA2gSW5$7i)LE5YlAzXBBlO1q5dP!?*bX@Y?%6j%aHY9KHXk_)Bn#tz zi#Fhnch+EVNgn2$eh}PLsXsv%Mi0s-K>p;dSC9Y8#ivmUG`Tgp*@L11i1cpPGjA_E zdBTCym<8JWU?%jpkwN+1_gnGcyUX+hLOXEz5rc95Z}vfMhL?prr1C`cg|zn|A}n7l z2zA?5gcmP@^8FI1bv4j}LEQ&tfUVo_$bLi-22K~OBgepg{Hd^v9t+Xsjv6}302>S- z@YLh1jq}_~Az0HJp}>>{iY9Dn$CC@z;DL`fpe0Cg^;TSS!UW7Xa2Tvq&OUx5PSoXH zw)o4-E;{MZ*9?PVH@{dk08x^-`;A4bt{XIR%#EpR7`Xvzn*+H0_3yBHM}x5ubRwXJ zlP478iepA$WLYjN+p@P@Y!f;HP%C#psjPt3Pz$ZK1?cF|Wf@w2GC=w=Ar=+GGH?hi zW&N2^GLZ*CZEJwFezXQJEU7?%oDP(&DvB6hoQ-?V zoPz#&zLecM+c&Iv^wdK}-)#Vh z1MjXtAZ&h;71#t7V@kZZTk?4o`;E^SVdY1n#% zAO)KxFUZE)0~Y%%N%(ec1^)8d3aqSXLr4{&(J@m-8WL4Gx$@XCIQf7fDQRJJ@0yBj z^Nyc1=rRBl-^*(X=?_)J;Ftymz_Vb*_NQ};`<=+YkF=}B1eT_;s-trktj4_Wx9OX~ zFWL;!d^8y)88%#X^az|Wbp(9wJ$E2VDi6rs@Ecvm4C3|0n{embt5Mz<)DLqJE$kfE zuCPep*zx^v!^sojb|ywGBj?vxQ}NMJ==K}?OCXas$x@B zBc5Bd0Z%R3hK3H6`Suv)Vc_X*a@eOd3x7Xr3JOy6O|~@DE;(XU;S2z61_kPjla2)- z@7G&eKXG||`zE#6M&*c#x>nru@)B%s&_f`)Yr{Gz*C~+#hp1vw|4iKVyYZMfv^Zrl zo76ae#*N9owsLC?u6^-GEZ*9TphDV+&Qd!Mwu=BzNwymg{9y`)6zdOZvX{TLW!+)J zvZk8=)EU|l4M1e1@GUO)FSWbe{gS#FJsp~cO_dF}@#XJWkx1@)>W(Bs6(&kVsWgg$ z5k+p?dFsBHHm2X6H996W;oaAmC=Z=IwrKSZ%$fHSzAJChSrxG@Mtw{YiAidpKl6P~ z+<*2IjOv%0lrxpjE*S7{n>xsQsKLUxD$ni`2_WV~B>;U_8D3$r*^&#RGsx?#DhNF4o5IgHkDrRo8etHemXweB5^Gcnm4YO^M|0oiIpkR0N*# znnv6{Zw2Npt3o?jVVD+3FIK9*2XT))DSBX@2M?S*1^o)LQUZ{ss-elnmJtAGL*oL7 z%%t9>mEo;cn=QF8I)jC^v<2{w_f}xhI*LPze(9z!lWxaVXH|xvDL8O&7Vexe7Gnn$ zv4We4*jiHCqP_E1x<5<8imf%c;guip)uv`6&z;zoF7ueLSfT>0@3J2>JQ9u;^JvTaMsje$jR{NEt9Exvv*>n*HLk^M^l?0uYR)`4=>oj;(2t#AO}v@ zw#5n*;Gf$>0p}bt6z3j3Qm;>tf=?_Q>}WV>fP23P3dB6oF#+`DrsgG{jLfoR_kcT5 zH&oW+_BWQJrX`pdfOsojshkPdGP2zwPT#*Dt~-8T$3PI;L2WT@!T#hq?ZksLtzUI*@&UXq_M001BWNklo`+GN!9_W++4Yiwsa*9nl}nEqS9Y2Kpl;P% zW2*7xV$AZpHqYr}e7;I-hQLk8je z-;6*(wlC#HNo8KU;y1Kb^(}tP{d5ifwQw_bw#ml%@&6Q26A93A8!V1lwpZdX&q)x_Br-Nzyd7(1YdMLi5J_P}cETMh2=&FkKsanL@0 zPQ(sG&QxMy-sk3jbK|}f54<9!#WY+R_3aAYU)hAp>Kg2*Ys9A7W(4K9RnxlNvdax( z{6!#C71%@-QwC+?Pe%;L(c=gFtgP4Es{HYaay<6&dVIaP36iR-=iMBkv8YcJwU&S6 zu!Pts z%D++p5G|0bsQ7wo7)#exL6Jg`r4U-${a9Vyh_)czKe4O3plGsQ(`h@Jg5nGtuADv` z=N`TfJg&Xpt50ha2!`>>*XwcDJ8Q6`Ic$Vq82+q8&IF5L7xCDw7*m>y9G@39n;jOr z6Z?(qhr@>0V7I2Oczm<)gX?FXejKGZb7yK?0C}#s{cq#XzWC}7ER+jkW>1j z^5Yu<3f^1MjJn2VW@Tol+ei{x{2f?Z(}3ncD5`oNVP5PmA$H!&aK=*TEUEe~5wm_X z7#AEq0{Ph)EPQisQ}y+vOHG$|7OckO3pbp|3a-VtWRYPXo zaK}3?kGC)}TG7=?k`=6~lJLcvTF8{FXDl9VwyMbJ2nDgVwi(r}0fY>e7Sq@m^$Wu| z$wN*xqDC@~9aD(eM~%b*BZ}dq=)t|{BID{0n|I=o`D^gzvTCTzmu1L1omy6e8@&gV zdVWBZr8LunLHSv5yIc?{BZOY`pCG_uv*F-}?y{kKz4 zJr5|084tvA!YCr~w=>TiaP{pE{x>JDFsYCZ#^1vVKHU(&+VXm%_@rL?O^@QxK}0NV zXR{w`Y8oLaYHVX;3}kiMw>w=R3M^1DG~bDPP91~k69=dDq{CFP$k@3o6T>pF1SQAM{t_@9RhOZy$&Ef+YF$C%w& z1Op9d>5%Z=s&-V@QzmFv@uf~m1Qn_*Q}R9Y3aO``QJ+SISeI49jENz?R<@zJB?3U^eK$P!3`B~|GASz>nz6C2rF+6?R5(SK70Bqw zhGwYxWG|Y~&xiYdKOU2Ym9PN*-Ek4iTDraxH@vzG%eJ@aQG-U71iL?NHdiR4K4H-* zk3|HA6=b0_ClfA*&a!ynOkVgr+WdT8FHWAAjnYhNpSU)r%1U_o_uo8x@kxh19-+c_ zru0Svi0;oSlaVTa?d=a9_`CD}G}mr-7Q}OB>D)^<_|aJn@2+asDNszc%2*`YbOS_` zK2y`uh7CKL&>ohJfc)OcdpBy;Wi--VAS|OoMv>2oTTU8{Qx6z|Orz{xy0tX!MW=d% zAN;Ttx6J!V4|J#VHO#Tfros$eFo~~udF(dEvWl~O5N%e77QMz%A_;?;89tmmJ_|*e z$z`ZY;c)9aFFt+cy*FI;u>qhSXJ|wN5Kry#9C+xFC4YP7_1C?=%;B9I731O8Ih7vp z-5Lnv!!;eKsBJQPN25OcoMKQgKDj>>Im}f3%{!Y=+fJVR800;s+Qx6wJ%B&UDd42> z#klx4!!fcfk7X$6)IQo0Bu=L|a5_R^tgC3iQwuj>-j7v!)F1#T?sJx^f#MR{2`ajXy7p5y=&@V8Z6f5GXeE?)Qn$v>olk^Ixm zh!<`3It6KRs=o2f+Q$bC8QE2#BMyK_1`1H@?q&%;krrkyU=U+p7)aQD>mVZGx+56G z_J$UeH@538kccZGSBQ~|MbwC>oK;XUB;SP@lge=B!9y^hAhT0bOJpOuQ#;+R!|E{C zx8Rj;x8mg`<=9XggrpiQiwVj+1cMhA;@m4ffJn>gpY6k-d}3M7p7Krt;Gz4E?3at_ zBb@L!lVf4qHm>{pcT@Md7yy-a=^;R~2QbQ>(q|+r5F7J7@bqivPCIVK-MlbSkD?St z4|+s~?gOI&Q)_n0_+o7n!l5Wm)Lzo16=rl)nSqd0{ffp`Y^rNPP*S>8fR9Hbx^YgX z>XRQ$cZ1NYB-4(wru4%xzko*h`%Fkw6mS`mn%22}-0gkaiR3UEa$UICewZWFe zQR+0_g&)kj>-zI&(2)l{!Z`T)$D-d{koFui^Nitt{o9iZ+#X+#_~>ZFh#lxA%V=nq z@X^`;b~YG-v~kDyoJTLkLLk!ZMPW3x`?0CE1&skC%cB?cM7KNgPkB0#?vxcZjh$gO zFwcelIUe-S^=0tm^*Bru}4PkTP(XNr8ZMM@3JZd-)?AxDw7V| zB{IgN9=bNA3*^l3D2EXUg|K;NGb)?g^$?+$?69}qxm={H{Omp~U`?k`G-;Pjgv&01 zoRU_H{(O;XAtt6shw^o^aa08}5Dhxt#o>E^VwgHo}Bq6>>O?npPQKZVjWl zzLg2dNnM6rM+Xvtl31FA+LktKsc%6`N4S@G>+S~3-prG1OkChL%n{K$?yAli3pAZw z#i6<8@nkq`7*ddhqAZ_Y2$R(^G^j-sV8&lV0R_1km^RdbvMgd&B^}<}vz9^(L>Y4Jr(ZtR|3ne9kavywQ-d~1|8vDn@YLn<13Z>zOLLuyER`JcY zFzOpgm{0QJ#zAhqR%9r$gjRnCbAi+|RX;vIiwhv$1y5DeQPorMHR8AR{-Q5mcMY+3 zZ7bj7#PFhQWO+OgStT)D^-sjU6KmQzS(!L^umgi~EG!d)7uQULeQBDeRczh#;Z^50coTzwF2hh%B57rnEh@g)s-n5M zxp#JE+OzH&pAJfP{<|VGwLBaSVPj1rb~O2+bg~`JpSnibBL^+Y1iGzE3`E9N02m=l zOxv;u0{UfpF|05fPG(iMQz)S>@1$_{J57lwOjdRd4jCw7K$gHlS*Zq7GS+8Fl7e4; z{NCTMKmXMK#$#WxA0d5#&1}qb%qcSmUv>M#&*T-BBysd!SFJ=T97cm*#j~h!msq4M?vSF&J3S}I`*B$<7?hWZ zetDUC;1?@&&RJG!f$vtEgK3bH%S7b+EPB628c!mWhmW?Qwr2Z7w_J7p{I^~v@4Gny zG3nEKs87zum^Sv0=ia*Pu%nK@mL{9{Wq^p}m#~EPpoCR*B34y&AY?v|loO7)yQMcE zdkha$ljSg40|Bh5qChp>P^!1$oyE3(rjPQNS0pxAN#5DFEFT$eCu}4vTM0Nu!7BFH zCZ}o9PaIAU_AT>ZY>^6|Q@8gJD3i^hBe`|a$L~CG?H^B}!s4WTaqDx;V=v>4mKzmW zob=Fr#uoka<@q1x7ZnvGr&1d1j6ftyOvT^aC}4R-nAP=T8d^^UB~Eq5u4=HP@ews@ z?+7qI+RoO1&eEcH+C`<}H|bqS?*x7Pj%a!X8E%X$%3)q~3yT`mkK|7DK-?Y=tso#f z!;4A%T^N?5!RfHE+%KlCC*d?@kD8{Tp|+;s(o>H(e%q$Cl#^~Y9>!Fm;{k~JCT)yW zEh8%Q_h()|=g{fL-)yrxlBBgniFDROG7LrN)wF3?Rw<*R!OvJx{N3tFQS=xiVr#nL zF%$}7TU`rwG_@mW)HXEJqHct#7c!a%Axu;-cUr9|%kp4AeimF#I`BkS(RD#N$z?Rg zOqx|`jvEuo?C6&X#q4b?-F+uS-hAc_y*Pp)s@HKxtP7ps19R?UTH8R|jo2fk={Mv<4)ss1>lLG5{$UBLOi&vN4z7(ls7k zz}7(|F)gj3tsQHs$g6K=X`E!lA9lI`c!-C` z=gZ4}@cGwgjobg=%Pf`@f@}@1y`~t|?8$K&4r6V-h~?V@Xm2+k>=s?4(T#!n(9Pa@ z60UV>q^tTZ?E$QvzZA>-RU&NzG>J)2s0=5dhJ> zc!&p6>Cd|KigD-8zUkjNxdo+(J~iFj=@wqy`>v-!2g5S9w*bp4L#QRSyp#QO(SpRN zf{Es1{Y?*?R0e-2F>xx$*vnw zuEK0D#+TVKFbi&#I2@Vx z{O6U~ha7p_ERyz9yEusS@K$nFgrzVV{R)=X02`{>nCrqU7{vvUPLkOFn3iU^KqM)I zn&x(_uW5>z*qAN=*)0|fFU&+qc7~BsY*>}amzAQtLzHVsaR&A)6<8HF8wtu3RAxHH zJ5}(IQuEDc^Z(ypExboYuX3)A~&p95>~RmX;O*57~Wq+;dFTJy{uux93!-QzM&o)4hkD`iG0|&&tWk zNlvYgoKhD{V<3_#cT7TglZNG066%^r)i)i#-Sg*B*GMNux*dwyj9Bb-2uHppQ@NL)7iG&26gk>KyD3akoToz(>p@P!V+6tET%?tt8!|ThX7cbM=Z;N zvP^PG5Y;j4J88m$0~7(;VYR?*w}M;{`92piTn<>6@JjX^J*7scI!0YmPzn9t)2EA-7rY6WS;jJ&zq*9rLn&LnMeP2^^5=h2c5!0Mnj@L{5-IP z!zNN04v!ULREWY}Z-3CxJz&`nc0Uq62&22mBctB|x+M1iBFXq4Vz?>`2eKEpl*yBjccyLW=swN*97pSx6 z{PX!)`%OLkB9}`qhS}GPi@3D8Bo`@)gkVU*_7)94?vSywsg21rOw390W}QMgPetN^ zWgy^mc}Ddk;7!(V77k<>|5y^AkrmM`w>`u#5)3jKvi|d2I``A*FgT;~@`PW4AKyXvF+BN%0 zY&vebAePEF$P7|ekb$WKMC7_Hu-Zvj<^lA56O<#zqpGU5W6Q>sf4}ka>z6EAu-zm$ z^K_l0!$wmD5RHwyIEa-o5dHD;>nERa(UlM67ZxXU&U_*Z&OyX#ZW^Jok|d$EL&2I_ z6>F+PX!p0r%|A2WD<;KCfRrWBB#~(`;CZ}mj4pCvWPylmH>v1WBea8}2U8Qkd%Jmk zO;y9Z7oNWL$-m#aC_?MvtSjm1^#wrm+iqH!-R{k}>A}a(oOaX+H~BKN6I{sNn{~7N z5+x#|BeNIjEUml+SX?fliPESON*3#dyz;OnYlH7R-C)u7~DaJueUlP-rL#&Ae!MuMX4RCe#-I>GZqHTTfJo1R&o7&&|7L z@%TXw%yhIkS+B!kRJLmPcDu%kS&>J+x2vzzr>7Y) z0lb)+kkFl{zh{k`e9-AGkJoMzL%Yq>{CQGOHb2JOI2oF3Moj?)E2=eY ztO=l_gG$)+VrfqD#z~E>7d(+wc}SrblS%|uK%Hv(SWU4z>83g~lwe1P^wSSZ-v7tV zvme^Hb`_6tCZUnNVF!o zkKOOgg*q#QI06G$A5_b)q9xwLq@4|>YjinepUGc-W58ralt*e$Tt}>_(FA_y;D`~AOa-!*=K)g?)LX;9sXdzbS zDJUI~bKl$-AK7Q@q=`1Wot4gt#j4`&Kx`V#Y&v8VB)N#99k;g#Sh_uo`ldGB1;W%V zql3u5qx73VlZ1v#{gAOSFWZL$`a94+Q)S1V6L?r0begQnk%M75`;w%tU%h`qtmj-j|) zWfW#0*~oB#5Rj;V<&RYww(V?V{;%CdY0Sg5*&P^=@4=)}3krRrPIZ`y-jyM`E7(>z z6jZlvSo{6lzu$V-7aza3%>WMfa}jum^7I)z>11Ji-3TCNuRT-mrylX!{^wnF)2$;$ zk3Z1qPLH9nC$5ZCXd^eDMLTxL_^DRFiXDDPA%9#DrGr)RaoKpFdx45fw~cwx`x-SE z_gP{xPXHTNuUh`xKkvK!^AF$J5{2?aO%P0^?`Un(Nr56kL~af4?r`Vi6lC2s_r*I# zkKgZ5k5AXmcFko9;FriDD`8!OfMq*^Xm0fzE{kaJOV4P?UzO=|V`4uy_Q_Y7Bb2gD zDR@(7S-XG;8~(#!ARw(?{@vmmFZlgmo0{q=(~dG>oaI=ZVIni{@uHe-hSP`Hmq4$7Xcn_X(qOnPC~oO$bcC{ zBv=zz2t@AwLq_CYdj0KZO`LMbrFjKKRE#HmduZyZvmz|9G)aa;>Chbtwl->5TPw4I z-xN2Uj*B7&vok#yU1-JNYylZA(Mas0dP8OpeLC*ey$?zxXsFw%EnD*C(@#Bo_e+~s zcY=qEgk;ayW#HL$k3-iSIVIxS83BoDXjja6;HYWGoOD%jzyA4Ft9@7TGu`k=0sMyH zkqSPvhg7U?v}0>s2yN|tNL2ZQosyW~!zt*Vd7IS=pU;bdxekoU3&ZE&f^v6xC;hO| zdz58KtEsGLTJ+((#~!@xnhy-iGO;WU9&%A|nJ2-?B{$k#xN)5W;es`>GqMvg5ZP=t z&&&%hA9vIVGcO!CeB?nMUuKVL!pTh~c56tz811-9dpO1#4b9k3htLH12?dicY`q${7<5 zIQWmb`9%)Bc;qg)Or>JTm&RkT^-vK7Az4FE7C@QN9g+q~0VGzo51`lryA^O*1-R(l zMnPr*0}BHTy;FdhMNj$ORrVd~n;wGZhI(n);xAu(Y3_rsEnoUgwE-Lg505A$%0uAk zla)DwHYi8zQzLu0a$&E@i5ar1r09y0y6mlc){$g@~1!miX-^rx5t$&6xH zotdplXW}D!WI0P?)P#Vcm(^uJp>rsBN)6RjG_dq*u$0HFV?-ik_*$ErP+7iZ>sKGY`}jMr{P%~Nifv@y;h^DKmf5$&#!X0t(%fJ25suA=X9VL8?ucQ*@*90!++%+!dpHK)yHbDePdxg!rb z>ZIfQ4<33@c3wfL$Cn|H;QC9vNVxa6w`ooFwbk1;ulr{4!cRV)_xw| z*&{3~+6M0Fz2Gb@Qa0kO%}H!+?Bs(>4?XhugGcN;;q=^sqWp}koP?{6?&%4}yFY1! z#Ht#0RyS{6xB89G0qFx4{F`SJ7XSbQ%}GQ-R6lrY;j(WR?Wn7(=BYMBZ8*i@?21#J z-O94|MgW;vn%Nmk0OG8TgUMc4TI##->NzKl7&GpKlKumWJ>E>Gu153Pg7LO%&wtO4 zgVHHZYiMWX_S&_pmVGey{yW~Nt=i73f)P;Y#eu^q4grV9@$54DPNJ){r&(CEadHrG zw#LXBTD)Y-ZwYDV7SZUv$o@skHkJaFofMWy`@@nvRZd3+h595rs-+g%`uybl9Sz>oI! zRXhgT@S;J<6`4t>NAZATz)tfkYIE zfW+VV-}G-=|Neu#$ILuu!qCxUr{otDkI&4>&GuzwJ3U^XU9?z49#WA`YjKz3Rxfa+ zDvCyDO|-T&1=|`MTWWV!uiUt1)#6XzetFsE4QogZCl*A&;4coINNPhAXSdpQl6}zj zb^yf!5~oTGG*Mo}{;YXLMXrMmKX$;N;rk3OD(ycoJFl>x$LGs+yS+IMr#shXx4T%B zU}vozy_!4Ekl{D$DIsIP4FH!)@VEu%)@7wyLsx>$a+j^147eNKb*yS{wF4zfG0p8ckT{rl=m<9l5Rmxa=6Cv=|AyP4=sogf zrhc3X@OQq!^v;8{=$*40PHp&mB#5{Q&fA;&>C2kz_TTyCw;4oSnCJKA?8N-eH=e&o1CW^|MPpAt8*1}QU}5o|Fm9BjcF_Q0raX~<)4x*z z5CO`}ddwh-{Eq(30kc=jHt`mEZ&%|J9e=!bJh+Gh%S^4Jea5LyEXr&aYB}rTpT+z4 zF9I;pgwlAM@JsoggTnmI0cB=ak?qX$H_Jk1K$xkD`SV{SXv_=pOOS!m0r1Fm=xtph hLGg_dP diff --git a/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100755 index bb63a5eb7c570d92a223028819dd896f678c416f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17424 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 TZMN~<00000NkvXXu0mjfGiIj3 diff --git a/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100755 index 4a6e4a88452a1285261a0eaacc34d182f8dc3e63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26287 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 - - #3F51B5 - #303F9F - #FF4081 - diff --git a/Android/app/src/main/res/values/strings.xml b/Android/app/src/main/res/values/strings.xml deleted file mode 100644 index 1c0f157..0000000 --- a/Android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Bluetooth Explorer - diff --git a/Android/app/src/main/res/values/styles.xml b/Android/app/src/main/res/values/styles.xml deleted file mode 100644 index c34b820..0000000 --- a/Android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - diff --git a/Android/app/src/main/swift/Package.resolved b/Android/app/src/main/swift/Package.resolved deleted file mode 100644 index 67e1c7c..0000000 --- a/Android/app/src/main/swift/Package.resolved +++ /dev/null @@ -1,97 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "Android", - "repositoryURL": "https://github.com/PureSwift/Android.git", - "state": { - "branch": "master", - "revision": "937413a8f7f741466850eb792f4f162378bb7b65", - "version": null - } - }, - { - "package": "AndroidBluetooth", - "repositoryURL": "https://github.com/PureSwift/AndroidBluetooth.git", - "state": { - "branch": "master", - "revision": "fcc0c03c440cf6855b95936b7260497cbbbb532a", - "version": null - } - }, - { - "package": "AndroidUIKit", - "repositoryURL": "https://github.com/PureSwift/AndroidUIKit.git", - "state": { - "branch": "master", - "revision": "d23b4fe083d0a0f1f1767cb46e747efd69a8b96f", - "version": null - } - }, - { - "package": "Bluetooth", - "repositoryURL": "https://github.com/PureSwift/Bluetooth.git", - "state": { - "branch": "master", - "revision": "b03524c7a0c7eca048133a9df9dc4bbe727b38e0", - "version": null - } - }, - { - "package": "CJavaVM", - "repositoryURL": "https://github.com/PureSwift/CJavaVM.git", - "state": { - "branch": "master", - "revision": "3b19893aa50a724c467d341c482087c30323b190", - "version": null - } - }, - { - "package": "GATT", - "repositoryURL": "https://github.com/PureSwift/GATT.git", - "state": { - "branch": "master", - "revision": "955a19b2030e08666154f2ee52d7955f56bb6ff5", - "version": null - } - }, - { - "package": "java_lang", - "repositoryURL": "https://github.com/PureSwift/java_lang.git", - "state": { - "branch": "master", - "revision": "e308632de721a79119b4a76e3b62faf5893d4cad", - "version": null - } - }, - { - "package": "java_swift", - "repositoryURL": "https://github.com/PureSwift/java_swift.git", - "state": { - "branch": "master", - "revision": "65deecc81042d0839a7496450109cafd2a0e1741", - "version": null - } - }, - { - "package": "java_util", - "repositoryURL": "https://github.com/PureSwift/java_util.git", - "state": { - "branch": "master", - "revision": "5cad067437a2567ffcf0ba9ea1c2f19d8b414d61", - "version": null - } - }, - { - "package": "JNI", - "repositoryURL": "https://github.com/PureSwift/JNI.git", - "state": { - "branch": "master", - "revision": "29239efbdd3370dc17f06f9df5380ecd2997370c", - "version": null - } - } - ] - }, - "version": 1 -} diff --git a/Android/app/src/main/swift/Package.swift b/Android/app/src/main/swift/Package.swift deleted file mode 100644 index 4469a59..0000000 --- a/Android/app/src/main/swift/Package.swift +++ /dev/null @@ -1,33 +0,0 @@ -// swift-tools-version:5.0 -import PackageDescription - -let package = Package( - name: "BluetoothExplorer", - products: [ - .library( - name: "BluetoothExplorer", - type: .dynamic, - targets: ["BluetoothExplorerAndroid"] - ) - ], - dependencies: [ - .package( - url: "https://github.com/PureSwift/AndroidBluetooth.git", - .branch("master") - ), - .package( - url: "https://github.com/PureSwift/AndroidUIKit.git", - .branch("master") - ) - ], - targets: [ - .target( - name: "BluetoothExplorerAndroid", - dependencies: [ - "AndroidBluetooth", - "AndroidUIKit" - ], - path: "Sources" - ) - ] -) diff --git a/Android/app/src/main/swift/Sources/ActivityIndicatorViewController.swift b/Android/app/src/main/swift/Sources/ActivityIndicatorViewController.swift deleted file mode 100755 index dec5903..0000000 --- a/Android/app/src/main/swift/Sources/ActivityIndicatorViewController.swift +++ /dev/null @@ -1,151 +0,0 @@ -// -// ActivityIndicatorViewController.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 6/19/18. -// Copyright © 2018 PureSwift. All rights reserved. -// - -import Foundation - -#if os(iOS) -import UIKit -#elseif os(Android) || os(macOS) -import Android -import AndroidUIKit -#endif - -protocol ActivityIndicatorViewController: class { - - var view: UIView! { get } - - var navigationItem: UINavigationItem { get } - - var navigationController: UINavigationController? { get } - - func showActivity() - - func hideActivity(animated: Bool) -} - -extension ActivityIndicatorViewController { - - func performActivity (showActivity: Bool = true, - _ asyncOperation: @escaping () throws -> T, - completion: ((Self, T) -> ())? = nil) { - - if showActivity { self.showActivity() } - - async { - - do { - - let value = try asyncOperation() - - mainQueue { [weak self] in - - guard let controller = self - else { return } - - if showActivity { controller.hideActivity(animated: true) } - - // success - completion?(controller, value) - } - } - - catch { - - mainQueue { [weak self] in - - guard let controller = self as? (UIViewController & ActivityIndicatorViewController) - else { return } - - if showActivity { controller.hideActivity(animated: false) } - - // show error - - log("⚠️ Error: \(error)") - - if (controller as UIViewController).view.window != nil { - - controller.showErrorAlert(error.localizedDescription) - - } else { - - NativeAppDelegate.shared.window?.rootViewController?.showErrorAlert(error.localizedDescription) - } - } - } - } - } -} - -protocol TableViewActivityIndicatorViewController: ActivityIndicatorViewController { - - var tableView: UITableView! { get } - - var refreshControl: UIRefreshControl? { get } - - #if os(iOS) - var activityIndicator: UIActivityIndicatorView { get } - #elseif os(Android) || os(macOS) - var progressDialog: AndroidProgressDialog { get } - #endif -} - -extension TableViewActivityIndicatorViewController { - - func showActivity() { - - self.view.isUserInteractionEnabled = false - - if refreshControl?.isRefreshing ?? false { - - // refresh control animating - } else { - - #if os(iOS) - activityIndicator.startAnimating() - #else - progressDialog.show() - #endif - } - } - - func hideActivity(animated: Bool = true) { - - self.view.isUserInteractionEnabled = true - - if refreshControl?.isRefreshing ?? false { - - refreshControl?.endRefreshing() - } else { - #if os(iOS) - activityIndicator.stopAnimating() - #else - progressDialog.dismiss() - #endif - - } - } -} - -internal extension ActivityIndicatorViewController { - - #if os(iOS) - func loadActivityIndicatorView() -> UIActivityIndicatorView { - - let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray) - activityIndicator.frame.origin = CGPoint(x: 6.5, y: 15) - - let view = UIView(frame: CGRect(x: 0, y: 0, width: 33, height: 44)) - view.backgroundColor = .clear - view.addSubview(activityIndicator) - - let barButtonItem = UIBarButtonItem(customView: view) - self.navigationItem.rightBarButtonItem = barButtonItem - return activityIndicator - } - #endif -} diff --git a/Android/app/src/main/swift/Sources/AndroidTableViewCell.swift b/Android/app/src/main/swift/Sources/AndroidTableViewCell.swift deleted file mode 100644 index b49d554..0000000 --- a/Android/app/src/main/swift/Sources/AndroidTableViewCell.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// AndroidTableViewCell.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 4/30/19. -// Copyright © 2019 PureSwift. All rights reserved. -// - -import Foundation - -#if os(Android) || os(macOS) - -import Foundation -import Android -import AndroidUIKit -import java_lang - -protocol AndroidTableViewCell: ReusableTableViewCell { - - static var layout: String { get } - - func awakeFromLayout() -} - -extension AndroidTableViewCell { - - func awakeFromLayout() { } -} - -extension AndroidTableViewCell where Self: AndroidUIKit.UITableViewCell { - - private func inflate() { - - let layout = Self.layout - - if self.layoutName != layout { - inflateAndroidLayout(layout) - awakeFromLayout() - } - } - - func view(for identifier: String) -> Android.View.View? { - - inflate() - let activity = UIApplication.shared.androidActivity - let androidIdentifier = activity.getIdentifier(name: identifier, type: "id") - return androidView.findViewById(androidIdentifier) - } - - subscript (identifier: String) -> Android.View.View { - - guard let view = self.view(for: identifier) - else { fatalError("No view for \(identifier)") } - - return view - } -} - -#endif diff --git a/Android/app/src/main/swift/Sources/AppDelegate.swift b/Android/app/src/main/swift/Sources/AppDelegate.swift deleted file mode 100644 index 44921a2..0000000 --- a/Android/app/src/main/swift/Sources/AppDelegate.swift +++ /dev/null @@ -1,239 +0,0 @@ -// -// AppDelegate.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 9/7/18. -// Copyright © 2018 PureSwift. All rights reserved. -// - -import Foundation - -#if os(iOS) -import UIKit -#elseif os(Android) || os(macOS) -import Android -import AndroidUIKit -#endif - -import Bluetooth -import GATT - -class AppDelegate: UIResponder, UIApplicationDelegate { - - final var window: UIWindow? - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - - #if os(iOS) - log("Launching Bluetooth Explorer v\(AppVersion) Build \(AppBuild)") - #elseif os(Android) - log("Launching Bluetooth Explorer") - #endif - - #if os(Android) || os(macOS) - NSLog("UIScreen scale: \(UIScreen.main.scale)") - NSLog("UIScreen native scale: \(UIScreen.main.nativeScale)") - NSLog("UIScreen size: \(UIScreen.main.bounds.size)") - NSLog("UIScreen native size: \(UIScreen.main.nativeBounds.size)") - #endif - - // initalize BLE - NativeCentral.shared.log = { log("Central: \($0)") } - - // load window and view controller - let viewController = CentralViewController() - - // setup UI theme - #if os(iOS) - configureAppearance() - #endif - - let navigationController = UINavigationController(rootViewController: viewController) - - self.window = UIWindow(frame: UIScreen.main.bounds) - self.window?.rootViewController = navigationController - self.window?.makeKeyAndVisible() - - return true - } - - func applicationWillResignActive(_ application: UIApplication) { - - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. - - NSLog("\(#function)") - } - - func applicationDidEnterBackground(_ application: UIApplication) { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. - - NSLog("\(#function)") - } - - func applicationWillEnterForeground(_ application: UIApplication) { - // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. - - NSLog("\(#function)") - } - - func applicationDidBecomeActive(_ application: UIApplication) { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - - NSLog("\(#function)") - } - - func applicationWillTerminate(_ application: UIApplication) { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. - - NSLog("\(#function)") - } -} - -// MARK: - iOS - -#if os(iOS) - -typealias NativeAppDelegate = iOSAppDelegate - -@UIApplicationMain -final class iOSAppDelegate: AppDelegate { - - static var shared: iOSAppDelegate { return UIApplication.shared.delegate as! iOSAppDelegate } -} - -// MARK: - Android - -#elseif os(Android) || os(macOS) - -typealias NativeAppDelegate = AndroidAppDelegate - -final class AndroidAppDelegate: AppDelegate { - - static var shared: AndroidAppDelegate { return UIApplication.shared.delegate as! AndroidAppDelegate } - - var bluetoothEnabled: (() -> ())? - - override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { - - guard super.application(application, didFinishLaunchingWithOptions: launchOptions) - else { return false } - - NSLog("UIScreen scale: \(UIScreen.main.scale)") - NSLog("UIScreen native scale: \(UIScreen.main.nativeScale)") - NSLog("UIScreen size: \(UIScreen.main.bounds.size)") - NSLog("UIScreen native size: \(UIScreen.main.nativeBounds.size)") - - enableBluetooth() - - return true - } -} -#endif - -// MARK: - iOS Info Plist - -#if os(iOS) -/// Version of the app. -public let AppVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String - -/// Build of the app. -public let AppBuild = Int(Bundle.main.infoDictionary!["CFBundleVersion"] as! String)! -#endif - -// MARK: - Android Permissions - -#if os(Android) || os(macOS) - -extension AndroidAppDelegate { - - internal enum AndroidPermissionRequest { - - static let enableBluetooth = 1000 - static let gpsAndWriteStorage = 2000 - } -} - -extension AndroidAppDelegate { - - func application(_ application: UIApplication, activityResult requestCode: Int, resultCode: Int, data: Android.Content.Intent?) { - - log("\(type(of: self)) \(#function) - requestCode = \(requestCode) - resultCode = \(resultCode)") - - if resultCode == AndroidPermissionRequest.enableBluetooth, - resultCode == SwiftSupportAppCompatActivity.RESULT_OK { - - // no need to request permissions - if requestLocationPermissions() { - - // - bluetoothEnabled?() - } - } - } - - func application(_ application: UIApplication, requestPermissionsResult requestCode: Int, permissions: [String], grantResults: [Int]) { - - log("\(type(of: self)) \(#function)") - - if requestCode == AndroidPermissionRequest.gpsAndWriteStorage { - - if grantResults[0] == Android.Content.PM.PackageManager.Permission.granted.rawValue { - - // permission granted, now we can scan - bluetoothEnabled?() - - } else { - - log("\(type(of: self)) \(#function) GPS Permission is required") - } - } - } -} - -extension AndroidAppDelegate { - - /// Checks if permissions are needed. - @discardableResult - func enableBluetooth(hostController: Android.Bluetooth.Adapter = Android.Bluetooth.Adapter.default!) -> Bool { - - guard hostController.isEnabled() == false - else { return requestLocationPermissions() } - - let enableBluetoothIntent = Android.Content.Intent(action: Android.Bluetooth.Adapter.Action.requestEnable.rawValue) - - UIApplication.shared.androidActivity.startActivityForResult(intent: enableBluetoothIntent, - requestCode: AndroidPermissionRequest.enableBluetooth) - - log("\(type(of: self)) \(#function) enable Bluetooth") - - return false - } - - @discardableResult - func requestLocationPermissions() -> Bool { - - let activity = UIApplication.shared.androidActivity - - if Android.OS.Build.Version.Sdk.sdkInt.rawValue >= Android.OS.Build.VersionCodes.M, - activity.checkSelfPermission(permission: Android.ManifestPermission.accessCoarseLocation.rawValue) != Android.Content.PM.PackageManager.Permission.granted.rawValue { - - log("\(type(of: self)) \(#function) request permission") - - let permissions = [Android.ManifestPermission.accessCoarseLocation.rawValue, Android.ManifestPermission.writeExternalStorage.rawValue] - - activity.requestPermissions(permissions: permissions, requestCode: AndroidPermissionRequest.gpsAndWriteStorage) - - return false - - } else { - - log("\(type(of: self)) \(#function) dont need to request permissions") - - return true - } - } -} - -#endif diff --git a/Android/app/src/main/swift/Sources/Appearance.swift b/Android/app/src/main/swift/Sources/Appearance.swift deleted file mode 100644 index 3692129..0000000 --- a/Android/app/src/main/swift/Sources/Appearance.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// Appearance.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 9/23/18. -// Copyright © 2018 PureSwift. All rights reserved. -// - -#if os(iOS) -import UIKit -#elseif os(Android) || os(macOS) -import Android -import AndroidUIKit -#endif - -/// Configure the application's UI appearance -func configureAppearance() { - - #if os(iOS) - - if #available(iOS 11.0, *) { - UINavigationBar.appearance().prefersLargeTitles = true - UINavigationBar.appearance().largeTitleTextAttributes = [.foregroundColor: UIColor.white] - } - - UINavigationBar.appearance().tintColor = .white - UINavigationBar.appearance().titleTextAttributes = [.foregroundColor: UIColor.white] - UINavigationBar.appearance().barTintColor = UIColor(red: 0.386, green: 0.707, blue: 1.0, alpha: 1.0) - - #endif -} diff --git a/Android/app/src/main/swift/Sources/Async.swift b/Android/app/src/main/swift/Sources/Async.swift deleted file mode 100755 index dd9d8d7..0000000 --- a/Android/app/src/main/swift/Sources/Async.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// Async.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 6/19/18. -// Copyright © 2018 PureSwift. All rights reserved. -// - -import Foundation -import Dispatch - -#if os(Android) || os(macOS) -import Android -import AndroidUIKit -#endif - -func mainQueue(_ block: @escaping () -> ()) { - - #if os(iOS) - DispatchQueue.main.async(execute: block) - #elseif os(Android) || os(macOS) - UIApplication.shared.androidActivity.runOnMainThread(block) - #endif -} - -/// Perform a task on the internal queue. -func async(_ block: @escaping () -> ()) { - - appQueue.async(execute: block) -} - -let appQueue = DispatchQueue(label: "App Queue") diff --git a/Android/app/src/main/swift/Sources/Central.swift b/Android/app/src/main/swift/Sources/Central.swift deleted file mode 100644 index eea1e4d..0000000 --- a/Android/app/src/main/swift/Sources/Central.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// Central.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 9/7/18. -// Copyright © 2018 PureSwift. All rights reserved. -// - -import Foundation -import Bluetooth -import GATT - -typealias NativeScanData = ScanData - -#if os(iOS) - -import DarwinGATT - -typealias NativeCentral = DarwinCentral - -private struct CentralCache { - - static let options = DarwinCentral.Options(showPowerAlert: false, restoreIdentifier: nil) - - static let central = DarwinCentral(options: options) -} - -#elseif os(Android) || os(macOS) - -import Android -import AndroidBluetooth -import AndroidUIKit - -typealias NativeCentral = AndroidCentral - -private struct CentralCache { - - static let hostController = Android.Bluetooth.Adapter.default! - - static let context = UIApplication.shared.androidActivity - - static let options = AndroidCentral.Options() - - static let central = AndroidCentral(hostController: hostController, context: context, options: options) -} - -#endif - -internal extension NativeCentral { - - static var shared: NativeCentral { - - return CentralCache.central - } -} diff --git a/Android/app/src/main/swift/Sources/CentralViewController.swift b/Android/app/src/main/swift/Sources/CentralViewController.swift deleted file mode 100644 index cdd6b63..0000000 --- a/Android/app/src/main/swift/Sources/CentralViewController.swift +++ /dev/null @@ -1,265 +0,0 @@ -// -// CentralViewController.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 9/7/18. -// Copyright © 2018 PureSwift. All rights reserved. -// - -import Foundation -import Bluetooth -import GATT - -#if os(iOS) -import UIKit -#elseif os(Android) || os(macOS) -import Android -import AndroidBluetooth -import AndroidUIKit -#endif - -/// Scans for nearby BLE devices. -final class CentralViewController: UITableViewController { - - // MARK: - Properties - - #if os(iOS) - lazy var activityIndicator: UIActivityIndicatorView = self.loadActivityIndicatorView() - #else - lazy var progressDialog: AndroidProgressDialog = { - let progressDialog = AndroidProgressDialog(context: UIApplication.shared.androidActivity) - progressDialog.setIndeterminate(true) - progressDialog.setTitle("Wait") - progressDialog.setMessage("Scanning...") - return progressDialog - }() - #endif - - private(set) var items = [NativeScanData]() - - let scanDuration: TimeInterval = 5.0 - - let filterDuplicates: Bool = false - - // MARK: - Loading - - override func viewDidLoad() { - super.viewDidLoad() - - // set title - self.title = "Central" - - // setup table view - self.tableView.estimatedRowHeight = 44 - self.tableView.rowHeight = UITableViewAutomaticDimension - self.tableView.register(ScanDataTableViewCell.self) - - let refreshControl = UIRefreshControl(frame: .zero) - - #if os(Android) || os(macOS) - refreshControl.addTarget(action: { [unowned self] in self.reloadData() }, for: .valueChanged) - #else - refreshControl.addTarget(self, action: #selector(pullToRefresh), for: .valueChanged) - #endif - - self.refreshControl = refreshControl - - #if os(Android) || os(macOS) - AndroidAppDelegate.shared.bluetoothEnabled = { [weak self] in self?.reloadData() } - reloadData() - #endif - } - - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - - reloadData() - } - - // MARK: - Actions - - #if os(iOS) - @objc func pullToRefresh(_ sender: UIRefreshControl) { - - DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: { [weak self] in - - self?.reloadData() - }) - } - #endif - - - // MARK: - Methods - - private subscript (indexPath: IndexPath) -> NativeScanData { - - @inline(__always) - get { return self.items[indexPath.row] } - } - - private final func endRefreshing() { - - if let refreshControl = self.refreshControl, - refreshControl.isRefreshing{ - - refreshControl.endRefreshing() - } - } - - private func reloadData() { - - log("\(type(of: self)) \(#function)") - - // clear table data - self.items.removeAll() - tableView.reloadData() - - // make sure its enabled - #if os(Android) - guard AndroidCentral.shared.hostController.isEnabled() - else { return } // wait until enabled - #endif - - // scan - let scanDuration = self.scanDuration - let filterDuplicates = self.filterDuplicates - - performActivity({ - try NativeCentral.shared.scan(duration: scanDuration, filterDuplicates: filterDuplicates) { [weak self] (device) in mainQueue { self?.foundDevice(device) } } - }) - } - - private func foundDevice(_ scanData: NativeScanData) { - - // remove old value - if let index = self.items.index(where: { $0.peripheral == scanData.peripheral }) { - self.items.remove(at: index) - } - - // add item - self.items.append(scanData) - - // sort - self.items.sort(by: { $0.peripheral.description < $1.peripheral.description }) - - // update table view - self.tableView.reloadData() - } - - private func configure(cell: UITableViewCell, at indexPath: IndexPath) { - - let item = self[indexPath] - - #if os(iOS) - - cell.textLabel?.text = item.advertisementData.localName ?? item.peripheral.identifier.description - cell.textLabel?.numberOfLines = 0 - - #elseif os(Android) || os(macOS) - - if let localName = item.advertisementData.localName { - - let layoutName = "peripheral_item" - - if cell.layoutName != layoutName { - cell.inflateAndroidLayout(layoutName) - } - - let itemView = cell.androidView - - let tvNameId = UIApplication.shared.androidActivity.getIdentifier(name: "tvName", type: "id") - let tvAddressId = UIApplication.shared.androidActivity.getIdentifier(name: "tvAddress", type: "id") - - guard let tvNameObject = itemView.findViewById(tvNameId) - else { fatalError("No view for \(tvNameId)") } - - guard let tvAddressObject = itemView.findViewById(tvAddressId) - else { fatalError("No view for \(tvAddressId)") } - - let tvName = Android.Widget.TextView(casting: tvNameObject) - let tvAddress = Android.Widget.TextView(casting: tvAddressObject) - - tvName?.text = localName - tvAddress?.text = item.peripheral.description - - } else { - - let layoutName = "peripheral_item_2" - - if cell.layoutName != layoutName { - cell.inflateAndroidLayout(layoutName) - } - - let itemView = cell.androidView - - let tvAddressId = UIApplication.shared.androidActivity.getIdentifier(name: "tvAddress", type: "id") - - guard let tvAddressObject = itemView.findViewById(tvAddressId) - else { fatalError("No view for \(tvAddressId)") } - - let tvAddress = Android.Widget.TextView(casting: tvAddressObject) - - tvAddress?.text = item.peripheral.description - } - - #endif - } - - #if os(iOS) - private func loadActivityIndicatorView() -> UIActivityIndicatorView { - - let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray) - activityIndicator.frame.origin = CGPoint(x: 6.5, y: 15) - - let view = UIView(frame: CGRect(x: 0, y: 0, width: 33, height: 44)) - view.backgroundColor = .clear - view.addSubview(activityIndicator) - - let barButtonItem = UIBarButtonItem(customView: view) - self.navigationItem.rightBarButtonItem = barButtonItem - return activityIndicator - } - #endif - - // MARK: - UITableViewDataSource - - override func numberOfSections(in tableView: UITableView) -> Int { - - return 1 - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - - return items.count - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - - let cell = tableView.dequeueReusableCell(ScanDataTableViewCell.self, for: indexPath) - configure(cell: cell, at: indexPath) - return cell - } - - // MARK: - UITableViewDelegate - - override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - - #if os(iOS) - defer { tableView.deselectRow(at: indexPath, animated: true) } - #endif - - let item = self[indexPath] - - self.endRefreshing() - - log("Selected \(item.peripheral) \(item.advertisementData.localName ?? "")") - - let viewController = ServicesViewController(scanData: item) - - self.show(viewController, sender: self) - } -} - -// MARK: - ActivityIndicatorViewController - -extension CentralViewController: TableViewActivityIndicatorViewController { } diff --git a/Android/app/src/main/swift/Sources/CharacteristicViewController.swift b/Android/app/src/main/swift/Sources/CharacteristicViewController.swift deleted file mode 100644 index 91e6bd3..0000000 --- a/Android/app/src/main/swift/Sources/CharacteristicViewController.swift +++ /dev/null @@ -1,470 +0,0 @@ -// -// CharacteristicViewController.swift -// BluetoothExplorerAndroid -// -// Created by Marco Estrella on 9/21/18. -// - -import Foundation -import Bluetooth -import GATT - -#if os(iOS) -import UIKit -#elseif os(Android) || os(macOS) -import Android -import AndroidUIKit -#endif - -/// Characteristic -final class CharacteristicViewController: UITableViewController { - - typealias NativeService = Service - typealias NativeCharacteristic = Characteristic - - // MARK: - Properties - - #if os(iOS) - lazy var activityIndicator: UIActivityIndicatorView = self.loadActivityIndicatorView() - #else - lazy var progressDialog: AndroidProgressDialog = { - let progressDialog = AndroidProgressDialog(context: UIApplication.shared.androidActivity) - progressDialog.setIndeterminate(true) - progressDialog.setTitle("Wait") - progressDialog.setMessage("Loading...") - return progressDialog - }() - #endif - - let service: NativeService - let characteristic: NativeCharacteristic - - private var sections = [Section]() - - private(set) var characteristicValue = [Data]() { - didSet { configureView() } - } - - private var isNotifying = false { - didSet { configureView() } - } - - private let timeout: TimeInterval = .gattDefaultTimeout - - // MARK: - Initialization - - init(service: NativeService, characteristic: NativeCharacteristic) { - - self.characteristic = characteristic - self.service = service - - super.init(style: .grouped) - } - - deinit { - - // just in case we didnt stop notifications - NativeCentral.shared.disconnect(peripheral: characteristic.peripheral) - } - - #if os(iOS) - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - #endif - - private let cellReuseIdentifier = "Cell" - - // MARK: - Loading - - override func viewDidLoad() { - super.viewDidLoad() - - NSLog("\(type(of: self)) \(#function)") - - - // setup table view - self.tableView.estimatedRowHeight = 44 - self.tableView.rowHeight = UITableViewAutomaticDimension - #if os(iOS) - self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: CellIdentifier.uuid.rawValue) - self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: CellIdentifier.name.rawValue) - self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: CellIdentifier.value.rawValue) - self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: CellIdentifier.property.rawValue) - #else - self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: self.cellReuseIdentifier) - #endif - - // update UI - self.configureView() - - // attempt to read - self.readValue() - } - - // MARK: - Methods - - private subscript (indexPath: IndexPath) -> Item { - - @inline(__always) - get { return self.sections[indexPath.section].items[indexPath.row] } - } - - private func configureView() { - - title = self.characteristic.uuid.description - - // configure table view - - sections = [] - - do { - - var items = [Item]() - - if let name = characteristic.uuid.name { - - items.append(.name(name)) - } - - items.append(.uuid(characteristic.uuid)) - - sections.append(Section(title: "Information", items: items)) - } - - if characteristic.properties.isEmpty == false { - - sections.append(Section(title: "Properties", items: characteristic.properties.map { Item.property($0) })) - } - - if characteristicValue.isEmpty == false { - - sections.append(Section(title: "Value", items: characteristicValue.reversed().map { Item.value($0) })) - } - - // update UI - tableView.reloadData() - } - - private func readValue() { - NSLog("\(type(of: self)) \(#function)") - let timeout = self.timeout - let service = self.service - let characteristic = self.characteristic - let peripheral = self.service.peripheral - - guard characteristic.properties.contains(.read) - else { return } - - performActivity({ - try NativeCentral.shared.connect(to: peripheral, timeout: timeout) - defer { NativeCentral.shared.disconnect(peripheral: peripheral) } - let _ = try NativeCentral.shared.discoverServices(for: peripheral, timeout: timeout) - let _ = try NativeCentral.shared.discoverCharacteristics(for: service, timeout: timeout) - return try NativeCentral.shared.readValue(for: characteristic, timeout: timeout) - }, completion: { - $0.characteristicValue.append($1) - }) - } - - private func writeValue(_ newValue: Data, withResponse: Bool = true) { - - let timeout = self.timeout - let service = self.service - let characteristic = self.characteristic - let peripheral = self.service.peripheral - - performActivity({ - try NativeCentral.shared.connect(to: peripheral, timeout: timeout) - defer { NativeCentral.shared.disconnect(peripheral: peripheral) } - let _ = try NativeCentral.shared.discoverServices(for: peripheral, timeout: timeout) - let _ = try NativeCentral.shared.discoverCharacteristics(for: service, timeout: timeout) - try NativeCentral.shared.writeValue(newValue, for: characteristic, withResponse: withResponse, timeout: timeout) - }, completion: { (viewController: CharacteristicViewController, _) in - viewController.characteristicValue.append(newValue) - }) - } - - private func startNotifications() { - - let timeout = self.timeout - let service = self.service - let characteristic = self.characteristic - let peripheral = self.service.peripheral - - performActivity({ - try NativeCentral.shared.connect(to: peripheral, timeout: timeout) - let _ = try NativeCentral.shared.discoverServices(for: peripheral, timeout: timeout) - let _ = try NativeCentral.shared.discoverCharacteristics(for: service, timeout: timeout) - try NativeCentral.shared.notify({ [weak self] (newValue) in mainQueue { self?.notification(newValue) } }, for: characteristic) - }, completion: { (viewController: CharacteristicViewController, _) in - viewController.isNotifying = true - }) - } - - private func notification(_ newValue: Data) { - - NSLog("\(#function) new characteristicValue: \(newValue)") - self.characteristicValue.append(newValue) - } - - private func stopNotifications() { - - let timeout = self.timeout - let service = self.service - let characteristic = self.characteristic - let peripheral = self.service.peripheral - - performActivity({ - // should already be connected - defer { NativeCentral.shared.disconnect(peripheral: peripheral) } - let _ = try NativeCentral.shared.discoverServices(for: peripheral, timeout: timeout) - let _ = try NativeCentral.shared.discoverCharacteristics(for: service, timeout: timeout) - try NativeCentral.shared.notify(nil, for: characteristic) - }, completion: { (viewController: CharacteristicViewController, _) in - viewController.isNotifying = false - }) - } - - private func configure(cell: UITableViewCell, with value: String) { - - cell.textLabel?.text = value - - #if os(iOS) - cell.textLabel?.numberOfLines = 0 - #endif - } - - private func configure(cell: UITableViewCell, with data: Data) { - - cell.textLabel?.text = data.isEmpty ? "No value" : "0x" + data.reduce("", { $0 + String($1, radix: 16) }) - - #if os(iOS) - cell.textLabel?.numberOfLines = 0 - #endif - } - - // MARK: - UITableViewDataSource - - override func numberOfSections(in tableView: UITableView) -> Int { - NSLog("count: \(sections.count)") - return sections.count - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection sectionIndex: Int) -> Int { - - let section = self.sections[sectionIndex] - - return section.items.count - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - - #if os(iOS) - let item = self[indexPath] - - switch item { - case let .uuid(uuid): - let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier.uuid.rawValue, for: indexPath) - configure(cell: cell, with: uuid.rawValue) - return cell - case let .name(name): - let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier.name.rawValue, for: indexPath) - configure(cell: cell, with: name) - return cell - case let .value(data): - let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier.value.rawValue, for: indexPath) - configure(cell: cell, with: data) - return cell - case let .property(property): - let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier.property.rawValue, for: indexPath) - configure(cell: cell, with: property.description) - return cell - } - #else - - let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) - - let layoutName = "list_cell" - - if cell.layoutName != layoutName { - cell.inflateAndroidLayout(layoutName) - } - - let itemView = cell.androidView - - let tvItemId = UIApplication.shared.androidActivity.getIdentifier(name: "text_label", type: "id") - - guard let tvItemObject = itemView.findViewById(tvItemId) - else { fatalError("No view for \(tvItemId)") } - - let tvItem = Android.Widget.TextView(casting: tvItemObject) - - let item = self.sections[indexPath.section].items[indexPath.row] - NSLog("tableView \(indexPath.row) : \(item)") - switch item { - case let .uuid(uuid): - tvItem?.text = uuid.rawValue - case let .name(name): - tvItem?.text = name - case let .value(data): - tvItem?.text = data.isEmpty ? "No value" : "0x" + data.reduce("", { $0 + String($1, radix: 16) }).uppercased() - case let .property(property): - tvItem?.text = property.description - } - return cell - #endif - } - - func openAlertForWrite(item: NativeCharacteristic){ - - let alertController = UIAlertController.init(title: "Write Characteristic", message: nil, preferredStyle: UIAlertControllerStyle.alert) - - alertController.addTextField(configurationHandler: { text in text.placeholder = "New Value" }) - - let action1 = UIAlertAction.init(title: "Write", style: UIAlertActionStyle.default) { action in - - let newValue = alertController.textFields![0].text - - guard let value = newValue, let data = Data(hexString: value) else { - - NSLog("Value is required") - //AndroidToast.makeText(context: UIApplication.shared.androidActivity, text: "Value is required", duration: AndroidToast.Dutation.short).show() - return - } - - self.writeValue(data) - } - - let action2 = UIAlertAction.init(title: "Cancel", style: UIAlertActionStyle.cancel) - - alertController.addAction(action1) - alertController.addAction(action2) - - present(alertController, animated: false) - } - - #if os(iOS) - override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - - return self.sections[section].title - } - #else - override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { - - let peripheralViewLayoutId = UIApplication.shared.androidActivity.getIdentifier(name: "list_header", type: "layout") - - let layoutInflarer = Android.View.LayoutInflater.from(context: UIApplication.shared.androidActivity) - - let itemView = layoutInflarer.inflate(resource: Android.R.Layout(rawValue: peripheralViewLayoutId), root: nil, attachToRoot: false) - - let tvHeaderId = UIApplication.shared.androidActivity.getIdentifier(name: "text_label", type: "id") - - guard let tvHeaderObject = itemView.findViewById(tvHeaderId) - else { fatalError("No view for \(tvHeaderId)") } - - let tvHeader = Android.Widget.TextView(casting: tvHeaderObject) - - tvHeader?.text = self.sections[section].title - - let uiView = UIView.init(androidViewChild: itemView) - - uiView.androidView.layoutParams = Android.Widget.FrameLayout.FLayoutParams(width: Android.Widget.FrameLayout.FLayoutParams.MATCH_PARENT, height: Android.Widget.FrameLayout.FLayoutParams.WRAP_CONTENT) - - return uiView - } - #endif - - // MARK: - UITableViewDelegate - - override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - - #if os(iOS) - defer { tableView.deselectRow(at: indexPath, animated: true) } - #endif - - let item = self[indexPath] - - switch item { - - case .uuid, - .name: - break - - case let .value(data): - break // TODO: Show expanded data - - case let .property(property): - - switch property { - case .broadcast, - .extendedProperties, - .signedWrite: - break // cant handle - case .read: - readValue() - case .write: - openAlertForWrite(item: characteristic) - break - case .writeWithoutResponse: - // TODO: show UI to type new value - writeValue(Data(), withResponse: false) - break - case .notify, .indicate: - NSLog("notify") - isNotifying ? stopNotifications() : startNotifications() - } - } - } -} - -// MARK: - ActivityIndicatorViewController - -extension CharacteristicViewController: TableViewActivityIndicatorViewController { } - -// MARK: - Supporting Types - -private extension CharacteristicViewController { - - struct Section { - - let title: String? - let items: [Item] - } - - enum Item { - - case uuid(BluetoothUUID) - case name(String) - case value(Data) - case property(GATT.CharacteristicProperty) - } - - enum CellIdentifier: String { - - case uuid - case name - case value - case property - } -} - - -//FIXME: -extension Data { - init?(hexString: String) { - let length = hexString.count / 2 - var data = Data(capacity: length) - for i in 0 ..< length { - let j = hexString.index(hexString.startIndex, offsetBy: i * 2) - let k = hexString.index(j, offsetBy: 2) - let bytes = hexString[j.. - typealias NativeCharacteristic = Characteristic - - // MARK: - Properties - - #if os(iOS) - lazy var activityIndicator: UIActivityIndicatorView = self.loadActivityIndicatorView() - #else - lazy var progressDialog: AndroidProgressDialog = { - let progressDialog = AndroidProgressDialog(context: UIApplication.shared.androidActivity) - progressDialog.setIndeterminate(true) - progressDialog.setTitle("Wait") - progressDialog.setMessage("Loading Characteristics...") - return progressDialog - }() - #endif - - let service: NativeService - - private let cellReuseIdentifier = "Cell" - - private let timeout: TimeInterval = .gattDefaultTimeout - - private(set) var items = [NativeCharacteristic]() { - - didSet { self.tableView.reloadData() } - } - - // MARK: - Initialization - - init(service: NativeService) { - - self.service = service - - super.init(style: .plain) - } - - #if os(iOS) - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - #endif - - // MARK: - Loading - - override func viewDidLoad() { - super.viewDidLoad() - - // setup table view - self.tableView.estimatedRowHeight = 44 - self.tableView.rowHeight = UITableViewAutomaticDimension - self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: self.cellReuseIdentifier) - - // add refresh control - let refreshControl = UIRefreshControl(frame: .zero) - - #if os(Android) || os(macOS) - refreshControl.addTarget(action: { [unowned self] in self.reloadData() }, for: .valueChanged) - #else - refreshControl.addTarget(self, action: #selector(pullToRefresh), for: .valueChanged) - #endif - - self.refreshControl = refreshControl - - self.configureView() - self.reloadData() - } - - // MARK: - Methods - - private subscript (indexPath: IndexPath) -> NativeCharacteristic { - - @inline(__always) - get { return self.items[indexPath.row] } - } - - #if os(iOS) || os(macOS) - @objc func pullToRefresh() { - - DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: { [weak self] in - - self?.reloadData() - }) - } - #endif - - private func endRefreshing() { - - if let refreshControl = self.refreshControl, - refreshControl.isRefreshing == true { - - refreshControl.endRefreshing() - } - } - - private func configureView() { - - self.title = self.service.uuid.description - } - - private func reloadData() { - - let timeout = self.timeout - - let service = self.service - let peripheral = self.service.peripheral - - performActivity({ - try NativeCentral.shared.connect(to: peripheral) - defer { NativeCentral.shared.disconnect(peripheral: peripheral) } - let _ = try NativeCentral.shared.discoverServices(for: peripheral, timeout: timeout) - return try NativeCentral.shared.discoverCharacteristics(for: service, timeout: timeout) - }, completion: { - $0.items = $1 - }) - } - - private func configure(cell: UITableViewCell, at indexPath: IndexPath) { - - let item = self[indexPath] - - cell.textLabel?.text = item.uuid.description - - #if os(iOS) - cell.textLabel?.numberOfLines = 0 - #endif - } - - // MARK: - UITableViewDataSource - - override func numberOfSections(in tableView: UITableView) -> Int { - - return 1 - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - - return items.count - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - - let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) - - configure(cell: cell, at: indexPath) - - return cell - } - - // MARK: - UITableViewDelegate - - override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - - #if os(iOS) - defer { tableView.deselectRow(at: indexPath, animated: true) } - #endif - - let characteristic = self[indexPath] - - log("Selected \(characteristic.uuid.description)") - - let viewController = CharacteristicViewController(service: service, characteristic: characteristic) - - self.show(viewController, sender: self) - } -} - -// MARK: - ActivityIndicatorViewController - -extension CharacteristicsViewController: TableViewActivityIndicatorViewController { } diff --git a/Android/app/src/main/swift/Sources/ErrorAlert.swift b/Android/app/src/main/swift/Sources/ErrorAlert.swift deleted file mode 100755 index 08ca46e..0000000 --- a/Android/app/src/main/swift/Sources/ErrorAlert.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// ErrorAlert.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 6/19/18. -// Copyright © 2018 PureSwift. All rights reserved. -// - -import Foundation -#if os(iOS) -import UIKit -#elseif os(Android) || os(macOS) -import Android -import AndroidUIKit -#endif - -public extension UIViewController { - - /// Presents an error alert controller with the specified completion handlers. - func showErrorAlert(_ localizedText: String, - okHandler: (() -> ())? = nil, - retryHandler: (()-> ())? = nil) { - - let alert = UIAlertController(title: NSLocalizedString("Error", comment: "Error"), - message: localizedText, - preferredStyle: .alert) - - alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "OK"), style: UIAlertActionStyle.`default`, handler: { (UIAlertAction) in - - okHandler?() - - alert.presentingViewController?.dismiss(animated: true, completion: nil) - })) - - // optionally add retry button - - if retryHandler != nil { - - alert.addAction(UIAlertAction(title: NSLocalizedString("Retry", comment: "Retry"), style: UIAlertActionStyle.`default`, handler: { (UIAlertAction) in - - retryHandler!() - - alert.presentingViewController?.dismiss(animated: true, completion: nil) - })) - } - - self.present(alert, animated: true, completion: nil) - } -} - diff --git a/Android/app/src/main/swift/Sources/Log.swift b/Android/app/src/main/swift/Sources/Log.swift deleted file mode 100644 index 8e9cdad..0000000 --- a/Android/app/src/main/swift/Sources/Log.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// Log.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 9/7/18. -// Copyright © 2018 PureSwift. All rights reserved. -// - -import Foundation - -/// app logger function -func log(_ message: String) { - - #if os(Android) - NSLog(message) - #else - print(message) - #endif -} diff --git a/Android/app/src/main/swift/Sources/MainActivity.swift b/Android/app/src/main/swift/Sources/MainActivity.swift deleted file mode 100644 index c6cde61..0000000 --- a/Android/app/src/main/swift/Sources/MainActivity.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// main.swift -// AndroidUIKit -// -// Created by Marco Estrella on 9/6/18. -// - -#if os(Android) || os(macOS) - -import Foundation -import Android -import AndroidUIKit - -/// Needs to be implemented by app. -@_silgen_name("SwiftAndroidMainApplication") -public func SwiftAndroidMainApplication() -> SwiftApplication.Type { - - NSLog("\(#function)") - - // initialize singleton App Delegate - UIApplication.shared.delegate = AndroidAppDelegate() - - // return specialized Android Application - return AndroidUIKitApplication.self -} - -/// Needs to be implemented by app. -@_silgen_name("SwiftAndroidMainActivity") -public func SwiftAndroidMainActivity() -> SwiftSupportAppCompatActivity.Type { - - NSLog("\(#function)") - - // return specialized Android Activity - return AndroidUIKitMainActivity.self -} - -#endif diff --git a/Android/app/src/main/swift/Sources/MainActivityBindings.swift b/Android/app/src/main/swift/Sources/MainActivityBindings.swift deleted file mode 100644 index 502eb65..0000000 --- a/Android/app/src/main/swift/Sources/MainActivityBindings.swift +++ /dev/null @@ -1,18 +0,0 @@ - -import java_swift - -/// generated by: genswift.java 'java/lang|java/util|java/sql' 'Sources' '../java' /// - -/// interface com.millertech.bluetoothexplorer.swiftbindings.MainActivityBindings /// - -public protocol MainActivityBindings: JavaProtocol { - -} - - -open class MainActivityBindingsForward: JNIObjectForward, MainActivityBindings { - - private static var MainActivityBindingsJNIClass: jclass? - -} - diff --git a/Android/app/src/main/swift/Sources/MainActivityBindings_Listener.swift b/Android/app/src/main/swift/Sources/MainActivityBindings_Listener.swift deleted file mode 100644 index 7b43869..0000000 --- a/Android/app/src/main/swift/Sources/MainActivityBindings_Listener.swift +++ /dev/null @@ -1,85 +0,0 @@ - -import java_swift - -/// generated by: genswift.java 'java/lang|java/util|java/sql' 'Sources' '../java' /// - -/// interface com.millertech.bluetoothexplorer.swiftbindings.MainActivityBindings$Listener /// - -public protocol MainActivityBindings_Listener: JavaProtocol { - - /// public abstract void com.millertech.bluetoothexplorer.swiftbindings.MainActivityBindings$Listener.hi() - - func hi() - -} - - -open class MainActivityBindings_ListenerForward: JNIObjectForward, MainActivityBindings_Listener { - - private static var MainActivityBindings_ListenerJNIClass: jclass? - - /// public abstract void com.millertech.bluetoothexplorer.swiftbindings.MainActivityBindings$Listener.hi() - - private static var hi_MethodID_2: jmethodID? - - open func hi() { - var __locals = [jobject]() - var __args = [jvalue]( repeating: jvalue(), count: 1 ) - JNIMethod.CallVoidMethod( object: javaObject, methodName: "hi", methodSig: "()V", methodCache: &MainActivityBindings_ListenerForward.hi_MethodID_2, args: &__args, locals: &__locals ) - } - - -} - -private typealias MainActivityBindings_Listener_hi_0_type = @convention(c) ( _: UnsafeMutablePointer, _: jobject?, _: jlong ) -> () - -private func MainActivityBindings_Listener_hi_0( _ __env: UnsafeMutablePointer, _ __this: jobject?, _ __swiftObject: jlong ) -> () { - MainActivityBindings_ListenerLocal_.swiftObject( jniEnv: __env, javaObject: __this, swiftObject: __swiftObject ).hi( ) -} - -fileprivate class MainActivityBindings_ListenerLocal_: JNILocalProxy { - - fileprivate static let _proxyClass: jclass = { - var natives = [JNINativeMethod]() - - let MainActivityBindings_Listener_hi_0_thunk: MainActivityBindings_Listener_hi_0_type = MainActivityBindings_Listener_hi_0 - natives.append( JNINativeMethod( name: strdup("__hi"), signature: strdup("(J)V"), fnPtr: unsafeBitCast( MainActivityBindings_Listener_hi_0_thunk, to: UnsafeMutableRawPointer.self ) ) ) - - natives.append( JNINativeMethod( name: strdup("__finalize"), signature: strdup("(J)V"), fnPtr: unsafeBitCast( JNIReleasableProxy__finalize_thunk, to: UnsafeMutableRawPointer.self ) ) ) - - let clazz = JNI.FindClass( proxyClassName() ) - natives.withUnsafeBufferPointer { - nativesPtr in - if JNI.api.RegisterNatives( JNI.env, clazz, nativesPtr.baseAddress, jint(nativesPtr.count) ) != jint(JNI_OK) { - JNI.report( "Unable to register java natives" ) - } - } - - defer { JNI.DeleteLocalRef( clazz ) } - return JNI.api.NewGlobalRef( JNI.env, clazz )! - }() - - override open class func proxyClassName() -> String { return "org/swiftjava/com_millertech/MainActivityBindings_ListenerProxy" } - override open class func proxyClass() -> jclass? { return _proxyClass } - -} - -extension MainActivityBindings_Listener { - - public func localJavaObject( _ locals: UnsafeMutablePointer<[jobject]> ) -> jobject? { - return MainActivityBindings_ListenerLocal_( owned: self, proto: self ).localJavaObject( locals ) - } - -} - -open class MainActivityBindings_ListenerBase: MainActivityBindings_Listener { - - public init() {} - - /// public abstract void com.millertech.bluetoothexplorer.swiftbindings.MainActivityBindings$Listener.hi() - - open func hi() /**/ { - } - - -} diff --git a/Android/app/src/main/swift/Sources/MainActivityBindings_Responder.swift b/Android/app/src/main/swift/Sources/MainActivityBindings_Responder.swift deleted file mode 100644 index 10402a5..0000000 --- a/Android/app/src/main/swift/Sources/MainActivityBindings_Responder.swift +++ /dev/null @@ -1,18 +0,0 @@ - -import java_swift - -/// generated by: genswift.java 'java/lang|java/util|java/sql' 'Sources' '../java' /// - -/// interface com.millertech.bluetoothexplorer.swiftbindings.MainActivityBindings$Responder /// - -public protocol MainActivityBindings_Responder: JavaProtocol { - -} - - -open class MainActivityBindings_ResponderForward: JNIObjectForward, MainActivityBindings_Responder { - - private static var MainActivityBindings_ResponderJNIClass: jclass? - -} - diff --git a/Android/app/src/main/swift/Sources/NibTableViewCell.swift b/Android/app/src/main/swift/Sources/NibTableViewCell.swift deleted file mode 100644 index f742bb2..0000000 --- a/Android/app/src/main/swift/Sources/NibTableViewCell.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// NibTableViewCell.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 4/30/19. -// Copyright © 2019 PureSwift. All rights reserved. -// - -#if os(iOS) -import Foundation -import UIKit - -/// NIB loading table view cell -protocol NibTableViewCell: ReusableTableViewCell { - - static var nibName: String { get } -} - -extension NibTableViewCell { - - static var nibName: String { - - return reuseIdentifier - } -} - -extension NibTableViewCell { - - static func register(tableView: UITableView) { - - let bundle = Bundle(for: self) - let nib = UINib(nibName: nibName, bundle: bundle) - tableView.register(nib, forCellReuseIdentifier: reuseIdentifier) - } -} - -#endif diff --git a/Android/app/src/main/swift/Sources/ReusableTableViewCell.swift b/Android/app/src/main/swift/Sources/ReusableTableViewCell.swift deleted file mode 100644 index 23c8c27..0000000 --- a/Android/app/src/main/swift/Sources/ReusableTableViewCell.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// ReusableTableViewCell.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 4/30/19. -// Copyright © 2019 PureSwift. All rights reserved. -// - -import Foundation - -#if os(iOS) -import UIKit -#elseif os(Android) || os(macOS) -import Android -import AndroidUIKit -import java_lang -#endif - -/// Reusable Table View Cell -protocol ReusableTableViewCell: class { - - /// Reusable Cell Identifier - static var reuseIdentifier: String { get } - - /// Register table view cell for reuse. - static func register(tableView: UITableView) -} - -#if os(iOS) -extension ReusableTableViewCell where Self: UITableViewCell { - - static func register(tableView: UITableView) { - - tableView.register(self, forCellReuseIdentifier: reuseIdentifier) - } -} -#else -extension ReusableTableViewCell { - - static func register(tableView: UITableView) { - - tableView.register(self as? UITableViewCell.Type, forCellReuseIdentifier: reuseIdentifier) - } -} -#endif - -extension UITableView { - - func dequeueReusableCell (_ cell: T.Type, for indexPath: IndexPath) -> T { - - let cell = dequeueReusableCell(withIdentifier: T.reuseIdentifier, for: indexPath) - - guard let reusableCell = cell as? T - else { fatalError("Invalid cell \(cell) for \(T.reuseIdentifier)") } - - return reusableCell - } -} - -extension UITableView { - - func register (_ cell: T.Type) { - - T.register(tableView: self) - } -} diff --git a/Android/app/src/main/swift/Sources/ScanDataTableViewCell.swift b/Android/app/src/main/swift/Sources/ScanDataTableViewCell.swift deleted file mode 100644 index 69e6ba7..0000000 --- a/Android/app/src/main/swift/Sources/ScanDataTableViewCell.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// ScanDataTableViewCell.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 4/30/19. -// Copyright © 2019 PureSwift. All rights reserved. -// - -import Foundation - -#if os(iOS) -import UIKit -#elseif os(Android) || os(macOS) -import Android -import AndroidUIKit -import java_lang -#endif - -/// Table View Cell -final class ScanDataTableViewCell: UITableViewCell { - - #if os(iOS) - - #elseif os(Android) || os(macOS) - - var titleLabel: Android.Widget.TextView! { - - return Android.Widget.TextView(casting: self["textLabel"]) - } - - var detailLabel: Android.Widget.TextView! { - - return Android.Widget.TextView(casting: self["detailTextLabel"]) - } - - var accessoryImageView: Android.Widget.ImageView! { - - return Android.Widget.ImageView(casting: self["accessoryImageView"]) - } - - var isAccessoryVisible: Bool = false { - didSet { accessoryImageView.visibility = isAccessoryVisible ? .visible : .invisible } - } - - #endif -} - -// MARK: - ReusableTableViewCell - -extension ScanDataTableViewCell: ReusableTableViewCell { - static let reuseIdentifier = "ScanDataTableViewCell" -} - -#if os(iOS) -extension ScanDataTableViewCell: NibTableViewCell { } -#elseif os(Android) || os(macOS) -extension ScanDataTableViewCell: AndroidTableViewCell { - static let layout = "cell_right_detail" - - func awakeFromLayout() { - - } -} -#endif diff --git a/Android/app/src/main/swift/Sources/ServicesViewController.swift b/Android/app/src/main/swift/Sources/ServicesViewController.swift deleted file mode 100644 index 6db6dff..0000000 --- a/Android/app/src/main/swift/Sources/ServicesViewController.swift +++ /dev/null @@ -1,196 +0,0 @@ -// -// ServicesViewController.swift -// BluetoothExplorer -// -// Created by Alsey Coleman Miller on 9/7/18. -// Copyright © 2018 PureSwift. All rights reserved. -// - -import Foundation -import Bluetooth -import GATT - -#if os(iOS) -import UIKit -#elseif os(Android) || os(macOS) -import Android -import AndroidUIKit -#endif - -/// Services -final class ServicesViewController: UITableViewController { - - typealias NativeScanData = ScanData - - typealias NativeService = Service - - // MARK: - Properties - - let scanData: NativeScanData - - private(set) var items = [NativeService]() { - - didSet { self.tableView.reloadData() } - } - - private let cellReuseIdentifier = "Cell" - - private let timeout: TimeInterval = .gattDefaultTimeout - - #if os(iOS) - lazy var activityIndicator: UIActivityIndicatorView = self.loadActivityIndicatorView() - #else - lazy var progressDialog: AndroidProgressDialog = { - let progressDialog = AndroidProgressDialog(context: UIApplication.shared.androidActivity) - progressDialog.setIndeterminate(true) - progressDialog.setTitle("Wait") - progressDialog.setMessage("Loading Services...") - return progressDialog - }() - #endif - - // MARK: - Loading - - init(scanData: NativeScanData) { - - self.scanData = scanData - - super.init(style: .plain) - } - - #if os(iOS) - required init?(coder aDecoder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - #endif - - override func viewDidLoad() { - super.viewDidLoad() - - // setup table view - self.tableView.estimatedRowHeight = 44 - self.tableView.rowHeight = UITableViewAutomaticDimension - self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: self.cellReuseIdentifier) - - // add refresh control - - let actionRefresh: () -> () = { - - self.reloadData() - } - - let refreshControl = UIRefreshControl(frame: .zero) - - #if os(Android) || os(macOS) - refreshControl.addTarget(action: actionRefresh, for: .valueChanged) - #else - refreshControl.addTarget(self, action: #selector(pullToRefresh), for: UIControlEvents.valueChanged) - #endif - - self.refreshControl = refreshControl - - self.configureView() - self.reloadData() - } - - // MARK: - Actions - - #if os(iOS) || os(macOS) - @objc func pullToRefresh() { - - DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: { [weak self] in - - self?.reloadData() - }) - } - #endif - - // MARK: - Methods - - private subscript (indexPath: IndexPath) -> NativeService { - - @inline(__always) - get { return self.items[indexPath.row] } - } - - private func configureView() { - - self.title = self.scanData.advertisementData.localName ?? self.scanData.peripheral.identifier.description - } - - private func reloadData() { - - let peripheral = self.scanData.peripheral - let timeout = self.timeout - - performActivity({ - try NativeCentral.shared.connect(to: peripheral) - defer { NativeCentral.shared.disconnect(peripheral: peripheral) } - return try NativeCentral.shared.discoverServices([], for: peripheral, timeout: timeout) - }, completion: { - $0.items = $1 - }) - } - - private func endRefreshing() { - - if let refreshControl = self.refreshControl, - refreshControl.isRefreshing == true { - - refreshControl.endRefreshing() - } - } - - private func configure(cell: UITableViewCell, at indexPath: IndexPath) { - - let item = self[indexPath] - - cell.textLabel?.text = item.uuid.description - - #if os(iOS) - cell.textLabel?.numberOfLines = 0 - #endif - } - - // MARK: - UITableViewDataSource - - override func numberOfSections(in tableView: UITableView) -> Int { - - return 1 - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - - return items.count - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - - let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) - - configure(cell: cell, at: indexPath) - - return cell - } - - // MARK: - UITableViewDelegate - - override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - - #if os(iOS) - defer { tableView.deselectRow(at: indexPath, animated: true) } - #endif - - let item = self[indexPath] - - log("Selected \(item.uuid.description)") - - let viewController = CharacteristicsViewController(service: item) - - self.show(viewController, sender: self) - } -} - -// MARK: - ActivityIndicatorViewController - -extension ServicesViewController: TableViewActivityIndicatorViewController { } diff --git a/Android/app/src/test/java/com/millertech/bluetoothexplorer/ExampleUnitTest.kt b/Android/app/src/test/java/com/millertech/bluetoothexplorer/ExampleUnitTest.kt deleted file mode 100644 index a89df4a..0000000 --- a/Android/app/src/test/java/com/millertech/bluetoothexplorer/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.millertech.bluetoothexplorer - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} diff --git a/Android/build.gradle b/Android/build.gradle deleted file mode 100644 index fadcee6..0000000 --- a/Android/build.gradle +++ /dev/null @@ -1,32 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - ext.kotlin_version = '1.2.51' - repositories { - google() - jcenter() - mavenLocal() - mavenCentral() - maven { url 'https://jitpack.io' } - } - dependencies { - classpath 'net.zhuoweizhang:swiftandroid:1.0.0' - classpath 'com.android.tools.build:gradle:3.1.4' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - google() - jcenter() - maven { url 'https://jitpack.io' } - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/Android/gradle.properties b/Android/gradle.properties deleted file mode 100644 index 743d692..0000000 --- a/Android/gradle.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true diff --git a/Android/gradle/wrapper/gradle-wrapper.jar b/Android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7a3265ee94c0ab25cf079ac8ccdf87f41d455d42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54708 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

_x$+l{{cH8$W#CT diff --git a/Android/gradle/wrapper/gradle-wrapper.properties b/Android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index d5b3c01..0000000 --- a/Android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Wed Sep 05 14:57:00 PET 2018 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip diff --git a/Android/gradlew b/Android/gradlew deleted file mode 100755 index cccdd3d..0000000 --- a/Android/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/Android/gradlew.bat b/Android/gradlew.bat deleted file mode 100644 index f955316..0000000 --- a/Android/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/Android/settings.gradle b/Android/settings.gradle deleted file mode 100644 index e7b4def..0000000 --- a/Android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -include ':app' diff --git a/Cartfile b/Cartfile deleted file mode 100644 index 522eae6..0000000 --- a/Cartfile +++ /dev/null @@ -1 +0,0 @@ -github "PureSwift/GATT" "master" \ No newline at end of file diff --git a/Cartfile.resolved b/Cartfile.resolved deleted file mode 100644 index 85cfa95..0000000 --- a/Cartfile.resolved +++ /dev/null @@ -1,2 +0,0 @@ -github "PureSwift/Bluetooth" "cd5d3fa8a243d405c024a907481a6179c46a9cd6" -github "PureSwift/GATT" "e6ac711ce0ebafd30d8d8ba11b9015a9f1d0a5fb" diff --git a/iOS/Old/BluetoothExplorer.xcodeproj/project.pbxproj b/iOS/Old/BluetoothExplorer.xcodeproj/project.pbxproj deleted file mode 100644 index 4c173d8..0000000 --- a/iOS/Old/BluetoothExplorer.xcodeproj/project.pbxproj +++ /dev/null @@ -1,774 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 50; - objects = { - -/* Begin PBXBuildFile section */ - 51B6F9B3215567E800251524 /* CharacteristicsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51B6F9A7215567E800251524 /* CharacteristicsViewController.swift */; }; - 6E0596AD2158448B00BB43DC /* CharacteristicViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E0596A12158448B00BB43DC /* CharacteristicViewController.swift */; }; - 6E0596EC2158A88500BB43DC /* Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E0596EB2158A88500BB43DC /* Appearance.swift */; }; - 6E303E072142398F0034A6C1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6E303E062142398F0034A6C1 /* Assets.xcassets */; }; - 6E303E0A2142398F0034A6C1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6E303E082142398F0034A6C1 /* LaunchScreen.storyboard */; }; - 6E303E1921423AED0034A6C1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E303E1421423AED0034A6C1 /* AppDelegate.swift */; }; - 6E38F60F2278DAB200925952 /* ScanDataTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E38F60E2278DAB200925952 /* ScanDataTableViewCell.xib */; }; - 6E38F6112278DE3F00925952 /* ReusableTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E38F6102278DE3F00925952 /* ReusableTableViewCell.swift */; }; - 6E38F6132278DE5B00925952 /* NibTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E38F6122278DE5B00925952 /* NibTableViewCell.swift */; }; - 6E38F6152278DE8400925952 /* ScanDataTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E38F6142278DE8400925952 /* ScanDataTableViewCell.swift */; }; - 6E38F6172278DEA600925952 /* AndroidTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E38F6162278DEA600925952 /* AndroidTableViewCell.swift */; }; - 6E733FE121423DFE001B8682 /* GATT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E733FD221423DEC001B8682 /* GATT.framework */; }; - 6E733FE221423DFE001B8682 /* GATT.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6E733FD221423DEC001B8682 /* GATT.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 6E733FE521423DFE001B8682 /* DarwinGATT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E733FDC21423DEC001B8682 /* DarwinGATT.framework */; }; - 6E733FE621423DFE001B8682 /* DarwinGATT.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6E733FDC21423DEC001B8682 /* DarwinGATT.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 6E733FE921423DFE001B8682 /* Bluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E733F9E21423DE0001B8682 /* Bluetooth.framework */; }; - 6E733FEA21423DFE001B8682 /* Bluetooth.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6E733F9E21423DE0001B8682 /* Bluetooth.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 6E73401F21424322001B8682 /* CentralViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E73401E21424322001B8682 /* CentralViewController.swift */; }; - 6E73402C21424437001B8682 /* Central.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E73402B21424437001B8682 /* Central.swift */; }; - 6EAEEE3C2142470C009A7A9F /* ErrorAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EAEEE302142470C009A7A9F /* ErrorAlert.swift */; }; - 6EAEEE3E21424717009A7A9F /* ActivityIndicatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EAEEE3D21424717009A7A9F /* ActivityIndicatorViewController.swift */; }; - 6EAEEE4021424790009A7A9F /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EAEEE3F21424790009A7A9F /* Async.swift */; }; - 6EAEEE42214247F3009A7A9F /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EAEEE41214247F3009A7A9F /* Log.swift */; }; - 6EAEEED221437F2B009A7A9F /* ServicesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EAEEED121437F2B009A7A9F /* ServicesViewController.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 6E733F9B21423DE0001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733F9321423DE0001B8682 /* Bluetooth.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EE84DB71CAF5C7C00A40C4D; - remoteInfo = "Bluetooth-macOS"; - }; - 6E733F9D21423DE0001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733F9321423DE0001B8682 /* Bluetooth.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EF45FBD1CC6D04D001F7A39; - remoteInfo = "Bluetooth-iOS"; - }; - 6E733F9F21423DE0001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733F9321423DE0001B8682 /* Bluetooth.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EB2EA1D1CD5A8A7000CF975; - remoteInfo = "Bluetooth-watchOS"; - }; - 6E733FA121423DE0001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733F9321423DE0001B8682 /* Bluetooth.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6E49B26520532D45002EA5DC; - remoteInfo = "Bluetooth-tvOS"; - }; - 6E733FA321423DE0001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733F9321423DE0001B8682 /* Bluetooth.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EE84DC11CAF5C7C00A40C4D; - remoteInfo = BluetoothTests; - }; - 6E733FCF21423DEC001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EE84D841CAF419D00A40C4D; - remoteInfo = "GATT-macOS"; - }; - 6E733FD121423DEC001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EF45FCF1CC6D355001F7A39; - remoteInfo = "GATT-iOS"; - }; - 6E733FD321423DEC001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EE9103A1FDE5C17007AD3EA; - remoteInfo = "GATT-watchOS"; - }; - 6E733FD521423DEC001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6E49B23A20532A94002EA5DC; - remoteInfo = "GATT-tvOS"; - }; - 6E733FD721423DEC001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6E0FC45A20F873B1009269B4; - remoteInfo = GATTTests; - }; - 6E733FD921423DEC001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EA5D1562107DE66009998FD; - remoteInfo = "DarwinGATT-macOS"; - }; - 6E733FDB21423DEC001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EA5D16D2107DE6A009998FD; - remoteInfo = "DarwinGATT-iOS"; - }; - 6E733FDD21423DEC001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EA5D1842107DE6D009998FD; - remoteInfo = "DarwinGATT-watchOS"; - }; - 6E733FDF21423DEC001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 6EA5D19B2107DE70009998FD; - remoteInfo = "DarwinGATT-tvOS"; - }; - 6E733FE321423DFE001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 6EF45FBF1CC6D355001F7A39; - remoteInfo = "GATT-iOS"; - }; - 6E733FE721423DFE001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 6EA5D1582107DE6A009998FD; - remoteInfo = "DarwinGATT-iOS"; - }; - 6E733FEB21423DFE001B8682 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 6E733F9321423DE0001B8682 /* Bluetooth.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 6EF45FA21CC6D04D001F7A39; - remoteInfo = "Bluetooth-iOS"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 6E733FED21423DFE001B8682 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 6E733FEA21423DFE001B8682 /* Bluetooth.framework in Embed Frameworks */, - 6E733FE221423DFE001B8682 /* GATT.framework in Embed Frameworks */, - 6E733FE621423DFE001B8682 /* DarwinGATT.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 51B6F9A7215567E800251524 /* CharacteristicsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CharacteristicsViewController.swift; sourceTree = ""; }; - 6E0596A12158448B00BB43DC /* CharacteristicViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CharacteristicViewController.swift; sourceTree = ""; }; - 6E0596EB2158A88500BB43DC /* Appearance.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Appearance.swift; sourceTree = ""; }; - 6E303DFC2142398E0034A6C1 /* BluetoothExplorer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BluetoothExplorer.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 6E303E062142398F0034A6C1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 6E303E092142398F0034A6C1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 6E303E0B2142398F0034A6C1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 6E303E1421423AED0034A6C1 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 6E303E1521423AED0034A6C1 /* MainActivity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainActivity.swift; sourceTree = ""; }; - 6E38F60E2278DAB200925952 /* ScanDataTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ScanDataTableViewCell.xib; sourceTree = ""; }; - 6E38F6102278DE3F00925952 /* ReusableTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReusableTableViewCell.swift; sourceTree = ""; }; - 6E38F6122278DE5B00925952 /* NibTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NibTableViewCell.swift; sourceTree = ""; }; - 6E38F6142278DE8400925952 /* ScanDataTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanDataTableViewCell.swift; sourceTree = ""; }; - 6E38F6162278DEA600925952 /* AndroidTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AndroidTableViewCell.swift; sourceTree = ""; }; - 6E733F9321423DE0001B8682 /* Bluetooth.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Bluetooth.xcodeproj; path = ../Carthage/Checkouts/Bluetooth/Xcode/Bluetooth.xcodeproj; sourceTree = ""; }; - 6E733FC321423DEC001B8682 /* GATT.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = GATT.xcodeproj; path = ../Carthage/Checkouts/GATT/Xcode/GATT.xcodeproj; sourceTree = ""; }; - 6E73401E21424322001B8682 /* CentralViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CentralViewController.swift; sourceTree = ""; }; - 6E73402B21424437001B8682 /* Central.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Central.swift; sourceTree = ""; }; - 6EAEEE302142470C009A7A9F /* ErrorAlert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorAlert.swift; sourceTree = ""; }; - 6EAEEE3D21424717009A7A9F /* ActivityIndicatorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActivityIndicatorViewController.swift; sourceTree = ""; }; - 6EAEEE3F21424790009A7A9F /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = ""; }; - 6EAEEE41214247F3009A7A9F /* Log.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Log.swift; sourceTree = ""; }; - 6EAEEED121437F2B009A7A9F /* ServicesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServicesViewController.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 6E303DF92142398E0034A6C1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 6E733FE921423DFE001B8682 /* Bluetooth.framework in Frameworks */, - 6E733FE121423DFE001B8682 /* GATT.framework in Frameworks */, - 6E733FE521423DFE001B8682 /* DarwinGATT.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 6E0596EA2158A87600BB43DC /* View */ = { - isa = PBXGroup; - children = ( - 6E0596EB2158A88500BB43DC /* Appearance.swift */, - 6E38F6102278DE3F00925952 /* ReusableTableViewCell.swift */, - 6E38F6122278DE5B00925952 /* NibTableViewCell.swift */, - 6E38F6162278DEA600925952 /* AndroidTableViewCell.swift */, - 6E38F6142278DE8400925952 /* ScanDataTableViewCell.swift */, - ); - name = View; - sourceTree = ""; - }; - 6E303DF32142398E0034A6C1 = { - isa = PBXGroup; - children = ( - 6E733F9221423DD8001B8682 /* Dependencies */, - 6E303E1121423AED0034A6C1 /* Sources */, - 6E303DFE2142398E0034A6C1 /* BluetoothExplorer */, - 6E303DFD2142398E0034A6C1 /* Products */, - ); - sourceTree = ""; - }; - 6E303DFD2142398E0034A6C1 /* Products */ = { - isa = PBXGroup; - children = ( - 6E303DFC2142398E0034A6C1 /* BluetoothExplorer.app */, - ); - name = Products; - sourceTree = ""; - }; - 6E303DFE2142398E0034A6C1 /* BluetoothExplorer */ = { - isa = PBXGroup; - children = ( - 6E303E062142398F0034A6C1 /* Assets.xcassets */, - 6E303E082142398F0034A6C1 /* LaunchScreen.storyboard */, - 6E303E0B2142398F0034A6C1 /* Info.plist */, - 6E38F60E2278DAB200925952 /* ScanDataTableViewCell.xib */, - ); - path = BluetoothExplorer; - sourceTree = ""; - }; - 6E303E1121423AED0034A6C1 /* Sources */ = { - isa = PBXGroup; - children = ( - 6E303E1521423AED0034A6C1 /* MainActivity.swift */, - 6E303E1421423AED0034A6C1 /* AppDelegate.swift */, - 6EAEEE3F21424790009A7A9F /* Async.swift */, - 6EAEEE41214247F3009A7A9F /* Log.swift */, - 6E0596EA2158A87600BB43DC /* View */, - 6E73402D21424456001B8682 /* Controller */, - 6E73402E21424460001B8682 /* Model */, - ); - name = Sources; - path = ../Android/app/src/main/swift/Sources; - sourceTree = ""; - }; - 6E733F9221423DD8001B8682 /* Dependencies */ = { - isa = PBXGroup; - children = ( - 6E733FC321423DEC001B8682 /* GATT.xcodeproj */, - 6E733F9321423DE0001B8682 /* Bluetooth.xcodeproj */, - ); - name = Dependencies; - sourceTree = ""; - }; - 6E733F9421423DE0001B8682 /* Products */ = { - isa = PBXGroup; - children = ( - 6E733F9C21423DE0001B8682 /* Bluetooth.framework */, - 6E733F9E21423DE0001B8682 /* Bluetooth.framework */, - 6E733FA021423DE0001B8682 /* Bluetooth.framework */, - 6E733FA221423DE0001B8682 /* Bluetooth.framework */, - 6E733FA421423DE0001B8682 /* BluetoothTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 6E733FC421423DEC001B8682 /* Products */ = { - isa = PBXGroup; - children = ( - 6E733FD021423DEC001B8682 /* GATT.framework */, - 6E733FD221423DEC001B8682 /* GATT.framework */, - 6E733FD421423DEC001B8682 /* GATT.framework */, - 6E733FD621423DEC001B8682 /* GATT.framework */, - 6E733FD821423DEC001B8682 /* GATTTests.xctest */, - 6E733FDA21423DEC001B8682 /* DarwinGATT.framework */, - 6E733FDC21423DEC001B8682 /* DarwinGATT.framework */, - 6E733FDE21423DEC001B8682 /* DarwinGATT.framework */, - 6E733FE021423DEC001B8682 /* DarwinGATT.framework */, - ); - name = Products; - sourceTree = ""; - }; - 6E73402D21424456001B8682 /* Controller */ = { - isa = PBXGroup; - children = ( - 6EAEEE4421424869009A7A9F /* Protocols */, - 6EAEEE432142485F009A7A9F /* Extensions */, - 6E73401E21424322001B8682 /* CentralViewController.swift */, - 6EAEEED121437F2B009A7A9F /* ServicesViewController.swift */, - 51B6F9A7215567E800251524 /* CharacteristicsViewController.swift */, - 6E0596A12158448B00BB43DC /* CharacteristicViewController.swift */, - ); - name = Controller; - sourceTree = ""; - }; - 6E73402E21424460001B8682 /* Model */ = { - isa = PBXGroup; - children = ( - 6E73402B21424437001B8682 /* Central.swift */, - ); - name = Model; - sourceTree = ""; - }; - 6EAEEE432142485F009A7A9F /* Extensions */ = { - isa = PBXGroup; - children = ( - 6EAEEE302142470C009A7A9F /* ErrorAlert.swift */, - ); - name = Extensions; - sourceTree = ""; - }; - 6EAEEE4421424869009A7A9F /* Protocols */ = { - isa = PBXGroup; - children = ( - 6EAEEE3D21424717009A7A9F /* ActivityIndicatorViewController.swift */, - ); - name = Protocols; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 6E303DFB2142398E0034A6C1 /* BluetoothExplorer */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6E303E0E2142398F0034A6C1 /* Build configuration list for PBXNativeTarget "BluetoothExplorer" */; - buildPhases = ( - 6E303DF82142398E0034A6C1 /* Sources */, - 6E303DF92142398E0034A6C1 /* Frameworks */, - 6E303DFA2142398E0034A6C1 /* Resources */, - 6E733FED21423DFE001B8682 /* Embed Frameworks */, - 6E0596E92158A46500BB43DC /* Increment Build */, - ); - buildRules = ( - ); - dependencies = ( - 6E733FEC21423DFE001B8682 /* PBXTargetDependency */, - 6E733FE421423DFE001B8682 /* PBXTargetDependency */, - 6E733FE821423DFE001B8682 /* PBXTargetDependency */, - ); - name = BluetoothExplorer; - productName = BluetoothExplorer; - productReference = 6E303DFC2142398E0034A6C1 /* BluetoothExplorer.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 6E303DF42142398E0034A6C1 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0940; - LastUpgradeCheck = 0940; - ORGANIZATIONNAME = PureSwift; - TargetAttributes = { - 6E303DFB2142398E0034A6C1 = { - CreatedOnToolsVersion = 9.4.1; - }; - }; - }; - buildConfigurationList = 6E303DF72142398E0034A6C1 /* Build configuration list for PBXProject "BluetoothExplorer" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 6E303DF32142398E0034A6C1; - productRefGroup = 6E303DFD2142398E0034A6C1 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 6E733F9421423DE0001B8682 /* Products */; - ProjectRef = 6E733F9321423DE0001B8682 /* Bluetooth.xcodeproj */; - }, - { - ProductGroup = 6E733FC421423DEC001B8682 /* Products */; - ProjectRef = 6E733FC321423DEC001B8682 /* GATT.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 6E303DFB2142398E0034A6C1 /* BluetoothExplorer */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 6E733F9C21423DE0001B8682 /* Bluetooth.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Bluetooth.framework; - remoteRef = 6E733F9B21423DE0001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733F9E21423DE0001B8682 /* Bluetooth.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Bluetooth.framework; - remoteRef = 6E733F9D21423DE0001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FA021423DE0001B8682 /* Bluetooth.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Bluetooth.framework; - remoteRef = 6E733F9F21423DE0001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FA221423DE0001B8682 /* Bluetooth.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Bluetooth.framework; - remoteRef = 6E733FA121423DE0001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FA421423DE0001B8682 /* BluetoothTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = BluetoothTests.xctest; - remoteRef = 6E733FA321423DE0001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FD021423DEC001B8682 /* GATT.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = GATT.framework; - remoteRef = 6E733FCF21423DEC001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FD221423DEC001B8682 /* GATT.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = GATT.framework; - remoteRef = 6E733FD121423DEC001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FD421423DEC001B8682 /* GATT.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = GATT.framework; - remoteRef = 6E733FD321423DEC001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FD621423DEC001B8682 /* GATT.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = GATT.framework; - remoteRef = 6E733FD521423DEC001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FD821423DEC001B8682 /* GATTTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = GATTTests.xctest; - remoteRef = 6E733FD721423DEC001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FDA21423DEC001B8682 /* DarwinGATT.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = DarwinGATT.framework; - remoteRef = 6E733FD921423DEC001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FDC21423DEC001B8682 /* DarwinGATT.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = DarwinGATT.framework; - remoteRef = 6E733FDB21423DEC001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FDE21423DEC001B8682 /* DarwinGATT.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = DarwinGATT.framework; - remoteRef = 6E733FDD21423DEC001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 6E733FE021423DEC001B8682 /* DarwinGATT.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = DarwinGATT.framework; - remoteRef = 6E733FDF21423DEC001B8682 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 6E303DFA2142398E0034A6C1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 6E303E0A2142398F0034A6C1 /* LaunchScreen.storyboard in Resources */, - 6E38F60F2278DAB200925952 /* ScanDataTableViewCell.xib in Resources */, - 6E303E072142398F0034A6C1 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 6E0596E92158A46500BB43DC /* Increment Build */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Increment Build"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/bin/bash\n\n# update_build_number.sh\n# Usage: `update_build_number.sh [branch]`\n# Run this script after the 'Copy Bundle Resources' build phase\n# Ref: http://tgoode.com/2014/06/05/sensible-way-increment-bundle-version-cfbundleversion-xcode/\n\nif [ $TRAVIS == \"true\" ]\nthen echo \"Updating build number to TRAVISCI.\"\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion TRAVISCI\" \"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\nelse branch=${1:-'master'}\nbuildNumber=$(expr $(git rev-list $branch --count) - $(git rev-list HEAD..$branch --count))\necho \"Updating build number to $buildNumber using branch '$branch'.\"\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $buildNumber\" \"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}\"\nfi"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 6E303DF82142398E0034A6C1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 6E38F6112278DE3F00925952 /* ReusableTableViewCell.swift in Sources */, - 6E0596AD2158448B00BB43DC /* CharacteristicViewController.swift in Sources */, - 6E38F6132278DE5B00925952 /* NibTableViewCell.swift in Sources */, - 6E38F6172278DEA600925952 /* AndroidTableViewCell.swift in Sources */, - 6E303E1921423AED0034A6C1 /* AppDelegate.swift in Sources */, - 6EAEEE3E21424717009A7A9F /* ActivityIndicatorViewController.swift in Sources */, - 6EAEEE3C2142470C009A7A9F /* ErrorAlert.swift in Sources */, - 6EAEEE4021424790009A7A9F /* Async.swift in Sources */, - 6E73402C21424437001B8682 /* Central.swift in Sources */, - 6E38F6152278DE8400925952 /* ScanDataTableViewCell.swift in Sources */, - 6E73401F21424322001B8682 /* CentralViewController.swift in Sources */, - 6E0596EC2158A88500BB43DC /* Appearance.swift in Sources */, - 6EAEEED221437F2B009A7A9F /* ServicesViewController.swift in Sources */, - 6EAEEE42214247F3009A7A9F /* Log.swift in Sources */, - 51B6F9B3215567E800251524 /* CharacteristicsViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 6E733FE421423DFE001B8682 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "GATT-iOS"; - targetProxy = 6E733FE321423DFE001B8682 /* PBXContainerItemProxy */; - }; - 6E733FE821423DFE001B8682 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "DarwinGATT-iOS"; - targetProxy = 6E733FE721423DFE001B8682 /* PBXContainerItemProxy */; - }; - 6E733FEC21423DFE001B8682 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Bluetooth-iOS"; - targetProxy = 6E733FEB21423DFE001B8682 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 6E303E082142398F0034A6C1 /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 6E303E092142398F0034A6C1 /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 6E303E0C2142398F0034A6C1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 6E303E0D2142398F0034A6C1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 6E303E0F2142398F0034A6C1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = DGYBYARDK9; - INFOPLIST_FILE = BluetoothExplorer/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.pureswift.BluetoothExplorer; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 6E303E102142398F0034A6C1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = DGYBYARDK9; - INFOPLIST_FILE = BluetoothExplorer/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = org.pureswift.BluetoothExplorer; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 6E303DF72142398E0034A6C1 /* Build configuration list for PBXProject "BluetoothExplorer" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6E303E0C2142398F0034A6C1 /* Debug */, - 6E303E0D2142398F0034A6C1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 6E303E0E2142398F0034A6C1 /* Build configuration list for PBXNativeTarget "BluetoothExplorer" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6E303E0F2142398F0034A6C1 /* Debug */, - 6E303E102142398F0034A6C1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 6E303DF42142398E0034A6C1 /* Project object */; -} diff --git a/iOS/Old/BluetoothExplorer.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOS/Old/BluetoothExplorer.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 97fe2a5..0000000 --- a/iOS/Old/BluetoothExplorer.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/iOS/Old/BluetoothExplorer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/iOS/Old/BluetoothExplorer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/iOS/Old/BluetoothExplorer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/iOS/Old/BluetoothExplorer.xcodeproj/xcshareddata/xcschemes/BluetoothExplorer.xcscheme b/iOS/Old/BluetoothExplorer.xcodeproj/xcshareddata/xcschemes/BluetoothExplorer.xcscheme deleted file mode 100644 index af6222e..0000000 --- a/iOS/Old/BluetoothExplorer.xcodeproj/xcshareddata/xcschemes/BluetoothExplorer.xcscheme +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Contents.json b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100755 index 7130009..0000000 --- a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "NotificationIcon@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "NotificationIcon@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-Small.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-Small@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-Small@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-40@3x.png", - "scale" : "3x" - }, - { - "size" : "57x57", - "idiom" : "iphone", - "filename" : "Icon.png", - "scale" : "1x" - }, - { - "size" : "57x57", - "idiom" : "iphone", - "filename" : "Icon@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "NotificationIcon~ipad.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "NotificationIcon~ipad@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-Small.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-Small@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-40.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-40@2x.png", - "scale" : "2x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "Icon-Small-50.png", - "scale" : "1x" - }, - { - "size" : "50x50", - "idiom" : "ipad", - "filename" : "Icon-Small-50@2x.png", - "scale" : "2x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "Icon-72.png", - "scale" : "1x" - }, - { - "size" : "72x72", - "idiom" : "ipad", - "filename" : "Icon-72@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "ios-marketing.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-40.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-40.png deleted file mode 100755 index 51a4bc5a49600fcb747cd861e1481b9b15522573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1940 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 FV1i*8z>@#~ diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png deleted file mode 100755 index 4ebe5fb7693db0656a3bd7135af512ced0f80fa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7535 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 FV1i*8z>@#~ diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png deleted file mode 100755 index 62fb2605d3a60ae06d4b4a55c6d809487b4dc07b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13112 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 diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-72@2x.png deleted file mode 100755 index 5e07378fc35beb325da72eea8940d54be108b53a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9652 zcmV;lB}>|gP)PyFZb?KzRCodHeF=0N$9ZN~pL1h?!9m;vNb!^#fy zk#!t9@^k#&dUq2?)~?rz&y8#;@mjVdA5k1hUMH3;+oUL7q9{@q??WO;-1h*OyRX`> zx@QIh5Cfna17P6C=5SEmQ(f2B_5WY}^;b1HJV3ci$I58|e&rPPQb}10Tmo!`JqMQn zy9C$@Yk?J3+)F*|5@0K=1y)#bFZHk$2AH_Q$~#kWvja)?hZ1TMZgONvIYJ2@N`ikl ztgo4pSUJ~LFkluy0K||v%|i^2V9Gov2}B?qZy{q+&Y+xT(2T)lOg>Eojgu%5a`3Gj zlnP3^A^~GinWn<2AwdhuoKF#DQRW38QAEO1(=ZH8(-Uekmf>Qilp!)Aufz_w!T__O z@^Psu*$De2kK!*1Qo&P+ID&|ezZ$6-;xUz8>&RY^@seP*ILz=eXLMIA(e zkknO$Jh6CpLQnEOzJ#5)RBe$dQmP>noLNSUzbr(e$#Jrgt_OFo2r!di*&Kz8 zUlWvac)FJ#uu1M7fEX-0H9wW{`~1jr#z>&mlah@Ts<14_QUiu+ntARX4#7sg6xAj?ja@K~KMuaP!0a%y7O4zcj6c3C zjDJbmE7wRsD{psSTJBEBs%z=kIsL^iaLJ)uaa{i;7UPGFe}XPK<6k= zBYsI%T(_3n8;P*x6Xw7%?YE!fMozm;Wb!`7_^bR)QbIH`ODP?f2r!Gg$J+vWZDoiE z3!|pgpz*%RmYa8o1e^G^?>C1|sXM-4_8y-1eMKYkqPVImxZ1CJjl`0vv_%IDPaj-h zB3x`ur4R}RN-)xb+moI#&+RPQki~xx*4<4!5gH%Xcm5Bv>!som=lu)e!=Ye%m{d}T z$E84RaRGw~gI_pz&&0UoXkinQ@M=y=8L$1I@Zx;Jq@sna+6L!0noj6DzijrDpr0Y% z9OI8I0pnjp!0^0zjO1!?_o{_)cgbh=ypQN$ z^zcmeaCZ%iA6`Ao#=l66U-;w~{?1*|X1vR`yEiJSRh0ozD(Pgg^Z_W zUqfW(H$Vb4#9L*&{;&GE{iL#)uWFsKRMRffk@IHfs~i#GiVp)B?LW!aTt?=1@3f?5 zJQYMS z)cCp$G%;qLJ7B)OpW{WoY0I4MI$(*$={*E&lTlcX8YUe%CvLoh6Xk^zukc<}Kj4); zG@Z`qDv?V#2~irrP;t&Qsz|)GLS$mFgas^Y20&5Kzz6H~*Pby?@8XmoU%wH*3r$y< zT}S9hw|V|B7wr*RuH>Xy{eqL@#?j|F%G-b;RXRRMg4KM(6;pFt*cl-nMG10+^80R=il0tBGR1--L}>z{5i)2F;VZ zIA55rUq55MG(Kv)_RDPdVt^qQ&&5XgRqOeh_8D(k$VJSd2fdPHBoi7n7p&421Q=?H ziH6mFy%I`mY3%NH%R&FNZ8Q7MnnRs59yN~dgvX9})%%DiXq?sBI8 z@AP!6-+1*GloA33#+Lk9noQG>s&M)33&Ez?y=WZ2M^?;KT%`-7A?~RGswo(mW}gQC z%Q^LYv6{HQE_>xa_!8f+nbS;~QMF$^lzHrPeA~6sO&`I!6sDg{K|AoX%wwN5drwWv zg(k&_dlZ_{CQ#8bf}ZVz!{bp zEYJj0h=~AJ+m4OUfsVqMr4ExwMW9YhQ^WnVoJ+vKghM1zQ{h`i??JRCi8L#J@)hE% zrm9MLg^N#Uzx)mz?jgPig9Kn;rDbwLeflezC%;5vBQ^j=_i2op*{|qclL3xqGUnm} zhVt-r6`ml632R6wH-{U*m@tGZwGYz^CFWEvYQQ(HSMGU$C?QVOu^^pN-sn7Kj*qY~ zY#Hn$U?xs~`QOtIf66#>h|@Lm{Be$o_OHwkY<*ZKLjohcF3RBO7ExAeeH0V9?htbW z7^V>dBop*6$r^=uGzP!s9m+jlCZdO`=;^I*cE3lb%oFC!!mhSvoUS}gZ2t5aQ0dv54s@!=RSJQf1g{7M=5 z=Vn`B>#fR%?+5#!%&-eQpr0TW@c|_EDfk7?5h-_?y_k>8kQ1hl0UWpJ{B8(%1m4tK zC^E;rgi>Vnq}& zaSp@;hZZZxJ&aOQAf_NVzR_7jXc=embFsy(w|M^iK@yD6bcXSDXCK1Xw&YS;+`pLP z6HqwkUCeR2+gX&zl3BD-=tNX|?r}Qi#wAVIbglQZ{~$E3qsbH__s~ihBWJ&}r`an^ zTH+^b0HB$iC%`vdRQ140wUo%O)m! zN>cP$5)n6Di!qb_>R$cGLG8e=&CauUFo`cfymPGhqtRjGwLR${e_KCtfT=NnVZ!vp z0_@ZV31|5*`-!9JlzH};bi;dyvgkw1SRyr$;(1YW3Yg=qi{KfrX41``OiNvu)qjx> zG-CR@f1~Yto|68{sH3S>uz~F+(t#r~H8!@{(jE<8=$7wn` z$chFx1*R+z!vA@cHj|X!|54AqpI_W+QF^XF+NXLkeYog=L4B#3<}(tPH!PLMbvl*$ z$N#Cl@NXRJ)94}wCiMwMooIgy-ZACKqzVj68W3ehTuk&}87Ej+{y}IaWIofAL~nI1Z@d4;Kay2dW=e@{y@v zjE$+knPS~9RxY>K>CkvGX-XIxIYkROItB~^hHVrhNIfwlm0Bvy1X20OUwQBQG9L`n zc$!f@tD$qmkIigZVT-2QrX~gwqk=Y6_OJQ7vZq;=$YSD(WfMVn6}5xAK|tK%F~@z$ zB(@`?F0_}Ou4BM(8(e}UQA|*!do;zGYN-zC*7y0p`lz)1Hk#JB6zsgPd9$|0xBX%8 z=-G=bob5~uwrorb#mUI3#wF7fJ~F8c0-UO{yI{!g?KQj3ElRbh-Z_#=aWV`YF1i&T0qt7#H3mu)67*@4tOjy8W*F%_R!ZU%Y(AP(qEhRlMMs zAKGPbIhF#q!RE)`dj7=mw|al{Df9QQTVJ9o%_A8?q+9P4x4#pxsn0%RoIZ}(OHLHw zkYTyk<*WzHVZ%zzVin9~6hi|1*O)K9xM8#WhxbS~-9|9cVI6>7`QwkP&-^6)(?^;4 zIGwhym+qVXY|n|0eead+TiX8jpWfu!Z`1KO%&veUa!()Z`00zMGX{P3_3mmf_m1}J zrJQ{xk|bQVQNH7DaqBkX4RFaMjm4NP3e%WO80I|ytS~leRy6`Q8`&#vxyJj6zw&@d!rGR~ec z`?}4sQJRP|odj;;QTPhDyfulNt`N3v6V|LPmPr1(`rI$XtylAn&G{<}35q>>7{+V5IF0;m7{+cKA^_xBa@(Vd!2z-gD-`r(VUT<7|L~K`XpURQ2}DYrgx@ z>(;k059(z;41;3!8Dljxi6EluSkiJC3U%b|-oJS4;Qmvicy8FxkPR6LryCF4v;FDO;|>8@m=W56H}dq?AEddDz+ovb7q zor#>sbACkq;6J?d)u#?=YRQ%MWNzgjf^p_=fAaE&9y!=MuA^DlGtC@rb1la6C%dDA z<4G4AA-MspXCx8FFbE(`9+=;;3_`M;qQV#d_1H(gySsnb!8*IilvaMIvw!4I9@_Q5 zFHWgg(S-dHvS<}lj3*OR>w@$g5t zUB7Yl^jN>k=k&!R9iM*e(24FivwUV>R#Et5=PGZQBQZBZ$Z-!tw~nX5zH%8)`-^S| z%pkA5o;NPU@BYS~AMQAkUo$x^?(f(srU@T@?)49RYwwBPB-W|3MnF^K#o)BsQZA)p zt+nIBF<_X#40>Q7pEW0lN2b!0;UxXoqlZ5C*#202u}pKbmSgFDjE+xy>i_Qj^b@a- zV_eQiY4I1q*o7jTPZlt}=d_59MI!8{^%Y)=@XVT*-PI&a$@AZS{_L^taWMXM&1Jy& zXDzk6ACI2v{qzqH?q%FvW>2ck-Dgir;46KK3on7$d&&%X!i>;RfZ*8SjoO8fKZqot6h<{J>0>lcw-r|K-@dkG$AFvf>$k*TBe! z9@=&PGbdC|K-K0}T7`|mlXqXyfO+7lL!-hNMZ?YkBLoxlw_IM|TpMII)_ERmWNjHl z6y+!Ty6<{$=fP7K=6P%RMWefqcHH^kj%N<_ad;~htUQqXQ%0q;7TGY@HB{WVz7CD& zVoJ<0U@Q+pB0=xHH?NtsTo?bCQ)yn$YZqeg`}*$3cdk6f5AObtzk1{S-`sN?+#M#2 z*}410ZGbC;+-Q0t@9L(#!XKT~Dwl=_yIb*4cT(k@#ImZ8I-#`5M zC-%n@D~9n$Ct{!e{@zbL{@OUSFt|G^0%`B)(2cvVX})!11LnY8bT4G(Fh8qs$ce{{ zsU-dRZ5!*V!VUzZUAHXbmrX(X=Cf!2<2PS8+ikg|IjZ@RM?T)s_kpkPcw|Qh+kZs@ zeRr;b46}Jve!mqGtCr1ZUX*`quUe9li4uSFi z>d@ITX8h(eFP*&e?_bz+%CfuLN~@R&qgXqbv?}1)*id_XM26!TYd}|r%Nb`_>Q4@F zFP<0_v354(ok(SpnQ7+WIg7(|A^Qk?G_L;qP?t=!>(*44)jC1cA(Kvh<>^=N`^oF0 zDK-~sbu6^?TqCV%wKr*9rSF>6^&UwaOp^NQP>mlmzYY_z(sTnD@`17bxfAj6u`#?k z5)O6^6<*ymqX}3ufx)!G&U(r)V`hF#;{WzYU&lc7#>*lBDCF`ux(7!-`Mv!Q?|9pQ zyJ}VpI_wz`J%n3V7v9obi#M&p!v~J;anrYfPxup3pPHX5a7xJR#x52OmX2 zQZ_f&Ufoh7VehiJEg)0T$csl=`SHH4yS}#L(CN;pF_z_w?mY(XzVqo%QO^%w@TAe zQ+a)Reb6gAR%v($p~Ed3|EnFb-~amVCw3mSmUOwOQ3-AVcmJp7-?;mmdye%aa+Afy z?e4`gG-=qcY+qB~QXQsPrGi(3+dPF3T}_|vSFv?Qv0G=k?ieuipz$>Ak0#m1KlZ^0 zDheY}UaATPZd}vQSQ&7R8AJyRA_DZpK*Id99~}DY$M?sVgYl0|#QyTpegEaL*T!6P zcQg#8Emgtm*EEFjT3mE2_?4h`kR{f^Q=>bYj%S$LUA7J9{l~Gj9(hDl@F&A8Lczf> zvv{h(dp!I*R<8C~MMzOeh`s5SjKKfC+11hIpOB5iN0Te~Vk1epPbJvXPKW#6IenyU$C7XxRC zl_J)}+e``=>m)3dCQ(7EudLXjdit<-*?@b`u5ri)uC4HH$HUrty@>S8;#76K4(0C_}u4z`ud6Pn8n>)bu0?*E^KOyG)F3!b#W%8H7#q* zabP6m6N?I}Y4HnBodd>^u!r-?ay&DK(U!?>o?s3E$gRdZSG@A;okKCO6=wrROQiuh z4|%;4HvT=IxTW*6@4dXevD&f7Dy%n0&vXrb>$&4U+p0#Th`M3?thSaPKa#@gbWIET#T(W}?%Y~`6Gfu20 z?~6_x?HNu&7`g0fQ1aGpXjt8Bnu;Q{M7(S3{Oz@YhOnkB&(P(qLkj7dO{t&W}~T-KAOENzRb;43{kSh^HDfB;+I4wb!5M8}1mw zo|0(C8KTd2i8Z&SFtA|&&$a}#@U!q?Smq8Jm3-uEMou%cQbVeQTU!_2P##3kYG`Pva3M>ssfzwZK`Gci-hD#I zmS${$tGHqO+2n1c?Qa{ci}KB);|ipFVwB3Fa7AOJB~rn};5@i{{?>fJphA6JXZ$ovRH1ECmwPDLKq%Ojn~Rb6=-$x@U}PSfu9c zakdyg_Ok|&QP1{|o*5W(Y~#<@rnCWzyKh`oxu%ZU-JNmwTuD$DUiNQns<^4i2zfD7 z!&am~-PzbHml*rIAi!|HH73?gP0eWf;eP4x`M8>#aLm;i{08B#@_56PUFoD zj#DYD*Mh^8`V?tvQ+1sy?rvqzc98P~!q=|$URA3zy(K{pE(k3oyHLQ81S9G=tgdz@ zD(vmhqtU2L5Rg>QbdC!zo~MIDBOKM7J*pQoes?zhDU~gL zV$$X+aQA8t-do8GPA<87Lv7VNTe-%N39Bx+I~Ej`L<|;|yYztBn6a*AsWf=(?ClcH z^o&w1?F=(!x3lI`ObA+Su^2zL`sc|8aQE6Og5i-PyL+x7E$;5y*c868Nw4tmK+ERt zB}WSxE(&0FMJ(>fMpxkIuMXIZf7}gbS;nvTjZGZy0eQsR!kh@$T(i#b*QD^G+}s#p zc6V6Hn0e5iZJ8l%u}iSec>ERDuJ&J5r(%H!#GoLuwGPGNFYx*z0)~=h#iOpWE)o^@ zp3}ynQ64+GI@07>@rW(Rj8r;(c3`Y?G{*M*K_c#egZ%>3KonXdfwi@jSrf)o*TH!; ztHs?TRpFc4#5G}?yF(0G)0p$R-%X^&1f%25R7tV~Ny- zq4C~{q>8P6am*7r3nxT}*}A^M-&P$8`PdW*#2_;`IkZ05+`X-#@|`UvxI2*)42ny| z-C3oI9E%Q^ov$@Y!%l{3JZ&846_0jKxMlp%YX;k?#WWHbb#NjvFrFGut7)t&%-fC& zyItNQ%@erFRQP4MHPwdvUf7yJwZR4%RN&l&_Y`TWg3CZl^aQW8xw|Y7%Y*^63Zg7l zaESmz@omO$YMQ2NM~B4&=hDd-R2sU7lg47=5r;LtHt`ZZmTFqlpx9#ROdPKzhclOE zs+iKmTS$3ck$4$zv4OV9oYa|-f&qxX z>>tB{(KM?mS&*&A0zR-05uUkITffiJG#CHGlIG?5+R9s6iOt>dQpqI{gM}qoQoxWg zFtgYrGl-0(=$qH(Y+=H5 zKH)b+)Jl)I`$CO7#(zmeBSFW_M>|5QAcv2TPcT^Q4xohuKACY(QX! zah)eYPQA5Nt@ecuoR^a>Z2ZnEU;GZs?j8=`(574-Q7yZ>Wx{YcxGtW)`(Kv1hvf?n zf@d*)c=f2A6IsR&cYLR|$9#gW19|QayL(dzCdS3GySpo4xd4XJLp(BPgREB%-P;Mq zAEkO~DKX1(_onbo%?8%9T5OOl{a-$vH67Mv7Kw$$L8CAxB1#4!l|*|_yB_gXm4fjX zW-?2d`OGN(@V3?dchqUjXJ+}h`z)m_BfwBfHpI0i{p{J^JmZIrUvO%~nx)bg|CHnI zzt<+MW!xP;GmCC_zql0hxl&$$*(HYch!JNn5sUGM!T8VDb`7}k>X}ay6mWN17wc*~vsjEDXuPg%+R>J?0tG;0( zFsqEVjoAHJv1!;R-g83z&)p+3R1s%D=7Ntbvyl^TJqaySpQt@{v~nU^Zr~t1(h#h`u-7NgF2vY0jCJs`$LnjZ_Fhp(TLK1N=7~i#%VKx8i{tcrWdO!% z1(n8TX4rHZd`wl{97yu##`x|r9osEpXB4cafSC*1IKe`1AGX=vWKNu*F`}Z#RY9dW z4Bu(9*3Vwci`TD-Y)_36yAEcvUz|TH2QaJt5Rd3;zzy9E{v8OUbuOCbN77^@MPQ9g zsMui!F<5Mj>SPgb%pf6!M7&(JkA@XfVU7W8jkE1OZQGz1r)?J{)fEPq-3EZo#?1x~ zgDBWY*vzO&@b&{8Q_$8bXUv3QV+!_R(_w5_4z~dGHS1$fJ?A>(qO|RzBwCK+usJKr z#%LHPq2YlN+fN36TwG3NmjIj69OZv<39$0VXi5n$0XC&M%KzjNVC9d|loDP7Y)W&K|H&o5${(XC qCAPx^&`Cr=RCodHTMLX_)pZ3fQ{|-bIq>pU36$A zfkjU#!iX}6faO@P2oc0U9>$Qr=Fi%K1TdHqKVyUh;^(ozVurCmnS^Slk=1ERXR?H& zIG4L-VAl#Hz(bUTSv~GUL5ahRPz1q`P!ypCVx|>+Jd0AMkek<{TGe@76Oe$ArACuv z)CGCWupXK+3>)^bA<3LbDLs%6EnY;#od&8fo~qGP@)lTZbaU|j)NgkkKH z%3XxE$#YENSU{3EZ78MAQE~N4bX6k-7DWlEIkiZi>)jI-uQ&fU*%&tLk8lp2(H~W5p zOr2@GhK!#w5Bz6wo!mRqx)tG|aqwC5=r0{B*fTA5iAWuOoufJ^Q~pyfNQ)rL zMILEjm!3Sk(6VN<43N|WC*B?tD&Pt3hCg9iuUDVE-|YXjaM#0R_=Nh@SIz#n7Xg6T zQyysq5y3qEHl04dSmc=kWk97SNd+I_SkuL zd*yMA7`FR!=IQs%zCFk=*tSiOfecOW{VzH9vAFr7NqmOZFJOuj*FA?s-b0sV%-1RMX!*A*D{MJ_OlL|+$XE1tteeMF!5rGHj3-yk2oj|5*% zplBZ3mmU2Y+qsF(W#LS~3JDBMFHJ4BDldg0TJYm!(m<>$7T1}CY4kCMEV{NVPlttC z*dLMpbSKkxEzKxML)MRqWMWM3{T0=5KF4xD#_|iSv|qo-NsL$A=L(WiDzXH|sZ^*} zj_Il;4%J8xe3wn!K++j2L<47IU_>mhv+$}C?5pt-?otM)V-gEzW3C~j7lsNJBGpxW z&-3K`M~?bfIJZB_Z@UK;p#@CO{R#<{uu?g;KNsB)M2_ z+ye?E=dxp2#9Kq@`gnm91$<&Gd-wO>I5(bj72sZgLlJrVHv|9rB!AoQF>;v9DI}F8 zX@z7|>j#Nc7BKVMzTn%rJFx4yz^>=z2OpwXATyWTr7kHM7@fZR(Kk;|Dk5Jn`z00f zFRtclHNs^36TjYn=xk4ufA^pN=C&(a90Zh?MW!aqqlb-C$H~PDG@Szb#gPb`*udX- zGuxH0%P1kb;aoll4sG8bJO?z`yOkH zs_8+2eCM7`+rI!V-c^>PDr=HS$q!!Y`@5g@WepYyJj>u`{_3`kEm5~n!qr?^20%`j zYR)$ceA?u`_Vl6qf3$bDq9s~Is59y8eUH8M^=A%eVf&Kv{H9{`4NY;bP>@&DHkP!p z9C$@Z{_&ebCoatHzJJRVZFN=DyL?ec&W_#x#J&#(Q%IKWE_yOGzv#kC#JR!;uO280 zT*2@Awb;?ior4^JfTe)P4SFPsz zwfk;PgoCmbhq^ot%?dSvdG5HThN|u$affq=NMMlkrXsoLtX5HU#9I70Qj4%fwT|^FMTK#IQE+M_!Vu9 z5b?h^m`tm*DCV~}as>&9hNiXToB~oXCw8u@-;!t!$^vrqVmWqscfewoU+iBMyFCAH z|K}fh?ftV3Jh7lRp%Gc!l4$CP*JD-y^`=wGg&8=pv*TKlb_EHwCeu2BjUPN1Q|HpK$YIH8&(j%Lu8cJ)5=+sP;}P+|snQa!Oc_@81+MFA4$G6LMyIVal~NM{b|K6^{_^CJ^T}Ob zxv{AxKDqCuL*ocOS37x8SSfJ2x}mu?(NN3q65MaHizrgnUIb}ZkN_bh zLFfxh!Uh#Ky}Z1kxgjKreZv!3%|N9eyL0UF!ol(5BQHPvhgbjp4V~Uc?+{V^_x^#u z|Jji<6RH);I8qj&K9Re+HNLJUikO87EFfVp6Ox#mzi>8L*IfvM>BzMDlimqUQ<&lz zqnMbp>Ga{Dv8nXD1I~Q^x{ipxH4*#cEgiR9+1OSWv~S)ORU4X2y?*TCPv1S$JCH=I z06X7;-b)gM#)I-z?d!sUAZ3c{fI*3(bnoZl>ms6~y8uzHAfb#H`U^)=N6%fd{A%e# zOL$Iqv-ZwSL9nq>9rHO}AmQ%ccv5-(U^1DS1H*L?K?yaq zbK_ITMy7OFz>bRMo52wd9Ld7p{AhzT_z(i@=D7UwO@Jp@_R8kkw)z@y?~cOZur(GA z+;d%|K2*F)?b>>QwCb7q;Dqu&M^mY}j0;XMU1KsiduVtpoz+}T*WPD2X+pz35y-hF z9JWlalesJjyV?yD=7TZ!ExP61KF)9LEI@GacEe{eZ!|F?A)VBuIqr-4K zqnG%hoIFZQO*uU}+3&_Kwq9M6l!EY$jj=>SJ;Q^EF5!uMD~q}qesf!BTbBqo_^|s@ zEc8+qNT_W=P}PIywRb*BsjA{;y2#WnUYc=bmqNFWi5yRCZjCoM@kG7_n5ZO4H}!T{_tw=VFe(e8Q=t0G?`ZS^eY3SX$C&rIJpF{Z%vs$d0~8T zDrLD-N6%c)f>5}#-B}mj*i_F$MDD~BV4^@Z>l=f&_Q*9s!CHh4gHVuIoLCvid}~UK z?7Z50R{h{ini{I}1@aubOeALq#%886^Jf0;ja{?c#*JZ_x{#Epi`7NK7*4^R79mJt zdEv8N;TzioSq2j=jt7b{mAqF15`@5A0#jFyjcRZ9r{^+R=OqdoP-2?8md<1+(wUj8 zs;GuatnID9Fc79id}3|LANKngPOxaxX?9={1_QoZ)(5XxC$KyqbY3JSxRzv82-1=P zCS+RJj=(OL=6PaMYiL`y2-mjD;fc#l9sXS{ zND!H4mjgL=(cIX@p=;NyJWp&*gsyE_0Z+J!D<|UdXj~}Dv5PV=rR_PHnVxlHmqK-~ zM4l&Z+u-Y}6)`MA&k6SuWGh>-r?RzOOoA#bFZI;3aJ6vHX?}1tg^}sZE{lzdQ+b}~ zX|i~t*5V15tx0ja<=?AduJ%qS{O2S^efO+-z=K`v4KAk_c%n0WW4j|4MtbHFZ;>*W<;0)gp+!OJ`W!I~3WULK7~{;e`d3nv4#Cv9$G zYW>VRgTmQ~dDGC~Bn*n|1`OCB5B8ueCw4XZwsuJkVF7bORTg2yYS&~9K|(kASQm~b=M*yu_XRYf z=B|f{9EPK(h|B~;);i{5`L&q90?z82Ye6(5EY&&q-pxk^8V#Bj=-f0ssI2m!P+H00001b5ch_0Itp) z=>PyIKS@MERCodHeF=CSSCwY%Rd3gO+IPuY?0AVu;%pF12;C%XJxxOc)AS_MKo1`S zG|j-UeDKXMUo(UN6CjWomJUk~X@+!9nj|b8#|w^~#7?}$@xDp6Wy#w0p59j5o&Qux zvLs8&t9noCxS~AQt9PsJz2~oU?)}d>b&G%bGUKjoi(dl5;_t$>9*_jC0l7r(gKI!u z19FK-V2O0&nnqp&a*0S_iFD(dMlKN`r6tmjiQSl)8uJqiFO6?Y2gnid7!#N!bC$?i zGS38#@jU&)7;kgD!FY=kO-{6Vk>d%_B?IbG01`m)%vPBm!rjar1j45Q8Wbg{(g(U#z;s(;@pj<|T%f(d|)+AL42;$T|a-kAAPFA=8 z$CYu+wyb-YiRU zK_*CxR6D1>e|-yOZcelr3)-1#&5B0?#X#t`R+N=^Oo;~d{#5#MUd{>uGRTWb3$;j%xGs(A|AEnBhNG@`rj!sBd@VtesuNK)neND#86mV_naM)D$zaFecPZzREoDM95}8L7N8sj# zvRGtUOo+1-M(c%XW)~cg=5frNA0S6LMye?h&;p3q&*{cTTkQ)wtb_j(BV0);9%UvJ zGnp@DG7mr!$FS1PfqZQuiV1y5MCt7!f+Vc@OY78==FTs%+<>=prz!0)lSq@6Rjus2 zxD4hLNLZc{a}2*K#fR&})$g~@JZnDtX*PIn8g#rJ9$_XCi2mg!;1i{9itT3T4~E-u<^cONshe3t7uI(oRse~Fp2CJ-}8@^c$AnIj-!ZDcFg zsAd|=L$a#+lop#j0P&$JyYm3M{ECkY@`1S6@@CHBS+Yyt@!#2#)bo@3}~)_-P#?08XZy~{rQxZS>M!tuhsh|Au}Nr-XEY`DkR z@+GeCbYbVcb}6KUjW82CJvUZ%c7cRB9gSm%vEn&~8e!=^``D8c1gV6D8~@6D?jh^g zQxlFC@+GlMNLa8BTBTb*YHWSL-1{hQoYBJt{EHm(x=qZq88JY`zI@8u`gJ5E6mVvt zMTnUs0yQGVOi;({ZQ@^l_P@@?)rn)+nZ`iAvMeG>rE~-eHS4Y8|7sn15}@+RNJb=I zzMRXY%-uhL%8Cs)a*_vDV;z5n1Nsm%FR|XUoE#MDZz!Qm1W}9xWW~zhIR%rKXDMg4 z^co3)Fy_WFkSi4{eKZQLyt_Zg`=o?c)vmzlWPTzCkjz_UCRD>0CCTU%xopK6KEVy+aggygsV z9qgh0tG}@hJu%W@IUxVh=Y&|Z)xIzPt54eJUMxfqycXp`Rj{rcYzY3CU}sb2t{-sB zD&%x8W%vlPxys~<*@>By(zHSjik+)hvo-P1Y`biDEh5yeHIF=F9etKd4+sr6@RG_0 zVnVFmKCzQ!lGe!`yeJ6`>v3z%ByL`?PwiqoZ5Yr;loC6=?Ly5OzPx#+6Mg+ANm4`; zMI)0jIjf}4nUoAjOtOP^x+!Fp#}M4dV^6cb@zH7_R%e~qWnXy3K7UZCUBidVN%~N& zvoF!-nLTWvLulH_%i0XBvCh26I#0l;(lCk5<~h?~nE`3tJse+Ri-pSzf*1}cnw`z* zrp_y+8Zt`&Bz51m<6NqxOoCryE_0=X%4Gn_KC_n%bz8@`IcmCEXxzy9&a=*woT#u% z$Lw=23pK0wXcd7p)n=W3-tIWYyFg+9qcKckLtSF)Eqttcsxyi{#`Bt{hDFoJXLAhG zpBZgNVYQV2NT683CmRz1Rh#QL2Kq?GGdpaZKg{D1Rv6X(OG49nY0aDMv-|9UPF~bN z5Ury-Fcu1RtEZF+ezh;1fiMRSVAtJ;{?s_KA->jXN(sfSML23AF1LDlVcdOC3DXcxko>4 zpFcd|YL>}{dN~_Q4lw5rPbfG$OtgDD?A}6Y%!F%t`2q!KC{uzAIR;)%yQ-{zAYp;v z6s`+%iaOI&;;I^F+b^V7@4v{oZuY}r)1d->zwG?ot3t87?SFP48kl1O8-FGwpAhJqv5%H zux2Jf^3e+A-~OFY-pq13Z}S)(t&6A3{m%ka;)E7qhZqcp+2Rx5%KyU`*a_1-uD0qC70Jps{kQ*;h2)a zW;zEsQMG$IazFmh#tTnkibS^5Ekj0?@OF!_TxQbsXYXq;fQhw%IElY1`~V44j_`L( z#gj>XPWRW)!p{<#*Q)nFz=z72Za}MeQbb^hKUe1*RfB4B3TIkeHtQgLle(39jWj@bFA;iwu-zZuFvjr@MHFn(H zp|k;T(L3m(QgW6b>JivafDmk{e$fq z-FJND<9-@{9Q!uoW0k%e;NwJyR6?!fTJpU40TMOwoQ?ItJlE#^1Y-1lH=%W%_K9x` zwJR9-<(QEi+i@>D>FZcs7+kToSxw8>fjQWrHP_}6NGAw82mPWdSbul^mk-%Jm;BWy z)UOD9>S1Z^>lwyE1IhumTfB7*R@{>@*C#nOV_?Ghaf6rrfYFZ8t!4OCs!x;2n45r```*j*R$k3V7^c#caA@nsc! zG(KJ7sgI+f>u$ru$2z)?3b@`>h>Ls#j%StjC;o8)OAU%mD}~zTsjoQ;M|Iuk8fHvX zd<Wnq6!=J7y8b5Vmb=9@Hwu+?uUS9vu#O)v z{_v!Ea$-nP{Ddd{PzXo|s}m1fQh#dhJXi!oC=&Se1Ik<9%jbZTGrS2hCu#7v zaah_K{?*|$8%{Dr_u#S-WMuJBFmfyz$92w)eY!iKADH#v)BSVz@ss;2M$q)I{@edk z01!nMVg1Q$#+D#he;4v|nhPW+%9oNB1}}dV`#ek4w2ysR{mADy2~PVw#O+KzN$!-H zOwlM2JBWTbzMCt*I$xo|4nj0vbxv`1#;$;aWBX$}@Wh%g?XvrOd^WhS)3VuYXUc|1 zVO0G^nEe2WwqYoO7b0mZ9sOzazOdGos1(mD@A`|-S00g8ZeVG!L(6rd!qYZs2Vchy zIzNpR7zK6Y*DGbfFY^XN8V&yPBbTKF$?hKO_{4B@iMld!8QZ$pmq{^2l0@HWz<%fl zs>fa9jyOYE)65PhqT$kZ?KQ6^RMyCw@8N@C`|K%u5Z)hwUN1o0)`=`)2O&mSUuY@C zr07ip6mA@U1pA|ZzkD);<}xNMc1q{Gs~=Dz21 zzxa`L@)+&`d!T>x{1X4W_t^RSf3WAidtUd}8_P@#$$mGV8j0#)1}^lbzx>#qw$9|% zV_i2kMVczh{5He?d3-o3ZF;@3`HzLlYA%&x{r&L9k%rL*1l`wu01IajbwQ?ijSW4+ zpAfH5-tnH`r@o~8(L06mN@Sh7P2m+qY+kOs=^obIZ5}x+-E^zG=??d&(tWaR2hV-* zf4y+JD|5U%{gxY=!a-$h`s}q9|3Hd7`{q*z51j7iRH<($_nZ9}Y9hjhmhySY8Q{Ya zY28Mslzi)*Vto^jls;gI{2iL#lG&s*0K=d}ELwY&@sToV?FRL|_XR)ppX9sl;bT+Z zf*_{y?VIhkv*POY((1Kdg*!ueW*I-;a`?lK?!BC{I89Babc^RVuc^iK%ire5A%L1h zfjfG>??aDl&(Xc_-0g-T^VZ+~@yaj1=f?1yu8=!*$6*`o?#r;Zc274;4p9KavUqUK zL_(--5b7I+szQ^GaXK`ZFZ1XZoVs0fbSRnp(y#V?f9qL>tY}##?!<9nP5$}E?{2M$ z!H?}@^EpOh3I5;gZ_i~7PC+AJ*?CUp4a<1&Hzy8X9DMlxTb9=sDkdL|F60zG6c$^< zT7MOJdO1}A-yj1<6Gv`1mHXF&=l|oq>-}*6KlB6D z4yELPypKM%Q6#*airU+Ik{A2Z+=M0gfhFD?CIZV-m$UEw?(TkL>u;<43Z{c~=w?(Igbn1D?y| zjIM!0n!u6cNt-(Lr$v0Whv_I5)-d0uK4nNL)6nBV%IvnexbxDRF_op3_5b|K^Uz zcD#xVivrrSq>2#7c;?Wb{EwXn&!=cm1d8Ja#VPuV3{GV5O)uCfP8m7m2S}UQWg*yy zna_2GOxO@j168{JM|(g2^B2c!)4dvNPT2~&lpeWuqUqEuK zE)iT&jmOmrt8#3})U=bAvw!y8UEh9kpJgmTW}@eFU;C$*-uJy1+K6L}qF9jaqJ)R* z>SC4A00KDParC8;n3QUYeE0RW1!?3+qnvjgQ$mKCGWfs!#i5VXUe+ohkL*94=-l$IO-zY zlBv|Ee!Ba^kG|YT90PnG^BU-eN9$-khqQjBY^uyjcr`fs(>o_@JFEA#7tzQq&|J%^1Tmk zefGd&VJ7y|drsW@jqO`sbvcIjLD5BmF-;L~Sk}tqFk}gNUIkF02Z}gT6w;=+^^_hI z*)7X!f(kv_S7^0k<;F3S6J6PNe`nWso?7V41RUdmf7<)!-+TUC?-3ZR^SxfHz_DFz_OZ5Zo|(vwu8OG1j7~mS&#iH1vy>99 z8}{#C>Fnqmx?@E-o~a+#&V{nu+0*~AM|Xew_oq$dM&scHe}kffVnrlyGZF$qAv|=R z%-dQh+EPZdNPk`R2_#VLNwY0Shs<0G1_9Npl2jWD=%ziC1=9yM9@|6kJJD&LKXAHl z*NLv1nj=^i+~ZYdxA==k+y3H_U0Ys(IfdiRHK*Q98jV5xvZ~m|rYcR-u!JQq%6O`8 z$WT^RX#v@*;6}Ra6G)_|y>!t&d7($(k*DU&mcJ<83g%_op~!~VmW?C{W#JIlf+?KpEbxP9Y6WgwG7M8?0F zmBduWcyj;6d?tI_%5r&LUf44V2ROzT9^3oHe|{Cwa&m%G90Q8zUEDT{1eHxK)wS^` z6dEWZUw?FE6yC-|WKwW-mCqby@0Njj!1{Ase=;{ApB5+zB9^JfT)Z+Cxnp@=Kv?5qbN(B#W}Lx~}5p<|uRN}ldqFk7rcgfSBnp@#BUR8a#r0e8$YHCD1u{bXsnC|19%t+BO-l5 zFw<>}$5TVJtjF|4raRRSkf=!#fYD6GoSG|$D1?UtL#qH8T8L z&TT=__JFqg)WE&p*zxF=L#FOC;cU7_BlYzAzd7*sZ|&TVj5oZVwD92mq$@fc<8_Ud z>l>>iJcWW)Iv@nPCuTws-fB^l!=RLtu2$Gre;Ub`1uzd+GWu(VENI9i<>lct5SCY$ zM*}L%>~PNTWo8}KRQb-N@u9ze`KbdJKmX3Pw_evkfs`UQ%h+}F;(veg)!)6+P59B2 z#F;t!xU9o5Ha1k2M?;Jki7DddEo`C-kw!JT&u0RBnkM-X0dAR?$`WBU4NFCJV2wRz=jt7`l$ji1eCof@0-XmW{?)(tBk4<1uNhoC)o4m z=V>fjpUKScI?p|Kv|F%f<(k5(#goIxq{P}&re*3UyZTRd57C6Fz_TaRfd^MH*}~J| zcx28{RQ}f1_&Z)#ch}n5Rkev2g=eQsogTe}Z4RWeCp!AJ9qD@dK*!7NgLvR>#Bn+z zckgY&1JgWzT}^yNbsQX#9B)MSoypp0wKM%o^A7dyb=9{tpzVr}Fo+)@QK@YjJt^~7 zhjPimUYgewya7o_ALnCX(vH65tCxCnejGqfeXv39!{bJ05^zWm;3PJL_3`K~ah9UTWEo0^C0byo=sq(UR*hhk z%m5pJ@eh2Q*57dlLg)>4P|Cv{=~hpl;22?TLsL~Ws1b^eMJ?D$IhTQE$l4oMSKiiO z3$lt?d1wPhP)&Lw#rZ<$I(E<9af*2Up!p?ht&Cn@ zSAn;&Fmiu8zEh8CZE{jeRboSxvo??yJs#g+-$3Ff#{0Ug%`L*y+4%5~Hv2F-N0(IV?ycNv+_1Y>e5PSEyPz;p2$~=rna6LxLzT zuPVQ_wFVJ$n#B~gjj5VD=3V{i6eto!a12ekZCPzgWgIk-9B)uZKPa+bG;!Aoxh?`* zf<+Fym7t+fl4#khD+N666$K>fvK%b&s;;w1VdojUx36DdhIjKw z%mlA5!AnGOXPoTnD}tGL6o9AV4#!woQ?{zg2@BKI#$Bt*qb8xdf>K?XcvCYElQx1P zCSOHt#RBQ56QK#c?9Fh`T@cS+8enGD6DOhe(;bQ>;)rG9T@)Al!4Udr$q=7IW)UKp z?o?#F$r6J5wQ-*u!@V%ZAVChUtdGB;(ToQ$(@^lPdz$_g*VAHwbRZygf-c!6C136B zQVzBc8`&YxSkkpfFC)5MRe_Rvy-FKpZ0!bR2IkQ}n2a=pN(MQ0&I$ z(9P8b-VGth3YPT4bfZWV(WMdq=?cch5-uAA)sFSc&$k)L!2tnJDSN%qpyPnk(aXH9 z7r{(?0e1CC&IGu%g5ns8496Qq&S`e)y$|S$WT@Nmv3+ys`>^#@U|1qn!h|Q9R3Td`JE5k8q4~hhsP{ z8_Z5!0_x?0G^H2Srke6MHd{6DrAsOx#2o=$^m3V*%9avH)I;(oEKO$W$klwlLq2wK z$jT3U#*!Q+nmn5Q|DjfH*k!AazkT9MKnx~Y;wH82znMhP!zSu z`o`#Obw(JgT$gB2oYeRd1LB9#48Wh1Xsw&Gj zH*-xlJyfkc%w zWICE@oB6D6?denwo%hL1Xvl=2GAU*PW^(vqFRd+vsiRj4Fr6fv6pQL`U|nNH1i4Ze z6fvdr6=4R7N~r9nrqInbx+)_q1#?QX)7e82eVSb$9W06KlbJO}n8~hl`Y@OYEhX*| z1lPzoqM*Q_H@^x_oG?6%l z>xM0+g%g@P^_N)((yjIiGcomxDSqd9{?cW<*;w~Hn{}|n)o3;g-)t^_zAt%kU^tU^ zmeum4pdg5Vkmum3Z-|GR%A-LQ>26MBp9V!IoHDi0ratO&jK-S8=0;W%u@UHZP%I_K zn7U%;=o|rwx?mS!W-wcICF;-xS!~h%qJUgrF-N{VnV0ti@r?Jxw zpNwe0sO@!lJ#~5XSENnHLt0%lh^$i;3;n^060vh8BmOvs8d=vEy}f>vV?Yrp1#*@( z(LoU(a|a~J&>1rwW@6x7J_m`JWOKtXvyiUW4#QyMa+m=DPI{vN?h-sVl+5J^Gq_Ro zjBaA(A;Yo_=dpNrGsz<+@OWA*swrgw6>%smGJ_eZO^;p^gbqzaGd#Bhj<;Ymep^dm zlw*+B1`y5}igOL5d-sqwk<&nDrg3ISeC`~@O#CpDkz0fA4oBbVbr6&^O*1S48Aw{F zie6ia87{p&2ow&&#k>Rg2^5Q^FHW`&aRSe_l)8gk32}^y@;h6(mdLDg3|D|te$J^z zj%2;j#h3B?%3(oiaHl^K7gVUETcF^jgIhE3F8=7>hQAXGiS$36;qdmHsBdN z#1SlB2=e-!4SIPXvb#<3$xKEnA$VM^bF*0d12uK4oujw|d8sVnatxhlB7ARdG-`&k zX8EUi1Jdmm(PVne4B{8oRp@b5+}U1vsoNJbnPo}2mxm%Ej?qw4zPZt^iI}{oNwG`xT6hHomUM?q$9Kvj!E;lMUao1+wN>@`%;qYv+QN!C90PF-aE#Un zmRxf(-exV1QCOQMms$`SIo2o|GLa1q)ii|_aXqFYW>VSK*$0z5UuM?j7^~{a?rd~9 zhDMGz8WiW>oQ}y2I}2ir9N!@9JH&)oro&7qX7Wl2n8~C{3i|4B4CG3Mkt>Bo<1j&$ zXljO=YGI*>&MYjAbfpV1i5Py6G&_!&JYOs`DG0eMg&d9%ixbCKow&j=$OW_@w}l9# zD=18Vh!WB!z=s*v#GP%GopZuWMmR=wVsjI#4V#>-K@s7VU9c!ZVhho&8I%b`jI29r%txVf-|S%1+{QB(rqR5k(?$RZ}LKnCuWiel)c>U zFcY}rN;_7;oO0k8<+rwI8!C}2h2&v8t%#XT>2syVV^EU)g|3lqC!v?v9G?NrfX)s| zyW6dvzCk~s>1o79K`}|Ksfgdv!naZ!18=UTC8`#(IUV1Xg|3lqTb+>-9~9)n3<%7m zBEaqIsyyDA$znwcW;$HJpXmdF7-8gKG;)1i;Kphrs^TeUCxMte!Tzo}Ucz&Bhie@^`nIH}NQd&6NEw=Y&Gnow1+reCDPFaZb$%;}@Je7zS3Aa=t@6@gdTa;h3 zfH}sP9IoD3WI&<=j+KRP7C4%mW#Fw_y=n1GQf%+H29U#(&%terbRHCR{>G~msUH6D z6b^Nx#AJb~B0jOG2L;Y(DI91Y;YS>C zkwWN-VsT7%#@~A5_aS{p6Y)?g4T6*~;22nZQpDN$B)|wZ{7>M~ zS8U@iyBPNuH;}HxT_hM_amLS)Q53&Xq6ZF9DF-RS5PyND@jB_RCodHeF>NxN0nwqUUhbLRrP)9uq;`!WciT5=U~9#Sp%~y>;gN0&EVN# z7|by+ush2)9}FKm7+;J(V7QDKJg|TPn;oz@Jhp7fvalpu_iY`0s#|?lSJ#=>{x7ns z)ZOZ%Dyyoyx}|ixl$8}384-WH7xBOMB9iUyw}eZ_Mb-l1MONQS)uk4=g!;wU4=$m8 z3H6Jy1un)qUy}7ps9%gNa52{TlB{1s{bFo^i?Pn~#Z&1ytx@cvX^SO}x{WlmOwrP1 z!H@-0W`+ba1+#!Lel;y-2!d`&x*+O;Y%UL`X`7 zy|UNio)PT)#&5tMizkK?=BVM)ME6oceuW$>;Sj5zO8LzgV^hm8twwvR%Ze19E0)HDatO z=yJI|Qz};auS^UC0;&=}I~Ex>{Fbzcwf$m6-4p~>Pc*8j+FK1{lbFFR$ z%(3NFW^K5-av-<+9V~$L(Dr`4%8X*dQ4yVSu0m8g>S#sKvsxBe9#X2Rsw&hQ!Wc;1 z@}N{BLxeB>)y!`t+%K~2>K{UtZL%_R>7{|-{u4pKK7J*Rs#$z93vRJo`VJu_l0 zUbDJ-0q9x5nDZMz>Y8dK_t;y&w?x%Tr`l|Si$iV4hB|K zSwVBOVo6=ap$@GsRuVmPBzMf`_b&^(>sf`8y2{eK)&qCH1dC!8S^PX8C0Yw~=DqVHA6&uoD_y_a&6Gdb+&8^&17a&ia8Ch6T zw=k&Zyl0>{USCPQXX&UF>6oU;^S&guT+bS=vr;kbrLP%#AIA)h}e1^kjws(_rJ1gp7;axR7(_0!R&rT ztXso^ZF%3HZ$ep7s$8O&9*-NM!Q}ZdRm=zKM9<7vn@6h+Aq=L}Heg>ZgO-2ptE_ev zt7^>()rO*nS<8-MOFgIbp7VdF)v$5fLng^{&4JvVzruAtBlxpcN!#st*gVu+jCew;%Y|$1U6(W7o>Ng5yh{{FSr^oH~ zvb2^;qy)9x>nY2KI<&fMrW>U3mXODd^`hlG#O4hESljwdK~G7o8wI`y8Eq#vZ!|k! zF?$Y}r+0|KHWqHrzZBMJw|ROejSi4?3nDLBL#J4vQEXU~eC5kgofusJLV{;4zq@Pq;+p*u9BJ*rxb-T zx69>|3?mg!S~50GDQ!EJ5_LY1C!3U5bJ$-(dN!p&X8+3kHDcXL^&GYaI|WHKBmL&l=P6~w<+J2wCCBwWzZSGKrGcc|e-QWBD64Lw{#52e z0jX0(mL5+SqFGW>S2ENAxywwnxl?uJpl5}&FBH4z3meC_V?GN z7f4-|N0qhln8u9K?U_&-)ZtB0jYOL#T?6k~`P*X7J|H%&flfAF+sP!^ijSLzUa(@r z(&aZuD>fMipR>|QduDEQ?6o@gi_L49KYU@H*4Q~?=M$K~amo(70X$dr0DgQ#zTy^E zRdeB8CBFh9;&rFH)yDjcjT-@XBbwx;rizmPZoS1Xx9=>VL* z{imt#eFP$|zUvE&se%rB8^bVfoZ6Fm^d5cBQy1oMMTe|3jIvBHNWAe$23kX4CbJST z^^F7;m%5V279{263zZIf}!OS z&%+5~jT!=~$Bd!Z6?qheI-ZV2X!UNR+@?3@m2~@E@B2roeWR5E@B#pXaGSlS%uXOG zScqQan@i%HNp7R_X!5(C(4PM>!gXQVH#!ar=nw`U+3}hEV{pJ?ugbAeD?ZuR=e(5p z-ii3TT2)7HD-!pjP)D?{$4UnMaox3ul&J0*A0goAJKVAQtv!H;D?@w$AolAqiJWYMfOJ)^1IRI zMaEedg*pTxq?*{hF!g(QmD}lNdt#Y>V`7y{5-knw@AwJM zQHNqw1kJ6McvnBiHJS59v2lg#uO1NVR&d}=ivx*I`wu{7)ILz>7qOW%{<6QK6HrP! znPnIP=7y!-(QwWx*aETe;0XYs?G~wEC`e;Y@!5328 z!5Wr%KK78b>KaVkCJfko@V0Zd89M1PwXo+!{=A%)dA*xT%Z+$6Id{Q+q@$##XzMWh7xlh)tp^x-AAk6ONn#&?c7%C6BM=zMf> zR(s{P_ev|Sj6d+n_`M(1cW)6iSlS&Ovf_Hr$31`hu-LT1g5{OZ=JH_2?~pg$D%Lg6e%~~|nkI93nYWsNoOIx8u37DX20MX$4#Q0i4wj)p`PXX7= zf!@SdKVzIaC?IwbwkisLFcCH*);EjI%fy!DVr`>P6{H@3h(|4L#YWBHL9^$K*?H3J z@3dlL zS+R9ZRSOj_We)ZwAN+g$&~AaCnf|7@qp zB(;CYT%s??gmgUD^K{NnbWOT^gYV0aU=JGmhI#l*C6h<`VlmODDvIN6Hj9|eAwXP| zqPj9NHvdkDO!GpTJ%9f-<)+&OkZ&DG0~cT{!Imx{3Rc4FnaGPue~4zsMQ8>4B9b97 z{%E4kt?M|UE9Wiklg=qk_9r_%5{rs{?0~lCrFj55`v_}jEEY8t2`?u@=W}{EM;&iP z!?W>9gx;v0N+z5ZpxFCZAn5tby{`9tl-3@n(l(ZSDo$2(+n>gX8Gl_LhZeuu36K~G zvT4W^&pQEF9G&Fod-k0FYCCD{lsMN6eT(zOvxQbZ5l{4u<3)9ND;+de5!e;_;ECxG z;2}%$n4$IzBgO+Qx->u{FS z%Nwb?@Wg~Yo!hrlSKzl>OvgG(L}lnA&mnU=Q}jdotjNeb)ZEndp5a*3Qt>uIw7hdk zhmtC$xKJ{%35$wyHZBc~BK(MtcE#ja#J%$7TYUHZ!1b;>ElCmLNh}Sf@tyxcYWWFW z$(`FL^lAT^Nkb{KY4}~}5Gjp(^Rg<{G)kd*ET1+pprj0>#DH%M4x7E5MHD>GTdjf7 zvA!hUJ_+?M6{FtqJcpA&yQFwFI-N_AyGHb{|9am)z2~ZxEe&~Aq8!OsFzo*8&na)b zBlXiCq<3x=;t2-dKh~sD-)1D!6#K-5grDPet-KiMtoB9TYcXO%?Te%XKudnX>D#9G-*LFOg{@s&8U$3Ab{!TLo&Pi*_QK9pB9y-#f%|cx8~) zB2h0kGMXN5S@-_GSAYHD$yYju-mp3x4lImMBG*DM?dTN%TGw_HnL!dx!ug|5o_w?jhoe*Z!-r5 zjFZQZiSj3JkyfnA6`aob%7Ne54K)xA@^^MBSZ&Gi)U20uUw)AM!ij5PNG;Bkg;}feI@V4gc z)EyR9Fn)wW!#eBsDVuNfeB{%fyYG=!Tuz3d3l8S5Qf_&(6^ZBv_PO5uezCD|%islh zPItk4e$UDGe|yKF?wH_l9qS!i*H*KtF@Q=Gb2#Vgcq)V^mPp<8&F4;^9VKmvEn-sX z`YPqC@4M=*Ti4FGrlgqiI=$CC*JqqKY8*LeoIYuu?Y71uAbTcO4|3Nn1_I{wf)0qw zRwx^vM;>r8oVJPueO`#M1}#iZ^dJF zPz@f=RE2qctU4$tg@*>A*69BB@KL&o42_I_{%5az_xUqe$j%LjHdQ09&;57ac>6W& z=^{8&QM0*}W<0g0GpozFAq>_J#CaI{Lr*NLbk4$ z<;g|x<{5Ie_P^G1&tto`9T^f_Dvd9&J7HF7AEx!2JsoepsGf;diy4q+e%zw| z#e9C>nR_1FeW)|aMVyb~Q$&1X{g^NiO#%VOE$LiM0QhKfuH}6wI(fhp!R_9Cdh98Ajf=& z)Z?7xcY`VyLD(H?coYjoYYlnlEFVt*Z4YfE30O#Ehz~q<;$U~=;X604u0T?kUwulE z$~the7xZlF;XzK%uy71|5zRC=+_i|_zFd-3qw9(aE1(V;9ov*+r0K@Kx$Q_y3F^Ehif=cvQAv9_gJ^(Y0X z8XI^J5;u{$_k455{ZC$Wq%Ohf*$2M8ljs>~_37x@EMQue->a@}s)lc2mQ=I<Fs%lJUpZnQ?yT7xwZ(w-#QZAWaJI@Y$@S89Eowf+Ldo!5XSFXu_!pFOngv1j)$RZ?easc%2M_rE;6?O-AFYy!~PQ^Q=|RQ)Gc zG}6MGOh`!fr$YX9jyfis*x;u===ZppNq~>$Iy;QP2FN|zqajltLtfTuam>p_A*qx zAt(<%ed0Y2KYyaL&q+>|c#n1PRL{Hq`T1}C$0-Xcod$A;TAeDV8E;(Q^p*`RI-r=2{@o;6(wX&gJ^uzH@gxu;sVAjxTyoovA;u{RrsU z3vifbyk~{bvnefUm@As9K6(3EtapL1q2Z_eUeMQKQKu4!Qca-hhAY>gJPuVoiku^L z9@lHHfd`&bIzVNb0&k&;I3w zFFbKLWl>%7x3f;cI`h@EysEruMME^MZSO*Z7pvY0wdtRf_f-&x<3r-%?lH^M8-jt? zuWZB~$3+2e3q2e*iu%~L&Odu-%dVpxi-**i+xDM&+k;zv@p4a*^ehK?(C4~-Wm9dS z$}-aXJI7CtA{ySYTxD`CDn=G#OI)*le>5>NJjBbwu&Z@rz!TT>@kDxRv_-x>3Bx@8 zxXzcPp27IP@9A#vv5oCv5}FD=K+nGW%z^*${aqb{DH_Ph0yDSwY_pti`}r8kVsiJMb6S8oY$n zqwen>N~U$E_5`2~hYb@HhBbuuKYjdAZ{*<*ZeG=P{-te>t6kC?LC<2bEPXo+Pykw8loe`Eu=A|S#0v$xhZB(`n%w#5UJUByxp5&LPfpH)fX7l-Q3CLC zz~_DaWlhU#0>tPX7jgorJJFx~Z(o1upVL~?PFb5 zU;Vn3P4+;JHbhHugUqBpG#*P1#4rzc+@M9QZp2dFp%`ZF>1iew1ib`RZyL0!vVVUUgqr>62ZU=3R zrLp)EP)scum4vKEfL?*E9^Y2hhXQVOU-v*Xp%p*OBZnVu?L2xG;g_2?t!bOS0FIg? zznjb#4|II&v0eMmj1fJfRSLGzEx)@jOl4ZtUf0I9+OXeCn{|?W<8OvOgekLSj;Cl* zJ?(&YLASUt`wOo)>@0RhIwC7(3F+X&JT1GWVP3AS_TO+>GaSRk4)bVY9)9`q$;dk% zeBsAi5PmsV(B_5pc6!CsQ{VgjzIXofHc)55gH2F!1G(cIiJskXSyQ;mhsltLZB%Ib z23)3-CHo;3w#b;Z<>xAkLs>_*cr3c(oLvpGJBTJE9?PISZnkMz<8jyUv2&v|($9JG zw52D(;WgZB@yPCjoui+B_qBe1*;i1HMk4?4^H;z5>?sQy-B1{eE#fo7Gi~{E z7qJ<=D6VY|t!fC-yQpX~G`&{O-C>`g)oHoWEb=zxh6}zrM;&$b;XR@lgs_x#mX3)> zX0*L*(h0kwr52>_K+jMTYlfWxkH_)OgkfIO^?RQ>zOOs-z@J~YZUxrVImO_DrkQ-f z+;hC=(?5RY`O?uduS>qFwXQMfzmT3ye)QyT09zJ4&T*sMin-egc`)<9^4dI_8hDf1 zg3!|xuO(bvg<-yPU?`R>VwmRu!&4`+-|jniu{Ss;_9Okumwt%-!ty|Lk{We#QLR zAFO@fHQstZH{du@mJVedl4}ZL*rU}1+}+VadR>mxnM_q-U9ZRV^>FX7Zm$B*tKw4< z*`y98JTO>k`|*+OukE;D<&rqa*hsV9hn%|r_o6Lv0KDY zhYe*58=*;8KIF)6iE?vrV%8|%^V3< zrpQFkRA_b3Gi*e_x!KJ0Y=&ymE=j8YE$hSAHd#z|!5lV2!Z|KGM;-fBn}#+ru0MXr z7#ZkyfEQk30fcDtUek!DlKXlF`$ytM0S|K(VV{K`{Sq5aTBge-HHX|Q>U_&;yv;!m z7LNE_2mxVuV@@oo4@6UEBZ-c|*y+Le+0kS=g>B+t1BR(&0@%ffI3VEOvnyL_-7Xby zVa5)%LF}f$1EC8IjZN=f#{ymjTaeM@*wNt}b&^#W+qBfqUg?FSLuNYWMB#9ehs4uc z^K|`q-_Y@M5$B{X(*!^rXXsKS#FQI`kK7-n!8C$W(2@BU!vr5GAU(Dk2PD*{_(URy zjmz^V@7Wa%8F~iyYo7Fs?wx!<&?R@^wsqB4H<+UAeCuH3>Tq1gotas=B(JYcpJ@o4 z?#4>h!e7cl-IY9bAa#(ewasWRBwR8D>xqevbB;Q4 zv4Quf;>~U5Xrg9h(21VUcArV4?$yr0QRk#CTfrQ1WV^I4=D-H-Q_MtMpy`93Wb<(T zuW8j1J;MiLA_#KK54cWtkU#9NQe9om&8@l$^BtM!9b|I8Dn)e}JR5S#B&E@B-nvrq z2kUsu+=P}r|Df5=D5I>WPJyQm7RqHcReXe={l+|hg-W;ops}-m=jUkl6`r6ZkfQ-C zxE`tzPv-Y}vB9$KJ>vtp1GEV8V7T^;D_D&eOo9ZxNYtH=>$&#EWZuv<4DiQCq%9}) z=;$E5+|*fToG{E|mUnt^^hobW5u`3x#(6v;dM0jYso~x;?EVSw+4-1=g3E!)6O#e? zn=TVqRvV&%S*Y`E;d4(f0qXX&4sV74@MogZ3#Wy_!68r~CzCsri-0dRsmoQj+$W}0 z*s@T;^+ZyRc}OzF{}}#`^HB?N)05bAJ_v9o~l=D2z$jmjHF-M=(L) zb(a6 zv5olCkB+F@JM`$tkZ3ujVE`UxdjQV~eb30)L4;qz@ZxOJP)eL9+8*@G@1_tjkK3kausb*=)6nWnakn?r+}y4=dNGZ| ztMXvEC&(vaR{VJ>Wj$9KZmi|QyrGRHt(SV$qdj9ra?COCggjwSz^Brw!#zVCL(v5W zp7^P?vbK6{bC^Qb3-_Mon#(=`a9=Uums8rjz^|O1t#7VrtF49~r4;l` z^apBQw@lqola{d&g)QPmzw=?HT9pg+4Dc9}N!w#?ubql0FLqi*lRDD&8Bbkgd>?k! zEYedqQ^U-19rVn@=~-3Adq$|ED?6HP*z~LccDH5LGC#dVQifs&-X$H#r_`p5sM}AX z$ygTn!32@IGiQg*blkDFpGfM)lgR^JgZNZGw2%j;dV3%*i&mdl%d(@6hk=L~+@)sfS|V-i?04-imec`y9MJaYQ8`jK#jZZF znx#0W=umcfV`z0lC_~T40>iDjPO>L@=JJQG&CxR$VPw3%saP9(K4qB?)KL!3z)0o| ztaI13BO~fd9Y#q>T@+Kixbro2bF~#;d$xhEJu4MG3x=W9#mhsWXBfyK68vmu|p0A;v3f2iAqC&kRid6@7rq^>(+q@s?2 z=cEp79ws~r%Q-g|J9#cL052`vf8=L#+GgZ8gG-w=_&uxYt7`*3ilfTVGsjvTg(7-( zWoy;-O=-Ui+#aU&a?!I{YChknqbM0tXXvJu)^uYJCv}OUNgbct8?Xan7#SLmcMp$a zc@-J*fFH2WbAk<|d3v`Z*ZbXV;i|CTL!&rN+%Sq4;XR}2jpVBigPvVAFZ8UkP|pBA zVQzmiBEQ%n3=Iv5rsEwhAVw4>#jSV-UeksXY@$9Giw{MUqlxr*n!mx5Oe_4z>3|7W zU=Q)B2sKv`tRC`ve0b9i6R|#p`^_jowwSp(yk`xyu(MjrGxUs%Ze^us*{V+S?*hnr zt`u2iPYxR*bzRDtzM@DSsS)7K;Ya3>E_&a#i8t!vRqde8cusYCs$?3 zqloy#jz4~vimjf21^_1I&he%&Ix>$rq~oY8JqX^j=HSh(@SZ_yVB#j1!_Jy(*f~!Y z5_J>~7)>N~FN4%|j%)FVb59**3fL{o?|2`;CzL!S8Vi5v4+nHOmvDS=y-$GB$~pYe z6f(~)Eg`9upipUf3?Q|$H z^#}fc?so?#m{u^^+YWlxYBc(_^F}ue9~E#cysYOMVG60+-m4xflGNq0p5GG;Dxha; zTdQug=^1JD1)yiMRC?iMJy$rIBlAONEFh%c+@7rQRPXL^C89%E0AIZPZvd(WKJrGjMLt^f_cu&@*BCQsc-cgR@pXBeFr>snsZOxEKN|7p8&b2`Yvk@-Q22$-L&+O zw0arBU`kTjij(zRtswK+tHy$M~9tWz)d_|prUYxkH!PE{2&P1s zU&wn_5%g@9DpoG)C^Ud4Qb()vi9;j0DCFX#?i@&+b5GqY%~8-#(CX0SZH={{XHEWe zhMsZA3(9By6IZT=pV$@|Qb&D!j2YP{92bf|nwocSkpM9;kNp0%qRYf}^eqmYjr z8#9qkS`5eHKpibft`J&bfMK3tzcI|4uxK$q>QE1$OK^voB!8s4*plt-a$QVDWQHcP!QWlCks@pUoDdanL_X3r&_F)!0@ zX-U<3d^LJjxc5zKGi9OrJ#X!$4sK@yWixPDdADCx7bri+6 zp*CIT6?gU4pYD%p$te8xV0-6l>GX{7#?bBauWImbZqjN!I+L&s5CSjCyGp@ndGoz* zQEK>!mCKSkT1=VNj8kLk{(hlvIHn~LEUP(;fuXnz^ejd3_*%lgs~XJZ0S)VrvLe1X z=-I?pnsUDAQAd3+%;TV#Yit>AXn5^ZS5!GZEcTA1;_)~Px&oF`^WCUs_MKDU1tETmtJ2*v!yw)ULW^GyxlC*rU~fSHm2T7V zB>*`pzC=*ZK*+tcw%kMbY4s}>LK;?F7soU)k`kk7HlAiFj0OmHp@2wiy3JfN^Ql%q zwXivBKsCLxg*RxSBT)1^N1JR!-1l!kWeI#PDby!npV9l6kWrL0h5=h4K*k~Ge1|kh zIlb7xj?4tkm?Cmx5DnWl(qtK0T6o({v{>ixvj`kfI?S;tz7;$AkTNI1wnJuVB;dL| ztKsdDo^Ht;8JM$Q7yS@EZ9^?V)a`oOu;Cmq<3%w9whcJPJA*w&ID2Yl|HJRWEt!kc zHrSH5xMWe!p_2nNcLgU?QJ?tRMR30KQJ)sXB`?j>);f2w#G4!C^1XCY$t`dR^-4yk zTxGk2dbwJ*lJmWUdL^S%uCiT1y<9C@$@yMFy^_%>SJ^J1Uapp{PuVi$}Rklm0m#bwfIp6;e7h?c@kVeas00000NkvXXu0mjfj(j1n diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small-50.png deleted file mode 100755 index e348d96cdc820d17197d682fc198ce952cb86a1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2554 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 QIsgCw07*qoM6N<$g7SXNRsaA1 diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small-50@2x.png deleted file mode 100755 index 2738a826d2c47b4e7997ee98eaa2c5aa8719291d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5883 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 R-5US^002ovPDHLkV1m7^g(Cm} diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon-Small.png deleted file mode 100755 index 510277ee23370f1181d35da13d7d8cf5d3aa5089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1303 zcmV+y1?c*TP)Px((Md!>R7efAm0L_)MHt6t=3MrAmR-6my9+Fr0E?PlNR2)yiP6MB(U_X}Xkucl z8lQaf$)`Rvw(rD-8htP(nlwa%nrPPqwXG7urHNdM1!R%y!Y=HMbN0-P-`TTwDD8_w z!p_Y3zTcVe|9$fvJh8>m|1ikoFd0W2-p*klm_N=CPc{MwLELL)ZW&1g=NL<#RZv;<2InL;6n=tBjC`vmdGhKvW2~S(%7E+KXl;2da!9+MSz&4`V=n!3;hbm^fah}-5erFM4c!d-?7iSF0GCvAjLsrZz zN1$wT70ie~B=x_`Riutwhr-1+1xeNt)SSoy7BN?OLB0YPwA3ipIg+Z)vBRZ)GfW>W zV7rs;Zt{JObe;2<{(D4z?afMC%7K7zG1}rULKKn9-_1sMlajD?@rc%@qXln6!41Yvo{n>E0i!F(!tKSxi&r8e<101To8!wbU5VWNJAq_TBpB?U z4!7^6X*{h1#~g(ufHI1eC>9}+rd=&Tm%}!>w3fN zJ2o5LOde|a!(zoIKh^AS@p<8bQOd(j&Ve&tk5kt3Wow)uKdR1aZh`i?PRHisx9=w) zUP&OTs_v&VYEHLEVx7}rk>wm^1e52w-F-bCQ52xx)Qn@eU;#nH=knfK@~4^I)L{Bk z?3M1vpSNTIMUpwxCs+0#Y-KYVwaY?hqrJD?Ww(fxSt{9=CXe8P9Vj4R1cFk^1c89u zkg;Q9FF|2a+ng$&nR7!>s9H=Ui5T-EDLU!`JH>lPx=T1iAfRA>e5S$S++#TlP@_uhx`wRXIA9A{$)BoGQADWQQviiA`Z1U*D)RV3Q} zLj|;@s`>{)O(QB$+9DB3D^x*&HuMmbL(U;W$VHnbj!7_18auwvU3VR14{+0vG1%Q<^evxw30PBnTtI zB9q0IR|EbC12&AozC2}l;F<&pSPzNBFCdA>8~{W}H;Jt4(<+)&u}U~*IUp|;t~Kez ztP=EEFC*~aZ4MMPBmo88q*^nEXVeLmLwKo}mjoBEvc#zO7?mC#=DfswW0B_?gTynV z4P;mY=a^EW??UFwhYJL7Gg{P-ypY2M3&xc`!NqI6(`JV7m!0IxR0flf3Qk=e!d{7A z5Nf^ybY30CAx?$idE=rgi-tQ(R-;Z*o5CE=EqZcbNOOpT;lTLIfV{YPIR%LN%%B?x zP>QUV@@1vaM3}wQzW9k5CK3=_oYptPsF+(+!WPjPX3)>7u^=f6tA&l21BXbmrwHzB z6Nfy)>JafUKn$nnC2VEE1&4%~)q=Jv#7aU5vdUA?s~`%fHLfIFnB0h{HigPkE2cWeuD@G-d9h$F;Uy7N?agnURUcn!|(UP?zJ_yb;3H2ZSmCSmBJ=L3g2}i1bkgbJr#K%m+8{l)vn>4quFBLb7GX!ap?3&(MOUK!UMPE8JQ zLES~xc`k}vlhh;M8hOw5QUH|UpdW2*%+?5-c`X=o10(7(YoN@k)nM@SG&@?u7jr)lgupk!L z?F~XYM>8|n&DhS+4sc<(uE&+zngo2x&`NRzDgyc~PQ`xjOsMkDhR_^4vQodLn+_=UyliFa>TezvWJ* zs@@zKG2=<3>egE&EGktaSrzKsRU5>6ALKUNZ1(nImxsGnRxU6X4H*e*x-)OBl zn1_)ebFh!wP!jIR?y+w_f2cc2UjN~pH6gcQTR{$R;r-yZdpnqw+t{Y_F4a^1GJ4q(`e16){-O*O%9Zi!iNX*uE9w8=mGQu~9?zdx0h?Y_#l zOs2BmdhWoZubj%5JmRUt2@sZ$2X0vttqRy>0sK3_1u~>mq%;0&8f&bZEt>Ptl%y9A z^l#g-=cC?<^6}9>WGyAMZ_rlY;&xfj|(hrLJZmE_aQ{ z_SZt_?~q*}KwmryNi{KBT~VL2G!UP3T^`9cUZTI(uqXogXGlRb!5DKy#P$R{MCzlWmXR)q3y7m6ZWc-gT}r zHkICe^!zX1?(9!!mRixpB$B|bZ>X-TtRM`R&nAQpxo7W)^QKFq95!Kq+aH%-K0K`J z8hwOgkU5#0Ztoe2gDlWX1bo3V*3`NR@upQ3>l;GV0qej%Je57wH+l3w@u7r*c%dMv z@E8Qk=eoABHt6@86el68JTE-3xuz~G6)hPUDji}in$w`{hwduwO<70e3Zzpl{%tp8Ys^DT}eezSvtwUW@3ycCQn`% zo`F+S;UgMbaUImkC0yHBQxyt<0?<$4ZATKtFRbxj*Wh7+IVDO-xEK4ITKA~j_HlAz zD#I3D(=&*q(lhP7L!*=FvJlUz)w*b{$K%Z@Kpv7|kjju}+m-&NDi?y+=F(*$xR7RI z#8dL#k7v#f&0uWgi2*)=2f8YE4vw51nY1*HCI%f6)C%L4ns942v>5GIV$Z&3WIsX?27d%2D zQ)%VBu9;JPDG(2u%H_n%snz~=HOWejhiRrtXc`T z!~z?lZjJ{66lZ;&vAIW!n25YD2*dH>#%89{!?tx!$CH^ND(8FB6;P`yLhfy?ftA&8 z%q`d;=x+1ZF9+^Lj|{)6mI->;y`B6yo5s;mfdGWCvHEh=iXK~3zZ^2qE@1P^%F40s z^zjQb=`0+HOj>+Fi>)K5Bz&&PcVm-VlFCvm+J8}fsc^v^5YRNVktwBfSnf?I$&9Ye z{))r1IN;_QE5z1XsX8E9w`NN&%K$fr!Fs1NbVbwCiYaSWjzx~~hz$JPj#=0p7QLz* zzuFSGTjPx{+et)0RCodHTM2Mn#hHHn?l-42x;#28OO|9W>)6P6gK;2dksT><>E2$;BP6~%5Cxp$iz>BxM4 zC#?}g&~)R;$aKOyea|-v&}TwG53#^l0wO#j2+36PSPV3@G7#P^@h|bB2oS*Ln!@Rpj?P?Egx$O@QN&zL}r&PwFkHw zJ_a?HLpw@57eGV~8x4w4>ysH&N{D%0Xs+axuzEEnVwNxMlqe+%FiZ-gHT#Iy1zJ#A zIq8%_EL-PS6kfYLWyKiKj*`qXT1m-<3lkh*V;z;q>ypa>!E}$2&n>rCqDnRfre`{F zuHPjClumzsJ2&-O0NQLf2x$Z7oz{UD%nzP&!YidbCDBT*hMN%bY8V(%Ea0nW&8}Z(XK+X0rDHG!ywz zfQq2H7Ox3wyE!_A$XhGk|6Rsnwg3K_`McMIPka#xUSszw+KXSpgBOw=BC#kj2>na!2iVUGtq+z&{_rvt;N2JWH!Qbefm$n~-gjGnh_9u&ad`jA%Rb@T}GHj-^PGA}sR7J1SF8}a%7~y!w(AT2)=$cusJ{3uCK_RcWGj$= zMw5w-*@^|Z`&U>h&%sPK0R~$+^6W2w!V)?_#Ra0q^w*xlJ*ORt^Q+b?Uwo1cwh_&O z4l@R(|8-0Zh%+>fS+=dyp@zJ#z=MZgFpiw*Xcs^?fwrxgk;&U+Y6j%1GyF}r6eq**MC5#!7bPc}%Y%YpnqCt5<9hF0wo=Wb`(i)(XKSb*EH(@Y0q+x* zVW4Ujj6PxDkpt_PK3Fh;lL@-UullI#(Wi=#0odW>KzIsy1U_kTbAain5nvrTZo=Tk z!n5;XGuq*AUhV$&v%>N)n5+_Bf0tuH9BDzJwDhbEnKlP)# z4&lCHyateb!r;L`W{8yW$o1w{t-!ri79(Pr+<|{TIjFMBVzOk1q}eoU3zsD~RH~4+v{F8oRdZJGYtV zyO~Is0rxhk3sgH;R2P)ieNw#Vb8N6NQJZz)Y;@Bj)W4cdINLXJ|C8?$+57y%3*hu3 zZeDE5=dlZt!2E2_`ORAoz&2S+wfM|Kx8Bv+Vq00^FTkC<(rcbOgL^OG(P1VQ1Kne* z>$oL<#IIP1Dl)OA>HwD=f(-?>@W#Ol|M0?rE8}o0gxmDMZTGEi(ZD^m4^Ak6d9twe z&`)-qxHQ7>ETii#*4p&h4}JCS6~&#t+KW-LHCI=^?&i2s}1;hZ^#x!$=w1CoN<>mML{`5QBk6gG`I{8ab(}A;B@7%n7>%M+Q zQ7HRf4=AFUqv2T6_)Mp#eLJB*GiE!Ua0csA4);dxdVI&r?>TwLY3-Evf&BEHlN+Dd zdF*NoWJ{a;^rBdHA2OwJLIE}xs{OJ8Ys$=e5Zp8wQPE%g=e|c?+8fjK%v$I18RqJj zU)cN5^9ROsj-d`>(%Fg&L5N!tD&3;<#V4pa3XG4ED@0`fzK|tB6iO068hjOM9uJ#eo7uFczi{@V;X z%o=G-{4Qx#>w;55C}!rr5|#%ASP6GsRr`h`Res+`I-2S$-A+KnN%Uav6p-ka-6bbc z^5V{u8y|nCt1pWVGeE$kA>dil-W2fpdI!VD`!%|rcMMJ_Kv~TsC;MOv*kU-r<#PW? zYvYpo04-y?Isp=uM`Gyn&+PxFm)?i_tB$P~`ZB6&U-{{tFFa>MhskOP0oiV9s9M$9 zpt#&1Ge~}-Zwd}QopEq7o}donQ9K%&cDz`g712$N3n~<;>&mdIn{a(SDL`685HMz+ zc%%DR-^73X)tW_hm1%Eh`EY(=Zq9b#oOfTLixC6sCY%#p4{$Jnc(I|T>Lcw9RUX+%J3t7RYumAr^^d)^qpN4S zf?0q6-(gCJJFe4V(l5@c2a_7FvZlQ;SRKH;n0kPsnK-KDA&F!Mv+9i}AWY|2S^(u| z1;5vSTYFPWjgP8Ere`^w9R@;CE{qzV`oViY{NE$knjMLnrulEbI{29%?&%$Oq(f+( zkk(rNt?i9IuMcEn)9+cv<#(6|R9YvE01v@K*Jgaw)YGtl?s2>*yH+f!_bbxz{!t5@ zOGwNafJ80xtFIh=@AS2A-q*RZt)Rn&{oVcF`sI<|bPX}0%!u|=fDnOWmo?Tbs;PoW znp0mSk#~#sb}TNl6AA#JPeOHm`C=rR!@R(p7v$DptyhtbULFd^bXzk)SEB5%4-dV4 z@~wM1gMYTBWp#U9EznKIZA&xYL~tmhU8+QDWt8tJ++I4~Zu1tQTJ zD1{F7;9!NcH0W)s^8kdh$f|}lIH{f=44)nd4^F_&8mxON;} zVJGszUN0wo`j+Zt^)i_`^_!_98OwtL%p^_IUOOH=b7fRW(~4vb@d!3eUF+^2J~KE@ zC!d{mBnrW;H_#wJ1U`^C5vZ2ImOOmew59R&*C}5>hX^eV2HJzwoFGvMYyvd0w7Ke2 z%UmKH6grAzTgCO75dyogu3ZYn{MSY%ZFg)~o&yqXTHtd@$F2;iK+tw13iZO&h5fs< zB_Lp7V^%VH7^lPKO||t^6@-QPVmmSbL48fdx;9CGrIaHCRH8zDH-$}oIHYYmtzI4q zao|DORSJWQ&B<{1XwTqiM0Elpqi+R1Vp8o@Zf>sgc|33}K7$LAb-)!g%d>fX^ z)m{nl$#dXjmdr>&D1dFjmL863doGz>Jt2ZMTh}~pCUh-!qHm~YBt%EJurbb*E905! z4QZ|M-_%$u!d3zpW}A@!2oNWAF7n;pB6t*$1>z_m6ox{)B5Z-~t4I5-z2`!)SPYI1 zZ0pAsHZ_Z$fQAb^6N3ezio}){n+zLp*$Cu>W7W+Qj#LJR|IDWPeK*PnL zkdPO8XBpb*A#2y!sZcm#OQJA+U>nXdh9)M@4vdXV#i$<#J<4g`z_`ZW)_9a9^;I=~ zAFPg3mqzJOQMbeI^L%27dr1w)ffmdhLu6#k^H@9zP%+#N0PX0XG~ek~uMCCYLV~k) zfOQ=Tg|CiHjYeWoBknR$;~x)z3rnvV1YB}Mz+2<@@ClD7Cs=VU06JV$=Uvw!FYxg! zXu)g@!E~$BjThoCWRyvL1eGMF4vUE07tLe6lLYIwK*T2nA{J z4A<#!VS)}zparRwmuxO1Dy3$^GGeN}@3MK|;w08JdlF3*BTt;tp(w9j?7MX#r935Tbgd~F-CQj-&OxVFQ+w02H(m|AB>ykr`YT5o); z*kwU2ps+i-`M#krhwN9PsU_3nR0|kx;Q}xOln%iuoRwdkUYXNVS>{5bL8=|59*XL_ zFB!*rLyRMdX3Kb;4x4>?nW)iIwQp3G={Z{o+tmr}xd^Vq;=SF^ve_8cBE$ux=1q z>)fjs3PC^6A!vd99(3OR6_#N>Pyk6_aACvBFpT~Q>)fbyW!#vgXjrhm0@VjZVCP5_ zIKNA5subF5xS)>{1lS{io#knm3hPgCx#kIlgmAFz03HPfiRpMs!(pAk_C4Hq1rkvN z#w#M&ACpD+Jp+$8p-hG_CrtB-LP7$n^{@d2J^&~I%!I@$5(XW1Wx>0k4)lDCe<~bh zVan77vg5SBbO~H`ZO?AnE~PB)zFlL#x9K-fphI&5g&QbLtLTlnaAPh^&xQX7@BJa6 THi6~X00000NkvXXu0mjfB+osR diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/Icon.png deleted file mode 100755 index 39191e4e58fbb4d679fea4db651a9a57b7d1d96e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2959 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 FV1gvceV70M diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/NotificationIcon@2x.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/NotificationIcon@2x.png deleted file mode 100755 index 51a4bc5a49600fcb747cd861e1481b9b15522573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1940 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 LNkvXXu0mjfkU!vK diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/AppIcon.appiconset/NotificationIcon~ipad.png deleted file mode 100755 index f8148fa612398dd2ed113fe0eb0329518f89fcfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 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�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

77$Kla0%x>)Y|CPKv`Ly?MTgRah) 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

uz){O+%bA<fUyUWy5Msj+~ z{|*aiC}t~ktt8?w%~zpVG^GLkU{5?ZjR{Yd#kDxA5LMopW-4k-YJz`|JxxPTrt7Y* zK6H$#%TM)|)Nj|FiFmYU_+FPxHY^)!zma4|SMKdAhFSs#;nHm`Y0G3!-FRt6cBA&> zUcq1To_{(sO3L)On90Az7L3PB39>PI4aF7jGOc{)gy$xohz~!9c%Qe@P9lH@V>{l! znA<(SOh2>-vk8z7fdze2qK>r4w|=eZrB)3<>J>eN+_RLtS$?j&r9Vz9yILrJ&K%KP z``w2ISCP@{o@(vME2D3TLs~+H3f79GW6JEdaxK5rITbqLRP#7#?%oU#Y!ce?uW6a% z9>tq-1E8e0X6tcp3&|oCoTltKZW%em=&kPQ411o3c#9{q$wX?Lh-i>%r>CCg;c@k7 z7+AXetH`4gXW5V%7=FlE-^cr)>13B3oj1obnx{Wv7L%Y5^dyDVQ(O&^DPyzlq4L=7 z&(^DVLW7UJ^i8G&Jrdbv`;Bn^|KS{O42HE|&6;A;H}-HILgxFNNgSE?3*MK|2ba-P z#T0F4c&qS7gGp_w2uf2MwZ2I=-s|GLsOPI3q-D#HZ%F&B5lEmzt201I@-2N$+o_^b z?do_gJj30p0@`T$1xuR|ii}vKv~egzoB%t4)XyGNdf%I{I%7!tu7r}2U*#ySMSQ8_ zjfNl2xO|520ar@q)YzQ?iNy-fQHt=Sjlbl`h8pc2^-hoNatFs2o&VnSq4oyoKS3!T z13vv7yDtHYXsa^h9TxkMe$?PHORH*Jj_todSS*(^{jHF?8m{t*^h*g=?iK}R_VBn< zK9S4vA9%@R9_E~>#8y@RAn&Bu{UjScQ5!IPw_l}amE#fOoR{L*5mZBIP(RV)crdJR z%;+RA5ccI@(t`=%o%pP3edN?7C7e0IL+*2vxDj`vRopY%EL;2J1nXY-Hl{-BMEHj~N`SwArVW4>#kO?mbXXtLD1h6O#bG)l*X_{1jsLB@UZCzleJy$pQ(I=_H!g#Za zII-M`KN=R(@ni6o4HrQ!N@!c|Yl%c|A!OaITYtFtoi>QDw1XU#c5oi}@KW z1kW>$7ao7Yel~zfXLX`62HUooZarWEzfcU_dL@461BXzaKIw4hIT8aZ41a)L5NnjIqgBIy?@=gpk~=t3;REmasVf<%Au2Jjck|(QFqsGKhQz^g+LBf# zxA)>q6gZ}oGp3V|2H%I_Dc=i?>=DG&;rBoy7ID~Y2%~d%EtpRAW*I*Yq%GXCubf!_W4{;&#D4FW)bJ`EYqqc3WDTdUo4wRk zwFl%|nH}e`BufN~bac^PvQdBDUmF(ctR}zdTnVGqh0q_qnUHAB+^hXTpW;p1*PCl2$S>WQthD`!@6mVHZCI+i*9V_XNbBgB<~2&HpU zhseRm+L67boa$Z^J$_CChJ~D>fpU9RAMowVkmeS?UTw%9rmDmGPTdRKtRxux{eowptcQmqf7IJO59q?FRRnU=|St~LVmgpbIsLW);D#QeYJMv3VOc-yi6 z64UU-4n8AaYlsTr`DTI_b9&vdVO}lEua8Or9n5@E)qH>ASsg65fM;GMrUYPzodXbe}b|i_lHfiIo@M524l~&hd#Nex8riT;xt%SwC7cy^| z#&o?zM?GboamMb&!wm*7=k1f2A=e*#B&GSBCp1Dm6=b8_m`M-_e@hIK!}$-$O~56Y zoy-Q*zg3@PD7{;w-@MkpAE43@){LNijQA0C?y=7q=uaUdq~npS1EY{3IRBD&k+i?! zB=+vtxUNt8AHm#`CK{P3--27nk0b3j+?rAG0Dd+_ zVHKh`xX)2#N_hP$&K5bT>1k{snqo;YIS>(~J`*qoQeL(bGN=@g)?BD^d?6k0nQhN^ za7#)gXG{0x9L|(n)iM)q@Y!qSONYDl9Zx9T=C)p2R9Jk5?T^t5!*e^h5-jybg#O(X z;~*T8H2A^vXB4B@ivs(^t&f--JR30ai-KN*PU`+Mkm#f=3~EG1A$zgb_7 z@?pvEG?rC*=+v?8`Zbi@N@?zjrp!vbv|Iqa3&Y>&iIl<{+89ClT)%C^2j;AqYE{lr8XVML4V81Po$+ zO>5N>!zmtWB->$#)RD^Sk}?-q?9tsyQLR%zAZBpA5lzNUZ=PpgiV#o$7j9vBndcz2+Oe>;}Zv7Xs|HGCgIGH zpZ4Fv(Ol(ay6F~Xk*8ak9lYxASwUOThK8k+5`EzF^$gbY)p><^0=DBcjG68~uNQES zKae-p0iP`{OO7}Xx}R-w^Tf{`5t#IboZgz8BXm{=0=nIpJi zv8S?I|5`Es7nn(TU*-Ahz`R;%Fyw6K=@}oB1g5>YA>mM8|%zyK* zL@j^+uK9lNB_R6d_W-LD|F&zA;5CcK6+Zkso6>irDnwz=dftSu{|w*F`3%nC?Vwpr z=e@>u`oI);8FG5|&EctF7hM-N&+W%0tsDNAzML>mY2vtDkqYB|+17wT_52R!oO+By- kGny!1rOIeYLA8?N&;Qun3l^LSyUG9pp00i_>zopr084YzvH$=8 diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/Contents.json b/iOS/Old/BluetoothExplorer/Assets.xcassets/Contents.json deleted file mode 100755 index da4a164..0000000 --- a/iOS/Old/BluetoothExplorer/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/Logo.imageset/Contents.json b/iOS/Old/BluetoothExplorer/Assets.xcassets/Logo.imageset/Contents.json deleted file mode 100755 index e4678c4..0000000 --- a/iOS/Old/BluetoothExplorer/Assets.xcassets/Logo.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "PureSwiftBluetooth.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/Logo.imageset/PureSwiftBluetooth.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/Logo.imageset/PureSwiftBluetooth.png deleted file mode 100755 index 155393aa0ac95895f8b7ca70f861a950486d5571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69662 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�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 W#?zrkj#U`IpS-k+RE5O*;Qt5NAR7|^ diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Contents.json b/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Contents.json deleted file mode 100755 index da4a164..0000000 --- a/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Contents.json b/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Contents.json deleted file mode 100755 index b87c9da..0000000 --- a/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "Near.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "Near@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "Near@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Near.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Near.png deleted file mode 100755 index ee9521e5ac75cb374c760df1329ce140ffff6045..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px%3rR#lR7efImd#5QQ5c7>Auhr~`@ql=B*6}mxh0|qLh*_}3qp1}wB2TqihKKkjKXoA)|0}DgyBKQJkpuZ~NHT{#Sm_GXHTaG8`qq73ldPKmLPr<$FLHesu z4#W-pgb^F@B-d#l8i@3OtE=|xcf()U2e;)`bmemXmLJ;)NI!j(Nsef@8;In$X#w6q zdMi5Ue}TKO2}_VA{q#*H*`n>%#BvqsJB#B^7(X``aS#s#uKMYloQhAhpFq9S<#xHn zZrvheNgw_6O;q$f@p*WMuae4eBlw<}ItTUM_&enIEFMChf^WP9MZR74$#XGz%Kdg( z=+|=>hU^67iSbBh$vW%x$(1YF2H%lJWPU?+V-z&)moe|iHtjb)Z<2VcoXou*gdXsK fH1yvJ`B$$qXI*N-GvpM400000NkvXXu0mjfJwF?7 diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Near@2x.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/Near.imageset/Near@2x.png deleted file mode 100755 index f23864f0ff7fcc1331ef10216d1f50c4c6e96de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1367 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 YFT6D`gbUVa82|tP07*qoM6N<$f*+vs=Kufz diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/NearSelected.imageset/NearSelected@2x.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/NearSelected.imageset/NearSelected@2x.png deleted file mode 100755 index 9305aeb1540269c1fa3fe6ea2cef30d44ee8f7a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1094 zcmV-M1iAZ(P)Px(07*naRA>e5n$1fVK^(_bieA8|pu!Nr0_jkMcrAKv9lAx*rEb+B>J;Ac;Gus& z5Gp$<1VMEWf}l+@lg)t@{aXH9E5*i z9zkVnl}kC5+Y1!vDl8+ajIVN+9?WWj4A*fG;RHy7v=qhwo?)4QTLoI7 zk=}&06m76R;K9pxZ1fR=i(YrFjt!(-Jo>a;+Wc4m<+a!Yp)RkmrNU)FjPSw1gGP zvR`RGh;aiR40xULC(Oc03^r#OrSwOdR~ZI7jC!8x7mT$XUV@MEIAW`3rp$Loq}d!u z+Jl&;O$P{i#l8YxrWs|lAEUoL!^YN~sQDfq=KYse*ACPNx7so|^tEF19H!-QX_w|I z%oPdS(#mIaXm=TdpP;tBP0$93`36I{T_67Lv%oX_>Z5qC>R%IQoe+D^ZA7VZ~#q1B5s z^$p_kAZOVucxg0OMBf6pU@f6%qx2b7AW&MRIT89;nTA=j;o5Jmh`vFzb-Vi7?4(gz zBbY0q#;5RZ)a$o$ig4y_RwlYMN~;wWdVL)}Xhk-_E$}V0&9ZBs)8PZTs{6aI;~))0 z-z0s|RcMx-^KlS4tA}8d9+K;s=zwKk4#UAolRm_9p%?2p7zQa)>fP)t)GvGyf73@= zq^S@F@G^ttt58t75-TtHzrT_o{ M07*qoM6N<$f(671&;S4c diff --git a/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/NearSelected.imageset/NearSelected@3x.png b/iOS/Old/BluetoothExplorer/Assets.xcassets/Tab Bar/NearSelected.imageset/NearSelected@3x.png deleted file mode 100755 index c1163b2d23bad1355a5a4988bd74277d89bf7645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1715 zcmV;k22A;hP)002t}1^@s6I8J)%00001b5ch_0Itp) z=>Px*ZAnByRCodHoLi_BRUF1o*^N*#&4_~+)aWHm@IgWGgxXVd5dsN?5Jae_9_*zk z2!iOL%S)N`972R(fgxoaAqkSoP%}y>5f!^=Ru-XY{eFkDH?zmRXYZL=vt|yR4?bq? zz1I3)zP)D6nl*FI(9k3%6_`|@W(BUP!T%I|&VaMvFq}PpydzP*mGZCfG&~8x5Kl+<+ z@HE;0{nanR&;oU{ryu?4SO1NN^U*pu3cDo~>pT4$hw(HL%ZX|ibkdC_N|qnvFdpM- z3~nZpr{P(c6?|QF#$|lQSu5t_eFv;dh&+Cc(|Bva8oVBbc>=Dxt??RnRII|=30QaX zMf@B0NG!FM;>bl{kwBZ$$N0^oQn>2=1~w(>GI5xP`BZ|LSltiH1lY8`=3`z#aU<5= zfK5v_L_FKb%lv|2E0(Un5WzLghIyG^5UjvTQx}|}gf~C)EQM+G-U~wo)nq&7X}*QA znV$c^CMVe~wj%eZ=4rl#FifwnVYgtK`klM0JK<}vh+yVx-nsE4J(?;?Ixe@F-+>Q| zXQ^Q6HiLdP?_8Kp>tk?G2X(dki5Opki(w1*Q}_cGjmf;te_(j-UW7#*R^88po`Z8> zav$H#K1Wy?|K>gL+;u&T-z({`Ot4vfKO-(hng_eV5%wd@vN1@V`Kv=;+)WD~0t{j_ zMjNkEAH(%9>(=C2>OCbx#AN>J&=(tN5yD|v8(!J=z_suu*blR5;2c)gZ>zsLWWu5M zCTw-6<9HtbZ^MUR9(a0&j8`2pPsQ75P}dfWmw!*AB``1M(ZNYSq*&^p9zEd%8T*F$ zJAA$X7sBL~jgJH4Sz3k^N?YoXT#^i3mkP&6>_r1kndVVJ9pSYo0#GlL4patSiaN0m@&}W;^uW?FV=RoC=G=ME-&vvv3!cYqJ^zs_W1r zEtY}ifs3}6$2&~nSoYM@|9p61+-9%CMk;RURT=R64n5Lh{gTs>_fDDjPdV)kBKAUT zZq8}9X!8y|((98mMXd(v*YEVx%_ex8g$U@-BP~|u>>nYxelF(H;L(1K0@iovkru1x zeNeyv%9z?hXXmt7=+GlAR%=ljE0{cfJoO%gUPxlVDM3BjNQ>qE^|$TXW)(&VXGz46 z)ImMkNQ>o)cwf7=IR$T+pNbsLKK!Xi8)>mFQM12Y+nmCEgt9DhIO?DtZKTDr;wyN% z-J<@2cLk5bSaX#bo4-1Apqp53^M2mZs@@My>i0$t!Ti;s1Kq@O=)Dg+hG0jpcpr?< zb=A~(F30lDmH%{tI|jXc#^j&)OA6zD*xAT2n78>~g>ECuM(5${SGA7&h4+b@;EcF# z$MQD+To|Tx?Dw;hBWn)+-EoaMvNPY$>NT=d)hoiQ&?hH#z*`$v?Xh5<=396rFpbVW zjfwT^IE*r*g9#OCgFDGDK$(HeJ+#^v`N;p|V`6w(C zcXs zjH{7w>vtU-g;|MIU8jHJh`AMwyJGOA*bVRybfH{|N_oJ-vO|4Nt); zMANSJ^^@FX - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iOS/Old/BluetoothExplorer/Info.plist b/iOS/Old/BluetoothExplorer/Info.plist deleted file mode 100644 index af9d510..0000000 --- a/iOS/Old/BluetoothExplorer/Info.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleDisplayName - Bluetooth - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/iOS/Old/BluetoothExplorer/ScanDataTableViewCell.xib b/iOS/Old/BluetoothExplorer/ScanDataTableViewCell.xib deleted file mode 100644 index 696c272..0000000 --- a/iOS/Old/BluetoothExplorer/ScanDataTableViewCell.xib +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - From 58d358ac6e84c8f24cd6103c2b22d4b4f44a25c3 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 01:33:28 -0400 Subject: [PATCH 08/34] Add `CentralListViewModel` --- .../ViewModel/CentralListViewModel.swift | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 BluetoothExplorer.swiftpm/ViewModel/CentralListViewModel.swift diff --git a/BluetoothExplorer.swiftpm/ViewModel/CentralListViewModel.swift b/BluetoothExplorer.swiftpm/ViewModel/CentralListViewModel.swift new file mode 100644 index 0000000..fce260b --- /dev/null +++ b/BluetoothExplorer.swiftpm/ViewModel/CentralListViewModel.swift @@ -0,0 +1,127 @@ +// +// CentralListViewModel.swift +// BluetoothExplorer +// +// Created by Alsey Coleman Miller on 7/11/25. +// + +import Foundation +import Observation +import Bluetooth +import GATT +import SkipFuse +import SkipUI +import SkipModel + +@MainActor +@Observable +public final class CentralListViewModel { + + let store: Store + + var scanToggleTask: Task? + + public init(store: Store) { + self.store = store + } + + public var scanResults: [ScanResult] { + store.scanResults + .values + .lazy + .sorted(by: { $0.id.description < $1.id.description }) + .sorted(by: { ($0.name ?? "") < ($1.name ?? "") }) + .sorted(by: { $0.name != nil && $1.name == nil }) + .sorted(by: { $0.beacon != nil && $1.beacon == nil }) + .map { ScanResult($0) } + } + + public var isEnabled: Bool { + store.isEnabled + } + + public var isScanning: Bool { + store.isScanning + } + + public var canToggleScan: Bool { + scanToggleTask == nil && store.isEnabled + } + + public func scanToggle() { + scanToggleTask = Task { + defer { scanToggleTask = nil } + if store.isScanning { + await store.stopScan() + } else { + do { + try await store.scan() + } + catch { + store.log(error: error) + } + } + } + } + + public struct ScanResult: Equatable, Hashable, Sendable, Identifiable { + + typealias ScanData = ScanDataCache + + let scanData: ScanData + + init(_ scanData: ScanData) { + self.scanData = scanData + } + + public var id: String { + scanData.id.description + } + + public var name: String { + scanData.name ?? (beacon != nil ? "iBeacon" : "Unknown") + } + + public var company: String? { + scanData.manufacturerData?.companyIdentifier.name + } + + public var services: String? { + let services = scanData.serviceUUIDs + .sorted(by: { $0.description < $1.description }) + .map { $0.metadata?.name ?? $0.rawValue } + guard services.isEmpty == false + else { return nil } + return "Services: " + services.reduce("", { ($0.isEmpty ? "" : ", ") + $1 }) + } + + public var beacon: CentralListViewModel.Beacon? { + scanData.beacon.flatMap(Beacon.init) + } + } + + public struct Beacon: Equatable, Hashable, Sendable { + + let beacon: AppleBeacon + + init(_ beacon: AppleBeacon) { + self.beacon = beacon + } + + public var uuid: String { + beacon.uuid.uuidString + } + + public var major: String { + "Major: 0x\(beacon.major.toHexadecimal())" + } + + public var minor: String { + "Minor: 0x\(beacon.minor.toHexadecimal())" + } + + public var rssi: String { + "RSSI: \(beacon.rssi)" + } + } +} From 6a811ec97f234da99f3793bc62b72d3cd8851287 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 02:05:09 -0400 Subject: [PATCH 09/34] Update model --- .../Model/AttributeValue.swift | 22 +++++++++++++----- BluetoothExplorer.swiftpm/Model/Store.swift | 23 ++++++++++++++----- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/BluetoothExplorer.swiftpm/Model/AttributeValue.swift b/BluetoothExplorer.swiftpm/Model/AttributeValue.swift index 69b15bd..aa37a6d 100644 --- a/BluetoothExplorer.swiftpm/Model/AttributeValue.swift +++ b/BluetoothExplorer.swiftpm/Model/AttributeValue.swift @@ -7,25 +7,35 @@ import Foundation -enum AttributeValueType: Equatable, Hashable { +public enum AttributeValueType: Equatable, Hashable { case read case write case notification } -struct AttributeValue: Equatable, Hashable { +public struct AttributeValue: Equatable, Hashable { - let date: Date + public let date: Date - let type: AttributeValueType + public let type: AttributeValueType - let data: Data + public let data: Data + + public init( + date: Date, + type: AttributeValueType, + data: Data + ) { + self.date = date + self.type = type + self.data = data + } } extension AttributeValue: Identifiable { - var id: Date { + public var id: Date { date } } diff --git a/BluetoothExplorer.swiftpm/Model/Store.swift b/BluetoothExplorer.swiftpm/Model/Store.swift index 326866d..8486882 100644 --- a/BluetoothExplorer.swiftpm/Model/Store.swift +++ b/BluetoothExplorer.swiftpm/Model/Store.swift @@ -7,16 +7,14 @@ // import Foundation -@preconcurrency import Combine -import SwiftUI +import Observation import Bluetooth import GATT -import DarwinGATT /// Store @MainActor @Observable -final class Store: @unchecked Sendable { +public final class Store: @unchecked Sendable { typealias Central = NativeCentral @@ -55,7 +53,7 @@ final class Store: @unchecked Sendable { private(set) var descriptors = [Characteristic: [Descriptor]]() private(set) var characteristicValues = [Characteristic: Cache]() - + private(set) var descriptorValues = [Descriptor: Cache]() private(set) var isNotifying = [Characteristic: Bool]() @@ -66,7 +64,12 @@ final class Store: @unchecked Sendable { // MARK: - Initialization - init(central: Central = Central()) { + public convenience init() { + let central = Central() + self.init(central: central) + } + + init(central: Central) { self.central = central setupLog() observeValues() @@ -119,6 +122,14 @@ final class Store: @unchecked Sendable { self.connected = newValue } + public func log(_ message: String) { + print(message) + } + + func log(error: any Error) { + print("Error", error.localizedDescription) + } + func scan( with services: Set = [], filterDuplicates: Bool = true From 9bb4efb6f452aaf64c8c34a871c970247030f2d6 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 02:05:36 -0400 Subject: [PATCH 10/34] Update `AsyncButton` --- BluetoothExplorer.swiftpm/Views/AsyncButton.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/BluetoothExplorer.swiftpm/Views/AsyncButton.swift b/BluetoothExplorer.swiftpm/Views/AsyncButton.swift index c635adb..d1930eb 100644 --- a/BluetoothExplorer.swiftpm/Views/AsyncButton.swift +++ b/BluetoothExplorer.swiftpm/Views/AsyncButton.swift @@ -7,14 +7,14 @@ import SwiftUI +enum ActionOption: CaseIterable { + case disableButton + case showProgressView +} + // https://www.swiftbysundell.com/articles/building-an-async-swiftui-button/ struct AsyncButton: View { - enum ActionOption: CaseIterable { - case disableButton - case showProgressView - } - var action: () async -> Void var actionOptions = Set(ActionOption.allCases) From 12bb2f433820cad016152596053a9526ce062662 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 02:10:07 -0400 Subject: [PATCH 11/34] Update `CentralList` --- .../Views/CentralList.swift | 129 +++++++++--------- 1 file changed, 68 insertions(+), 61 deletions(-) diff --git a/BluetoothExplorer.swiftpm/Views/CentralList.swift b/BluetoothExplorer.swiftpm/Views/CentralList.swift index 1ad64de..ca99e1a 100644 --- a/BluetoothExplorer.swiftpm/Views/CentralList.swift +++ b/BluetoothExplorer.swiftpm/Views/CentralList.swift @@ -7,84 +7,91 @@ // import SwiftUI -import Bluetooth -import GATT +#if canImport(BluetoothExplorerModel) +import BluetoothExplorerModel +#endif -struct CentralList: View { +public struct CentralList: View { + + typealias ViewModel = CentralListViewModel @Environment(Store.self) var store: Store - var scanResults: [Store.ScanResult] { - store.scanResults - .values - .sorted(by: { $0.id.description < $1.id.description }) - .sorted(by: { ($0.name ?? "") < ($1.name ?? "") }) - .sorted(by: { $0.name != nil && $1.name == nil }) - .sorted(by: { $0.beacon != nil && $1.beacon == nil }) - } + public init() { } - var body: some View { - list - .navigationTitle(Text("Central")) - .toolbar { leftBarButtonItem } + public var body: some View { + ContentView(store) } -} - -extension CentralList { - var list: some View { - ScrollView { - LazyVStack(alignment: .leading) { - ForEach(scanResults) { item in - NavigationLink( - destination: { PeripheralView(peripheral: item.scanData.peripheral) }, - label: { CentralCell(scanData: item) } - ) + struct ContentView: View { + + @State + var viewModel: ViewModel + + init(_ store: Store) { + _viewModel = State(initialValue: CentralListViewModel(store: store)) + } + + var body: some View { + ListView(scanResults: viewModel.scanResults) + .navigationTitle(Text("Central")) + .toolbar { + leftBarButtonItem } - } + } + + var leftBarButtonItem: CentralList.LeftBarButtonItem { + LeftBarButtonItem( + isEnabled: viewModel.isEnabled, + isScanning: viewModel.isScanning, + canToggleScan: viewModel.canToggleScan, + toggle: { viewModel.scanToggle() } + ) } } - var leftBarButtonItem: some View { - switch store.isEnabled { - case false: - return AnyView( - Image(systemName: "exclamationmark.triangle.fill") - .foregroundColor(.red) - ) - case true: - if store.isScanning { - return AnyView(Button(action: { - Task { - await self.store.stopScan() + struct ListView: View { + + let scanResults: [CentralListViewModel.ScanResult] + + var body: some View { + ScrollView { + LazyVStack(alignment: .leading) { + ForEach(scanResults) { item in + NavigationLink(destination: { + EmptyView() + }, label: { + CentralCell(item) + }) } - }) { - Text("Stop") - }) - } else { - return AnyView(Button(action: { - Task { - do { try await self.store.scan() } - catch { print("Error scanning:", error) } - } - }) { - Text("Scan") - }) + } } } } -} - -#if DEBUG -struct CentralList_Preview: PreviewProvider { - static var previews: some View { - Group { - NavigationView { - CentralList() + + struct LeftBarButtonItem: View { + + let isEnabled: Bool + + let isScanning: Bool + + let canToggleScan: Bool + + let toggle: () -> () + + var body: some View { + switch isEnabled { + case false: + return AnyView( + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.red) + ) + case true: + return AnyView(Button(action: toggle) { + isScanning ? Text("Stop") : Text("Scan") + }.disabled(canToggleScan == false)) } - .environment(Store()) } } } -#endif From 8be8c4763495a481ecd13d81520907f9ab9a2dac Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 02:10:17 -0400 Subject: [PATCH 12/34] Update `CentralCell` --- .../Views/CentralCell.swift | 78 +++++-------------- 1 file changed, 20 insertions(+), 58 deletions(-) diff --git a/BluetoothExplorer.swiftpm/Views/CentralCell.swift b/BluetoothExplorer.swiftpm/Views/CentralCell.swift index 20ebd26..e62a2d9 100644 --- a/BluetoothExplorer.swiftpm/Views/CentralCell.swift +++ b/BluetoothExplorer.swiftpm/Views/CentralCell.swift @@ -6,44 +6,49 @@ // import SwiftUI -import Bluetooth -import GATT +#if canImport(BluetoothExplorerModel) +import BluetoothExplorerModel +#endif -struct CentralCell : View { +public struct CentralCell: View { - let scanData: ScanDataCache + let item: CentralListViewModel.ScanResult + + public init(_ item: CentralListViewModel.ScanResult) { + self.item = item + } - var body: some View { + public var body: some View { VStack(alignment: .leading, spacing: 2.0) { - nameText + Text(verbatim: item.name) .font(.title3) .foregroundColor(.primary) #if DEBUG - Text(verbatim: "\(scanData.id)") + Text(verbatim: item.id) .font(.footnote) .foregroundColor(.secondary) #endif - if let beacon = self.beacon { - Text("\(beacon.uuid)") + if let beacon = item.beacon { + Text(verbatim: beacon.uuid) .font(.subheadline) .foregroundColor(.primary) - Text("Major: 0x\(beacon.major.toHexadecimal())") + Text(verbatim: beacon.major) .font(.subheadline) .foregroundColor(.primary) - Text("Minor: 0x\(beacon.minor.toHexadecimal())") + Text(verbatim: beacon.minor) .font(.subheadline) .foregroundColor(.primary) - Text("RSSI: \(beacon.rssi)") + Text(verbatim: beacon.rssi) .font(.subheadline) .foregroundColor(.primary) } - if let company = self.company, beacon == nil { + if let company = item.company, item.beacon == nil { Text(verbatim: company) .font(.subheadline) .foregroundColor(.primary) } - if let services = services { - Text("Services: \(services)") + if let services = item.services { + Text(verbatim: services) .font(.subheadline) .foregroundColor(.primary) } @@ -51,46 +56,3 @@ struct CentralCell : View { .padding() } } - -private struct CentralCellCache { - static var listFormatter: ListFormatter { ListFormatter() } -} - -extension CentralCell { - - var nameText: Text { - scanData.name.flatMap { Text(verbatim: $0) } ?? (beacon != nil ? Text("iBeacon") : Text("Unknown")) - } - - var company: String? { - scanData.manufacturerData?.companyIdentifier.name - } - - var services: String? { - let services = scanData.serviceUUIDs - .sorted(by: { $0.description < $1.description }) - .map { $0.metadata?.name ?? $0.rawValue } - guard services.isEmpty == false - else { return nil } - return CentralCellCache.listFormatter.string(from: services) - } - - var beacon: AppleBeacon? { - return scanData.beacon - } -} - -#if DEBUG -struct CentralCell_Preview: PreviewProvider { - static var previews: some View { - NavigationView { - List { - CentralCell(scanData: .init(scanData: MockScanData.beacon)) - CentralCell(scanData: .init(scanData: MockScanData.beacon)) - CentralCell(scanData: .init(scanData: MockScanData.beacon)) - CentralCell(scanData: .init(scanData: MockScanData.smartThermostat)) - } - } - } -} -#endif From b0db4731c7f55e9eccd5f2af62abf5bafb78de2e Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 02:15:26 -0400 Subject: [PATCH 13/34] Conditionally import libraries --- .../Entity/CharacteristicEntity.swift | 2 + .../Entity/ManufacturerDataEntity.swift | 2 + .../AppIntents/Entity/PeripheralEntity.swift | 2 + .../AppIntents/Entity/ServiceEntity.swift | 2 + .../DiscoverCharacteristicsIntent.swift | 2 + .../Intent/DiscoverServicesIntent.swift | 2 + .../AppIntents/Intent/ScanIntent.swift | 2 + .../AppIntents/Shortcuts.swift | 2 + .../Model/Mock/MockAdvertisement.swift | 33 +++--- .../Model/Mock/MockAttributes.swift | 13 +-- .../Model/Mock/MockCentral.swift | 47 ++++---- .../Model/Mock/MockScanData.swift | 6 +- .../Model/NativeCentral.swift | 9 +- .../ViewModel/CentralListViewModel.swift | 105 +++++++++++++++--- .../ViewModel/PeripheralViewModel.swift | 56 ++++++++++ .../Views/AsyncButton.swift | 2 + .../Views/AttributeCell.swift | 2 + .../Views/AttributeValueCell.swift | 2 + .../Views/AttributeValuesSection.swift | 2 + .../Views/CentralCell.swift | 5 +- .../Views/CentralList.swift | 5 +- .../Views/CharacteristicView.swift | 2 + .../Views/DescriptorView.swift | 2 + .../Views/PeripheralView.swift | 2 + .../Views/ServiceView.swift | 2 + .../Views/WriteAttributeView.swift | 2 + 26 files changed, 234 insertions(+), 79 deletions(-) create mode 100644 BluetoothExplorer.swiftpm/ViewModel/PeripheralViewModel.swift diff --git a/BluetoothExplorer.swiftpm/AppIntents/Entity/CharacteristicEntity.swift b/BluetoothExplorer.swiftpm/AppIntents/Entity/CharacteristicEntity.swift index cd92f0b..d22c50e 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Entity/CharacteristicEntity.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Entity/CharacteristicEntity.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 11/22/22. // +#if canImport(AppIntents) import AppIntents import Bluetooth import GATT @@ -92,3 +93,4 @@ struct CharacteristicQuery: EntityQuery { func suggestedEntities() -> [CharacteristicEntity] { [] } } +#endif diff --git a/BluetoothExplorer.swiftpm/AppIntents/Entity/ManufacturerDataEntity.swift b/BluetoothExplorer.swiftpm/AppIntents/Entity/ManufacturerDataEntity.swift index 79cba0b..206f035 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Entity/ManufacturerDataEntity.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Entity/ManufacturerDataEntity.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 11/20/22. // +#if canImport(AppIntents) import AppIntents import Bluetooth import GATT @@ -66,3 +67,4 @@ struct ManufacturerDataQuery: EntityQuery { .map { .init($0) } } } +#endif diff --git a/BluetoothExplorer.swiftpm/AppIntents/Entity/PeripheralEntity.swift b/BluetoothExplorer.swiftpm/AppIntents/Entity/PeripheralEntity.swift index e896313..60c5d6f 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Entity/PeripheralEntity.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Entity/PeripheralEntity.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 11/20/22. // +#if canImport(AppIntents) import AppIntents import Bluetooth import GATT @@ -102,3 +103,4 @@ extension BluetoothAddress: @retroactive EntityIdentifierConvertible { .init(rawValue: entityIdentifierString) } } +#endif diff --git a/BluetoothExplorer.swiftpm/AppIntents/Entity/ServiceEntity.swift b/BluetoothExplorer.swiftpm/AppIntents/Entity/ServiceEntity.swift index d32da39..9872cc3 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Entity/ServiceEntity.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Entity/ServiceEntity.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 11/22/22. // +#if canImport(AppIntents) import AppIntents import Bluetooth import GATT @@ -87,3 +88,4 @@ struct ServiceQuery: EntityQuery { func suggestedEntities() -> [ServiceEntity] { [] } } +#endif diff --git a/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverCharacteristicsIntent.swift b/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverCharacteristicsIntent.swift index 7ca8279..a379272 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverCharacteristicsIntent.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverCharacteristicsIntent.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 11/22/22. // +#if canImport(AppIntents) && canImport(SwiftUI) import AppIntents import SwiftUI import Bluetooth @@ -52,3 +53,4 @@ struct DiscoverCharacteristicsIntent: AppIntent { ) } } +#endif diff --git a/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverServicesIntent.swift b/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverServicesIntent.swift index 07e1872..fd1287e 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverServicesIntent.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Intent/DiscoverServicesIntent.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 11/22/22. // +#if canImport(AppIntents) && canImport(SwiftUI) import AppIntents import SwiftUI import Bluetooth @@ -49,3 +50,4 @@ struct DiscoverServicesIntent: AppIntent { ) } } +#endif diff --git a/BluetoothExplorer.swiftpm/AppIntents/Intent/ScanIntent.swift b/BluetoothExplorer.swiftpm/AppIntents/Intent/ScanIntent.swift index b6354f0..da58cb9 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Intent/ScanIntent.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Intent/ScanIntent.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 11/20/22. // +#if canImport(AppIntents) && canImport(SwiftUI) import AppIntents import SwiftUI import Bluetooth @@ -115,3 +116,4 @@ private extension ScanIntent { }.padding() } } +#endif diff --git a/BluetoothExplorer.swiftpm/AppIntents/Shortcuts.swift b/BluetoothExplorer.swiftpm/AppIntents/Shortcuts.swift index b822e3c..5a2190a 100644 --- a/BluetoothExplorer.swiftpm/AppIntents/Shortcuts.swift +++ b/BluetoothExplorer.swiftpm/AppIntents/Shortcuts.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 11/20/22. // +#if canImport(AppIntents) import AppIntents @available(macOS 13, iOS 16, watchOS 9, tvOS 16, *) @@ -26,3 +27,4 @@ struct AppShortcuts: AppShortcutsProvider { ) } } +#endif diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockAdvertisement.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockAdvertisement.swift index e2f1671..94b8bf0 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockAdvertisement.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockAdvertisement.swift @@ -12,34 +12,35 @@ import Bluetooth import GATT /// Mock Advertisement Data -struct MockAdvertisementData: AdvertisementData { +public struct MockAdvertisementData: AdvertisementData { /// The local name of a peripheral. - let localName: String? + public let localName: String? /// The Manufacturer data of a peripheral. - let manufacturerData: ManufacturerSpecificData? + public let manufacturerData: ManufacturerSpecificData? /// This value is available if the broadcaster (peripheral) provides its Tx power level in its advertising packet. /// Using the RSSI value and the Tx power level, it is possible to calculate path loss. - let txPowerLevel: Double? + public let txPowerLevel: Double? /// Service-specific advertisement data. - let serviceData: [BluetoothUUID: Data]? + public let serviceData: [BluetoothUUID: Data]? /// An array of service UUIDs - let serviceUUIDs: [BluetoothUUID]? + public let serviceUUIDs: [BluetoothUUID]? /// An array of one or more `BluetoothUUID`, representing Service UUIDs. - let solicitedServiceUUIDs: [BluetoothUUID]? + public let solicitedServiceUUIDs: [BluetoothUUID]? - init(localName: String? = nil, - manufacturerData: ManufacturerSpecificData? = nil, - txPowerLevel: Double? = nil, - serviceData: [BluetoothUUID : Data]? = nil, - serviceUUIDs: [BluetoothUUID]? = nil, - solicitedServiceUUIDs: [BluetoothUUID]? = nil) { - + public init( + localName: String? = nil, + manufacturerData: ManufacturerSpecificData? = nil, + txPowerLevel: Double? = nil, + serviceData: [BluetoothUUID : Data]? = nil, + serviceUUIDs: [BluetoothUUID]? = nil, + solicitedServiceUUIDs: [BluetoothUUID]? = nil + ) { self.localName = localName self.manufacturerData = manufacturerData self.txPowerLevel = txPowerLevel @@ -51,7 +52,7 @@ struct MockAdvertisementData: AdvertisementData { extension MockAdvertisementData { - static let beacon = MockAdvertisementData( + public static let beacon = MockAdvertisementData( localName: nil, manufacturerData: ManufacturerSpecificData(data: Data([0x4c, 0x00, 0x02, 0x15, 0xb9, 0x40, 0x7f, 0x30, 0xf5, 0xf8, 0x46, 0x6e, 0xaf, 0xf9, 0x25, 0x55, 0x6b, 0x57, 0xfe, 0x6d, 0x29, 0x4c, 0x90, 0x39, 0x74])), txPowerLevel: nil, @@ -60,7 +61,7 @@ extension MockAdvertisementData { solicitedServiceUUIDs: nil ) - static let smartThermostat = MockAdvertisementData( + public static let smartThermostat = MockAdvertisementData( localName: "CLI-W200", manufacturerData: ManufacturerSpecificData(data: Data([0xd9, 0x01, 0x01, 0x02, 0x00, 0x00, 0x8c, 0x85, 0x90, 0xcb, 0x31, 0x74, 0x00, 0x60])), txPowerLevel: nil, diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockAttributes.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockAttributes.swift index a62aa01..33bf6f0 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockAttributes.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockAttributes.swift @@ -6,15 +6,14 @@ // #if DEBUG -import SwiftUI import Bluetooth import GATT -typealias MockService = GATT.Service -typealias MockCharacteristic = GATT.Characteristic -typealias MockDescriptor = GATT.Descriptor +public typealias MockService = GATT.Service +public typealias MockCharacteristic = GATT.Characteristic +public typealias MockDescriptor = GATT.Descriptor -extension MockService { +public extension MockService { static var deviceInformation: MockService { Service( @@ -41,7 +40,7 @@ extension MockService { } } -extension MockCharacteristic { +public extension MockCharacteristic { static var deviceName: MockCharacteristic { Characteristic( @@ -96,7 +95,7 @@ extension MockCharacteristic { ) } -extension MockDescriptor { +public extension MockDescriptor { static func clientCharacteristicConfiguration(_ peripheral: Peripheral) -> MockDescriptor { Descriptor( diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift index 81ae8e2..8bcc9f6 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift @@ -9,23 +9,22 @@ import Foundation import Bluetooth import GATT -import DarwinGATT @MainActor -internal final class MockCentral: CentralManager, @unchecked Sendable { +public final class MockCentral: CentralManager, @unchecked Sendable { /// Central Peripheral Type - typealias Peripheral = GATT.Peripheral + public typealias Peripheral = GATT.Peripheral /// Central Advertisement Type - typealias Advertisement = MockAdvertisementData + public typealias Advertisement = MockAdvertisementData /// Central Attribute ID (Handle) - typealias AttributeID = UInt16 + public typealias AttributeID = UInt16 - nonisolated(unsafe) var log: (@Sendable (String) -> ())? + public nonisolated(unsafe) var log: (@Sendable (String) -> ())? - var peripherals: [GATT.Peripheral : Bool] { + public var peripherals: [GATT.Peripheral : Bool] { get async { var peripherals = [Peripheral: Bool]() for scanData in state.scanData { @@ -35,7 +34,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } } - var isEnabled: Bool { + public var isEnabled: Bool { get async { state.isEnabled } @@ -45,7 +44,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { private var continuation = Continuation() - init() { + public init() { Task { try await Task.sleep(for: .seconds(1)) updateState { @@ -55,7 +54,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Scans for peripherals that are advertising services. - func scan( + public func scan( with services: Set, filterDuplicates: Bool ) -> AsyncCentralScan { @@ -66,29 +65,29 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } } - func scan( + public func scan( filterDuplicates: Bool ) -> AsyncCentralScan { scan(with: [], filterDuplicates: filterDuplicates) } /// Connect to the specified device - func connect(to peripheral: Peripheral) async throws { + public func connect(to peripheral: Peripheral) async throws { state.connected.insert(peripheral) } /// Disconnect the specified device. - func disconnect(_ peripheral: Peripheral) async { + public func disconnect(_ peripheral: Peripheral) async { state.connected.remove(peripheral) } /// Disconnect all connected devices. - func disconnectAll() { + public func disconnectAll() { state.connected.removeAll() } /// Discover Services - func discoverServices( + public func discoverServices( _ services: Set = [], for peripheral: Peripheral ) async throws -> [Service] { @@ -106,7 +105,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Discover Characteristics for service - nonisolated func discoverCharacteristics( + public nonisolated func discoverCharacteristics( _ characteristics: Set = [], for service: Service ) async throws -> [Characteristic] { @@ -121,7 +120,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Read Characteristic Value - nonisolated func readValue( + public nonisolated func readValue( for characteristic: Characteristic ) async throws -> Data { guard await state.connected.contains(characteristic.peripheral) else { @@ -131,7 +130,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Write Characteristic Value - nonisolated func writeValue( + public nonisolated func writeValue( _ data: Data, for characteristic: Characteristic, withResponse: Bool = true @@ -155,7 +154,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Discover descriptors - nonisolated func discoverDescriptors( + public nonisolated func discoverDescriptors( for characteristic: Characteristic ) async throws -> [Descriptor] { guard await state.connected.contains(characteristic.peripheral) else { @@ -165,7 +164,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Read descriptor - nonisolated func readValue( + public nonisolated func readValue( for descriptor: Descriptor ) async throws -> Data { guard await state.connected.contains(descriptor.peripheral) else { @@ -175,7 +174,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Write descriptor - nonisolated func writeValue( + public nonisolated func writeValue( _ data: Data, for descriptor: Descriptor ) async throws { @@ -187,7 +186,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } } - nonisolated func notify( + public nonisolated func notify( for characteristic: GATT.Characteristic ) async throws -> AsyncCentralNotifications { guard await state.connected.contains(characteristic.peripheral) else { @@ -206,7 +205,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } /// Read MTU - func maximumTransmissionUnit(for peripheral: Peripheral) async throws -> MaximumTransmissionUnit { + public func maximumTransmissionUnit(for peripheral: Peripheral) async throws -> MaximumTransmissionUnit { guard state.connected.contains(peripheral) else { throw CentralError.disconnected } @@ -214,7 +213,7 @@ internal final class MockCentral: CentralManager, @unchecked Sendable { } // Read RSSI - func rssi(for peripheral: Peripheral) async throws -> RSSI { + public func rssi(for peripheral: Peripheral) async throws -> RSSI { return .init(rawValue: 127)! } } diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockScanData.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockScanData.swift index 981808a..5f2d9c9 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockScanData.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockScanData.swift @@ -11,9 +11,9 @@ import Foundation import Bluetooth import GATT -typealias MockScanData = ScanData +public typealias MockScanData = ScanData -extension MockScanData { +public extension MockScanData { static let beacon = MockScanData( peripheral: .beacon, @@ -32,7 +32,7 @@ extension MockScanData { ) } -extension Peripheral { +public extension Peripheral { static var beacon: Peripheral { Peripheral(id: BluetoothAddress(rawValue: "00:AA:AB:03:10:01")!) diff --git a/BluetoothExplorer.swiftpm/Model/NativeCentral.swift b/BluetoothExplorer.swiftpm/Model/NativeCentral.swift index d48b670..2c5b55d 100644 --- a/BluetoothExplorer.swiftpm/Model/NativeCentral.swift +++ b/BluetoothExplorer.swiftpm/Model/NativeCentral.swift @@ -7,20 +7,20 @@ // import Foundation -import SwiftUI import Bluetooth import GATT +#if canImport(DarwinGATT) import DarwinGATT +#endif #if os(Android) || os(iOS) && targetEnvironment(simulator) -typealias NativeCentral = MockCentral +public typealias NativeCentral = MockCentral #elseif canImport(Darwin) -typealias NativeCentral = DarwinCentral +public typealias NativeCentral = DarwinCentral #else #error("Platform not supported") #endif -#if canImport(Darwin) extension NativeCentral { /// Wait for CoreBluetooth to be ready. @@ -46,4 +46,3 @@ extension NativeCentral { } while currentState != true } } -#endif diff --git a/BluetoothExplorer.swiftpm/ViewModel/CentralListViewModel.swift b/BluetoothExplorer.swiftpm/ViewModel/CentralListViewModel.swift index fce260b..2a421f2 100644 --- a/BluetoothExplorer.swiftpm/ViewModel/CentralListViewModel.swift +++ b/BluetoothExplorer.swiftpm/ViewModel/CentralListViewModel.swift @@ -9,14 +9,11 @@ import Foundation import Observation import Bluetooth import GATT -import SkipFuse -import SkipUI -import SkipModel @MainActor @Observable public final class CentralListViewModel { - + let store: Store var scanToggleTask: Task? @@ -25,27 +22,29 @@ public final class CentralListViewModel { self.store = store } + var state: State { + State( + .init( + store: store, + didToggle: scanToggleTask != nil + ) + ) + } + public var scanResults: [ScanResult] { - store.scanResults - .values - .lazy - .sorted(by: { $0.id.description < $1.id.description }) - .sorted(by: { ($0.name ?? "") < ($1.name ?? "") }) - .sorted(by: { $0.name != nil && $1.name == nil }) - .sorted(by: { $0.beacon != nil && $1.beacon == nil }) - .map { ScanResult($0) } + state.scanResults } public var isEnabled: Bool { - store.isEnabled + state.isEnabled } public var isScanning: Bool { - store.isScanning + state.isScanning } public var canToggleScan: Bool { - scanToggleTask == nil && store.isEnabled + state.canToggleScan } public func scanToggle() { @@ -63,8 +62,75 @@ public final class CentralListViewModel { } } } +} + +public extension CentralListViewModel { - public struct ScanResult: Equatable, Hashable, Sendable, Identifiable { + struct State: Equatable, Hashable, Sendable { + + let input: Input + + init(_ input: Input) { + self.input = input + } + + public var scanResults: [ScanResult] { + input.scanResults + .values + .lazy + .sorted(by: { $0.id.description < $1.id.description }) + .sorted(by: { ($0.name ?? "") < ($1.name ?? "") }) + .sorted(by: { $0.name != nil && $1.name == nil }) + .sorted(by: { $0.beacon != nil && $1.beacon == nil }) + .map { ScanResult($0) } + } + + public var isEnabled: Bool { + input.isEnabled + } + + public var isScanning: Bool { + input.isScanning + } + + public var canToggleScan: Bool { + input.didToggle == false && input.isEnabled + } + } +} + +public extension CentralListViewModel.State { + + struct Input: Equatable, Hashable, Sendable { + + let scanResults: [Peripheral: Store.ScanResult] + + let isEnabled: Bool + + let isScanning: Bool + + let didToggle: Bool + + init(scanResults: [Peripheral : Store.ScanResult], isEnabled: Bool, isScanning: Bool, didToggle: Bool) { + self.scanResults = scanResults + self.isEnabled = isEnabled + self.isScanning = isScanning + self.didToggle = didToggle + } + + @MainActor + init(store: Store, didToggle: Bool) { + self.scanResults = store.scanResults + self.isEnabled = store.isEnabled + self.isScanning = store.isScanning + self.didToggle = didToggle + } + } +} + +public extension CentralListViewModel { + + struct ScanResult: Equatable, Hashable, Sendable, Identifiable { typealias ScanData = ScanDataCache @@ -91,7 +157,7 @@ public final class CentralListViewModel { .sorted(by: { $0.description < $1.description }) .map { $0.metadata?.name ?? $0.rawValue } guard services.isEmpty == false - else { return nil } + else { return nil } return "Services: " + services.reduce("", { ($0.isEmpty ? "" : ", ") + $1 }) } @@ -99,8 +165,11 @@ public final class CentralListViewModel { scanData.beacon.flatMap(Beacon.init) } } +} + +public extension CentralListViewModel { - public struct Beacon: Equatable, Hashable, Sendable { + struct Beacon: Equatable, Hashable, Sendable { let beacon: AppleBeacon diff --git a/BluetoothExplorer.swiftpm/ViewModel/PeripheralViewModel.swift b/BluetoothExplorer.swiftpm/ViewModel/PeripheralViewModel.swift new file mode 100644 index 0000000..edd950a --- /dev/null +++ b/BluetoothExplorer.swiftpm/ViewModel/PeripheralViewModel.swift @@ -0,0 +1,56 @@ +// +// PeripheralViewModel.swift +// bluetooth-explorer +// +// Created by Alsey Coleman Miller on 7/12/25. +// + +import Foundation +import Observation +import Bluetooth +import GATT + +@MainActor +@Observable +public final class PeripheralViewModel { + + let store: Store + + let peripheral: Store.Peripheral + + init(store: Store, peripheral: Peripheral) { + self.store = store + self.peripheral = peripheral + } + + public convenience init(store: Store, peripheral: String) { + guard let peripheral = store.scanResults.first(where: { $0.key.description == peripheral })?.key else { + fatalError("Invalid peripheral: \(peripheral)") + } + self.init(store: store, peripheral: peripheral) + } + + var title: String { + store.scanResults[peripheral]?.name ?? "Device" + } + + var isConnected: Bool { + store.connected.contains(peripheral) + } + + var services: [Store.Service] { + store.services[peripheral] ?? [] + } + + var showActivity: Bool { + store.activity[peripheral] ?? false + } + + public func connect() { + + } + + public func reload() { + + } +} diff --git a/BluetoothExplorer.swiftpm/Views/AsyncButton.swift b/BluetoothExplorer.swiftpm/Views/AsyncButton.swift index d1930eb..9ac3a3a 100644 --- a/BluetoothExplorer.swiftpm/Views/AsyncButton.swift +++ b/BluetoothExplorer.swiftpm/Views/AsyncButton.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 23/12/21. // +#if canImport(SwiftUI) import SwiftUI enum ActionOption: CaseIterable { @@ -60,3 +61,4 @@ struct AsyncButton: View { .disabled(isDisabled) } } +#endif diff --git a/BluetoothExplorer.swiftpm/Views/AttributeCell.swift b/BluetoothExplorer.swiftpm/Views/AttributeCell.swift index c074d8b..92ac40e 100644 --- a/BluetoothExplorer.swiftpm/Views/AttributeCell.swift +++ b/BluetoothExplorer.swiftpm/Views/AttributeCell.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 19/12/21. // +#if canImport(SwiftUI) import SwiftUI import Bluetooth import GATT @@ -47,3 +48,4 @@ struct AttributeCell_Preview: PreviewProvider { } } #endif +#endif diff --git a/BluetoothExplorer.swiftpm/Views/AttributeValueCell.swift b/BluetoothExplorer.swiftpm/Views/AttributeValueCell.swift index 6bd45ca..3f825bf 100644 --- a/BluetoothExplorer.swiftpm/Views/AttributeValueCell.swift +++ b/BluetoothExplorer.swiftpm/Views/AttributeValueCell.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 22/12/21. // +#if canImport(SwiftUI) import Foundation import Bluetooth import SwiftUI @@ -114,3 +115,4 @@ extension AttributeValueCell { ) } #endif +#endif diff --git a/BluetoothExplorer.swiftpm/Views/AttributeValuesSection.swift b/BluetoothExplorer.swiftpm/Views/AttributeValuesSection.swift index 74f1a32..591bb2e 100644 --- a/BluetoothExplorer.swiftpm/Views/AttributeValuesSection.swift +++ b/BluetoothExplorer.swiftpm/Views/AttributeValuesSection.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 22/12/21. // +#if canImport(SwiftUI) import Foundation import Bluetooth import SwiftUI @@ -100,3 +101,4 @@ struct AttributeValuesSection_Preview: PreviewProvider { } #endif */ +#endif diff --git a/BluetoothExplorer.swiftpm/Views/CentralCell.swift b/BluetoothExplorer.swiftpm/Views/CentralCell.swift index e62a2d9..5fed982 100644 --- a/BluetoothExplorer.swiftpm/Views/CentralCell.swift +++ b/BluetoothExplorer.swiftpm/Views/CentralCell.swift @@ -5,10 +5,8 @@ // Created by Alsey Coleman Miller on 18/12/21. // +#if canImport(SwiftUI) import SwiftUI -#if canImport(BluetoothExplorerModel) -import BluetoothExplorerModel -#endif public struct CentralCell: View { @@ -56,3 +54,4 @@ public struct CentralCell: View { .padding() } } +#endif diff --git a/BluetoothExplorer.swiftpm/Views/CentralList.swift b/BluetoothExplorer.swiftpm/Views/CentralList.swift index ca99e1a..677882d 100644 --- a/BluetoothExplorer.swiftpm/Views/CentralList.swift +++ b/BluetoothExplorer.swiftpm/Views/CentralList.swift @@ -6,10 +6,8 @@ // Copyright © 2019 Alsey Coleman Miller. All rights reserved. // +#if canImport(SwiftUI) import SwiftUI -#if canImport(BluetoothExplorerModel) -import BluetoothExplorerModel -#endif public struct CentralList: View { @@ -95,3 +93,4 @@ public struct CentralList: View { } } } +#endif diff --git a/BluetoothExplorer.swiftpm/Views/CharacteristicView.swift b/BluetoothExplorer.swiftpm/Views/CharacteristicView.swift index db28829..a9bbbd5 100644 --- a/BluetoothExplorer.swiftpm/Views/CharacteristicView.swift +++ b/BluetoothExplorer.swiftpm/Views/CharacteristicView.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 22/12/21. // +#if canImport(SwiftUI) import SwiftUI import Bluetooth import GATT @@ -267,3 +268,4 @@ struct CharacteristicView_Preview: PreviewProvider { } } #endif +#endif diff --git a/BluetoothExplorer.swiftpm/Views/DescriptorView.swift b/BluetoothExplorer.swiftpm/Views/DescriptorView.swift index 58f1cc9..26ebcf5 100644 --- a/BluetoothExplorer.swiftpm/Views/DescriptorView.swift +++ b/BluetoothExplorer.swiftpm/Views/DescriptorView.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 23/12/21. // +#if canImport(SwiftUI) import SwiftUI import Bluetooth import GATT @@ -202,3 +203,4 @@ struct DescriptorView_Preview: PreviewProvider { } #endif +#endif diff --git a/BluetoothExplorer.swiftpm/Views/PeripheralView.swift b/BluetoothExplorer.swiftpm/Views/PeripheralView.swift index 1ee8039..fe1ce7b 100644 --- a/BluetoothExplorer.swiftpm/Views/PeripheralView.swift +++ b/BluetoothExplorer.swiftpm/Views/PeripheralView.swift @@ -6,6 +6,7 @@ // Copyright © 2021 Alsey Coleman Miller. All rights reserved. // +#if canImport(SwiftUI) import SwiftUI import Bluetooth import GATT @@ -161,3 +162,4 @@ struct PeripheralView_Preview: PreviewProvider { } } #endif +#endif diff --git a/BluetoothExplorer.swiftpm/Views/ServiceView.swift b/BluetoothExplorer.swiftpm/Views/ServiceView.swift index 2b9b003..6c759eb 100644 --- a/BluetoothExplorer.swiftpm/Views/ServiceView.swift +++ b/BluetoothExplorer.swiftpm/Views/ServiceView.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 22/12/21. // +#if canImport(SwiftUI) import SwiftUI import Bluetooth import GATT @@ -143,3 +144,4 @@ struct ServiceView_Preview: PreviewProvider { } } #endif +#endif diff --git a/BluetoothExplorer.swiftpm/Views/WriteAttributeView.swift b/BluetoothExplorer.swiftpm/Views/WriteAttributeView.swift index 3d7a15b..d8963b0 100644 --- a/BluetoothExplorer.swiftpm/Views/WriteAttributeView.swift +++ b/BluetoothExplorer.swiftpm/Views/WriteAttributeView.swift @@ -5,6 +5,7 @@ // Created by Alsey Coleman Miller on 23/12/21. // +#if canImport(SwiftUI) import Foundation import SwiftUI import Bluetooth @@ -66,3 +67,4 @@ internal extension WriteAttributeView { return Data(hexadecimal: text) } } +#endif From 2df922b4e47712e18a002d9637ec43ef3cb60876 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 02:18:35 -0400 Subject: [PATCH 14/34] Update internal API --- .../Model/Mock/MockAdvertisement.swift | 20 ++++---- .../Model/Mock/MockAttributes.swift | 12 ++--- .../Model/Mock/MockCentral.swift | 48 +++++++++---------- .../Model/Mock/MockScanData.swift | 6 +-- .../Model/NativeCentral.swift | 8 ++-- 5 files changed, 48 insertions(+), 46 deletions(-) diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockAdvertisement.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockAdvertisement.swift index 94b8bf0..be3c573 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockAdvertisement.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockAdvertisement.swift @@ -12,28 +12,28 @@ import Bluetooth import GATT /// Mock Advertisement Data -public struct MockAdvertisementData: AdvertisementData { +internal struct MockAdvertisementData: AdvertisementData { /// The local name of a peripheral. - public let localName: String? + internal let localName: String? /// The Manufacturer data of a peripheral. - public let manufacturerData: ManufacturerSpecificData? + internal let manufacturerData: ManufacturerSpecificData? /// This value is available if the broadcaster (peripheral) provides its Tx power level in its advertising packet. /// Using the RSSI value and the Tx power level, it is possible to calculate path loss. - public let txPowerLevel: Double? + internal let txPowerLevel: Double? /// Service-specific advertisement data. - public let serviceData: [BluetoothUUID: Data]? + internal let serviceData: [BluetoothUUID: Data]? /// An array of service UUIDs - public let serviceUUIDs: [BluetoothUUID]? + internal let serviceUUIDs: [BluetoothUUID]? /// An array of one or more `BluetoothUUID`, representing Service UUIDs. - public let solicitedServiceUUIDs: [BluetoothUUID]? + internal let solicitedServiceUUIDs: [BluetoothUUID]? - public init( + internal init( localName: String? = nil, manufacturerData: ManufacturerSpecificData? = nil, txPowerLevel: Double? = nil, @@ -52,7 +52,7 @@ public struct MockAdvertisementData: AdvertisementData { extension MockAdvertisementData { - public static let beacon = MockAdvertisementData( + internal static let beacon = MockAdvertisementData( localName: nil, manufacturerData: ManufacturerSpecificData(data: Data([0x4c, 0x00, 0x02, 0x15, 0xb9, 0x40, 0x7f, 0x30, 0xf5, 0xf8, 0x46, 0x6e, 0xaf, 0xf9, 0x25, 0x55, 0x6b, 0x57, 0xfe, 0x6d, 0x29, 0x4c, 0x90, 0x39, 0x74])), txPowerLevel: nil, @@ -61,7 +61,7 @@ extension MockAdvertisementData { solicitedServiceUUIDs: nil ) - public static let smartThermostat = MockAdvertisementData( + internal static let smartThermostat = MockAdvertisementData( localName: "CLI-W200", manufacturerData: ManufacturerSpecificData(data: Data([0xd9, 0x01, 0x01, 0x02, 0x00, 0x00, 0x8c, 0x85, 0x90, 0xcb, 0x31, 0x74, 0x00, 0x60])), txPowerLevel: nil, diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockAttributes.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockAttributes.swift index 33bf6f0..3edfba1 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockAttributes.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockAttributes.swift @@ -9,11 +9,11 @@ import Bluetooth import GATT -public typealias MockService = GATT.Service -public typealias MockCharacteristic = GATT.Characteristic -public typealias MockDescriptor = GATT.Descriptor +internal typealias MockService = GATT.Service +internal typealias MockCharacteristic = GATT.Characteristic +internal typealias MockDescriptor = GATT.Descriptor -public extension MockService { +internal extension MockService { static var deviceInformation: MockService { Service( @@ -40,7 +40,7 @@ public extension MockService { } } -public extension MockCharacteristic { +internal extension MockCharacteristic { static var deviceName: MockCharacteristic { Characteristic( @@ -95,7 +95,7 @@ public extension MockCharacteristic { ) } -public extension MockDescriptor { +internal extension MockDescriptor { static func clientCharacteristicConfiguration(_ peripheral: Peripheral) -> MockDescriptor { Descriptor( diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift index 8bcc9f6..1f8513e 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockCentral.swift @@ -11,20 +11,20 @@ import Bluetooth import GATT @MainActor -public final class MockCentral: CentralManager, @unchecked Sendable { +final class MockCentral: CentralManager, @unchecked Sendable { /// Central Peripheral Type - public typealias Peripheral = GATT.Peripheral + typealias Peripheral = GATT.Peripheral /// Central Advertisement Type - public typealias Advertisement = MockAdvertisementData + internal typealias Advertisement = MockAdvertisementData /// Central Attribute ID (Handle) - public typealias AttributeID = UInt16 + internal typealias AttributeID = UInt16 - public nonisolated(unsafe) var log: (@Sendable (String) -> ())? + internal nonisolated(unsafe) var log: (@Sendable (String) -> ())? - public var peripherals: [GATT.Peripheral : Bool] { + internal var peripherals: [GATT.Peripheral : Bool] { get async { var peripherals = [Peripheral: Bool]() for scanData in state.scanData { @@ -34,7 +34,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } } - public var isEnabled: Bool { + internal var isEnabled: Bool { get async { state.isEnabled } @@ -44,7 +44,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { private var continuation = Continuation() - public init() { + internal init() { Task { try await Task.sleep(for: .seconds(1)) updateState { @@ -54,7 +54,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } /// Scans for peripherals that are advertising services. - public func scan( + internal func scan( with services: Set, filterDuplicates: Bool ) -> AsyncCentralScan { @@ -65,29 +65,29 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } } - public func scan( + internal func scan( filterDuplicates: Bool ) -> AsyncCentralScan { scan(with: [], filterDuplicates: filterDuplicates) } /// Connect to the specified device - public func connect(to peripheral: Peripheral) async throws { + internal func connect(to peripheral: Peripheral) async throws { state.connected.insert(peripheral) } /// Disconnect the specified device. - public func disconnect(_ peripheral: Peripheral) async { + internal func disconnect(_ peripheral: Peripheral) async { state.connected.remove(peripheral) } /// Disconnect all connected devices. - public func disconnectAll() { + internal func disconnectAll() { state.connected.removeAll() } /// Discover Services - public func discoverServices( + internal func discoverServices( _ services: Set = [], for peripheral: Peripheral ) async throws -> [Service] { @@ -97,7 +97,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { .sorted(by: { $0.id < $1.id }) } - public func discoverIncludedServices( + internal func discoverIncludedServices( _ services: Set = [], for service: Service ) async throws -> [Service] { @@ -105,7 +105,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } /// Discover Characteristics for service - public nonisolated func discoverCharacteristics( + internal nonisolated func discoverCharacteristics( _ characteristics: Set = [], for service: Service ) async throws -> [Characteristic] { @@ -120,7 +120,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } /// Read Characteristic Value - public nonisolated func readValue( + internal nonisolated func readValue( for characteristic: Characteristic ) async throws -> Data { guard await state.connected.contains(characteristic.peripheral) else { @@ -130,7 +130,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } /// Write Characteristic Value - public nonisolated func writeValue( + internal nonisolated func writeValue( _ data: Data, for characteristic: Characteristic, withResponse: Bool = true @@ -154,7 +154,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } /// Discover descriptors - public nonisolated func discoverDescriptors( + internal nonisolated func discoverDescriptors( for characteristic: Characteristic ) async throws -> [Descriptor] { guard await state.connected.contains(characteristic.peripheral) else { @@ -164,7 +164,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } /// Read descriptor - public nonisolated func readValue( + internal nonisolated func readValue( for descriptor: Descriptor ) async throws -> Data { guard await state.connected.contains(descriptor.peripheral) else { @@ -174,7 +174,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } /// Write descriptor - public nonisolated func writeValue( + internal nonisolated func writeValue( _ data: Data, for descriptor: Descriptor ) async throws { @@ -186,7 +186,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } } - public nonisolated func notify( + internal nonisolated func notify( for characteristic: GATT.Characteristic ) async throws -> AsyncCentralNotifications { guard await state.connected.contains(characteristic.peripheral) else { @@ -205,7 +205,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } /// Read MTU - public func maximumTransmissionUnit(for peripheral: Peripheral) async throws -> MaximumTransmissionUnit { + internal func maximumTransmissionUnit(for peripheral: Peripheral) async throws -> MaximumTransmissionUnit { guard state.connected.contains(peripheral) else { throw CentralError.disconnected } @@ -213,7 +213,7 @@ public final class MockCentral: CentralManager, @unchecked Sendable { } // Read RSSI - public func rssi(for peripheral: Peripheral) async throws -> RSSI { + internal func rssi(for peripheral: Peripheral) async throws -> RSSI { return .init(rawValue: 127)! } } diff --git a/BluetoothExplorer.swiftpm/Model/Mock/MockScanData.swift b/BluetoothExplorer.swiftpm/Model/Mock/MockScanData.swift index 5f2d9c9..28c6925 100644 --- a/BluetoothExplorer.swiftpm/Model/Mock/MockScanData.swift +++ b/BluetoothExplorer.swiftpm/Model/Mock/MockScanData.swift @@ -11,9 +11,9 @@ import Foundation import Bluetooth import GATT -public typealias MockScanData = ScanData +internal typealias MockScanData = ScanData -public extension MockScanData { +internal extension MockScanData { static let beacon = MockScanData( peripheral: .beacon, @@ -32,7 +32,7 @@ public extension MockScanData { ) } -public extension Peripheral { +internal extension Peripheral { static var beacon: Peripheral { Peripheral(id: BluetoothAddress(rawValue: "00:AA:AB:03:10:01")!) diff --git a/BluetoothExplorer.swiftpm/Model/NativeCentral.swift b/BluetoothExplorer.swiftpm/Model/NativeCentral.swift index 2c5b55d..9c79a08 100644 --- a/BluetoothExplorer.swiftpm/Model/NativeCentral.swift +++ b/BluetoothExplorer.swiftpm/Model/NativeCentral.swift @@ -13,10 +13,12 @@ import GATT import DarwinGATT #endif -#if os(Android) || os(iOS) && targetEnvironment(simulator) -public typealias NativeCentral = MockCentral +#if os(Android) +typealias NativeCentral = MockCentral +#elseif os(iOS) && targetEnvironment(simulator) +typealias NativeCentral = MockCentral #elseif canImport(Darwin) -public typealias NativeCentral = DarwinCentral +typealias NativeCentral = DarwinCentral #else #error("Platform not supported") #endif From ba5dc1b6ec2482beeae2f7d3a536605d029bc9c1 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 02:22:04 -0400 Subject: [PATCH 15/34] Ignore Finder files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2e9d231..ce0c66c 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ xcuserdata/ *.moved-aside *.xccheckout *.xcscmblueprint +*.DS_Store ## Obj-C/Swift specific *.hmap From 6f0c5def5fa71e0680b5e429382f1353ff3994b0 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 13 Jul 2025 02:22:31 -0400 Subject: [PATCH 16/34] Update Android app --- Android/.gitignore | 6 + Android/Package.swift | 36 ++ Android/app/.gitignore | 1 + Android/app/build.gradle.kts | 89 ++++ Android/app/proguard-rules.pro | 21 + .../swiftandroid/ExampleInstrumentedTest.kt | 24 ++ Android/app/src/main/AndroidManifest.xml | 33 ++ .../java/com/example/swift/HelloSubclass.java | 27 ++ .../java/com/example/swift/HelloSwift.java | 64 +++ .../java/com/example/swift/ThreadSafe.java | 22 + .../example/swift/ThreadSafeHelperClass.java | 41 ++ .../com/pureswift/swiftandroid/Application.kt | 29 ++ .../swiftandroid/EmbeddedAndroidViewDemo.kt | 63 +++ .../com/pureswift/swiftandroid/Fragment.kt | 24 ++ .../pureswift/swiftandroid/ListViewAdapter.kt | 14 + .../pureswift/swiftandroid/MainActivity.kt | 76 ++++ .../pureswift/swiftandroid/NativeLibrary.kt | 34 ++ ...NavigationBarViewOnItemSelectedListener.kt | 9 + .../swiftandroid/RecyclerViewAdapter.kt | 40 ++ .../com/pureswift/swiftandroid/Runnable.kt | 6 + .../com/pureswift/swiftandroid/SwiftObject.kt | 17 + .../com/pureswift/swiftandroid/UnitEmitter.kt | 15 + .../swiftandroid/ViewOnClickListener.kt | 8 + .../pureswift/swiftandroid/ui/theme/Color.kt | 11 + .../pureswift/swiftandroid/ui/theme/Theme.kt | 58 +++ .../pureswift/swiftandroid/ui/theme/Type.kt | 34 ++ .../res/drawable/ic_launcher_background.xml | 170 ++++++++ .../res/drawable/ic_launcher_foreground.xml | 30 ++ Android/app/src/main/res/layout/list_item.xml | 6 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 + .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes Android/app/src/main/res/values/colors.xml | 10 + Android/app/src/main/res/values/strings.xml | 3 + Android/app/src/main/res/values/themes.xml | 5 + Android/app/src/main/res/xml/backup_rules.xml | 13 + .../main/res/xml/data_extraction_rules.xml | 19 + Android/app/src/main/swift/Application.swift | 74 ++++ Android/app/src/main/swift/Fragment.swift | 86 ++++ .../app/src/main/swift/HelloSubclass.swift | 16 + Android/app/src/main/swift/HelloSwift.swift | 46 +++ .../app/src/main/swift/JavaKitExample.swift | 115 ++++++ .../src/main/swift/JavaRetainedValue.swift | 89 ++++ .../app/src/main/swift/ListViewAdapter.swift | 85 ++++ Android/app/src/main/swift/MainActivity.swift | 383 ++++++++++++++++++ ...igationBarViewOnItemSelectedListener.swift | 76 ++++ .../app/src/main/swift/OnClickListener.swift | 74 ++++ Android/app/src/main/swift/RecyclerView.swift | 107 +++++ Android/app/src/main/swift/Runnable.swift | 50 +++ .../main/swift/ThreadSafeHelperClass.swift | 54 +++ Android/app/src/main/swift/UnitEmitter.swift | 19 + .../pureswift/swiftandroid/ExampleUnitTest.kt | 17 + Android/build-swift.sh | 11 + Android/build.gradle.kts | 6 + Android/gradle.properties | 23 ++ Android/gradle/libs.versions.toml | 38 ++ .../gradle/wrapper/gradle-wrapper.properties | 6 + Android/gradlew | 185 +++++++++ Android/gradlew.bat | 89 ++++ Android/local.properties | 10 + Android/settings.gradle.kts | 23 ++ Android/setup.sh | 22 + Android/swift-define | 24 ++ 72 files changed, 2798 insertions(+) create mode 100644 Android/.gitignore create mode 100644 Android/Package.swift create mode 100644 Android/app/.gitignore create mode 100644 Android/app/build.gradle.kts create mode 100644 Android/app/proguard-rules.pro create mode 100644 Android/app/src/androidTest/java/com/pureswift/swiftandroid/ExampleInstrumentedTest.kt create mode 100644 Android/app/src/main/AndroidManifest.xml create mode 100644 Android/app/src/main/java/com/example/swift/HelloSubclass.java create mode 100644 Android/app/src/main/java/com/example/swift/HelloSwift.java create mode 100644 Android/app/src/main/java/com/example/swift/ThreadSafe.java create mode 100644 Android/app/src/main/java/com/example/swift/ThreadSafeHelperClass.java create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/Application.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/EmbeddedAndroidViewDemo.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/Fragment.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/ListViewAdapter.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/MainActivity.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/NativeLibrary.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/NavigationBarViewOnItemSelectedListener.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/RecyclerViewAdapter.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/Runnable.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/SwiftObject.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/UnitEmitter.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/ViewOnClickListener.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Color.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Theme.kt create mode 100644 Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Type.kt create mode 100644 Android/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 Android/app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 Android/app/src/main/res/layout/list_item.xml create mode 100644 Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 Android/app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 Android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 Android/app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 Android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 Android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 Android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 Android/app/src/main/res/values/colors.xml create mode 100644 Android/app/src/main/res/values/strings.xml create mode 100644 Android/app/src/main/res/values/themes.xml create mode 100644 Android/app/src/main/res/xml/backup_rules.xml create mode 100644 Android/app/src/main/res/xml/data_extraction_rules.xml create mode 100644 Android/app/src/main/swift/Application.swift create mode 100644 Android/app/src/main/swift/Fragment.swift create mode 100644 Android/app/src/main/swift/HelloSubclass.swift create mode 100644 Android/app/src/main/swift/HelloSwift.swift create mode 100644 Android/app/src/main/swift/JavaKitExample.swift create mode 100644 Android/app/src/main/swift/JavaRetainedValue.swift create mode 100644 Android/app/src/main/swift/ListViewAdapter.swift create mode 100644 Android/app/src/main/swift/MainActivity.swift create mode 100644 Android/app/src/main/swift/NavigationBarViewOnItemSelectedListener.swift create mode 100644 Android/app/src/main/swift/OnClickListener.swift create mode 100644 Android/app/src/main/swift/RecyclerView.swift create mode 100644 Android/app/src/main/swift/Runnable.swift create mode 100644 Android/app/src/main/swift/ThreadSafeHelperClass.swift create mode 100644 Android/app/src/main/swift/UnitEmitter.swift create mode 100644 Android/app/src/test/java/com/pureswift/swiftandroid/ExampleUnitTest.kt create mode 100755 Android/build-swift.sh create mode 100644 Android/build.gradle.kts create mode 100644 Android/gradle.properties create mode 100644 Android/gradle/libs.versions.toml create mode 100644 Android/gradle/wrapper/gradle-wrapper.properties create mode 100755 Android/gradlew create mode 100644 Android/gradlew.bat create mode 100644 Android/local.properties create mode 100644 Android/settings.gradle.kts create mode 100755 Android/setup.sh create mode 100644 Android/swift-define diff --git a/Android/.gitignore b/Android/.gitignore new file mode 100644 index 0000000..10cf596 --- /dev/null +++ b/Android/.gitignore @@ -0,0 +1,6 @@ +.build +.swiftpm +.idea +.gradle +*.so +*.jar diff --git a/Android/Package.swift b/Android/Package.swift new file mode 100644 index 0000000..c034025 --- /dev/null +++ b/Android/Package.swift @@ -0,0 +1,36 @@ +// swift-tools-version: 6.1 +import PackageDescription + +let package = Package( + name: "SwiftAndroidApp", + platforms: [ + .macOS(.v15), + ], + products: [ + .library( + name: "SwiftAndroidApp", + type: .dynamic, + targets: ["SwiftAndroidApp"] + ), + ], + dependencies: [ + .package( + path: "../" + ) + ], + targets: [ + .target( + name: "SwiftAndroidApp", + dependencies: [ + .product( + name: "AndroidKit", + package: "Android" + ) + ], + path: "./app/src/main/swift", + swiftSettings: [ + .swiftLanguageMode(.v5) + ] + ) + ] +) diff --git a/Android/app/.gitignore b/Android/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/Android/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/Android/app/build.gradle.kts b/Android/app/build.gradle.kts new file mode 100644 index 0000000..0fb11be --- /dev/null +++ b/Android/app/build.gradle.kts @@ -0,0 +1,89 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) +} + +android { + namespace = "com.pureswift.swiftandroid" + compileSdk = 35 + + defaultConfig { + applicationId = "com.pureswift.swiftandroid" + minSdk = 29 + targetSdk = 35 + versionCode = 1 + versionName = "1.0" + ndk { + //noinspection ChromeOsAbiSupport + abiFilters += listOf("arm64-v8a") + } + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = "11" + } + buildFeatures { + compose = true + } + packaging { + resources { + excludes += listOf("/META-INF/{AL2.0,LGPL2.1}") + } + jniLibs { + keepDebugSymbols += listOf( + "*/arm64-v8a/*.so", + "*/armeabi-v7a/*.so", + "*/x86_64/*.so" + ) + } + } +/* + // Custom Swift build task + val buildSwift by tasks.registering(Exec::class) { + group = "build" + description = "Build Swift sources" + workingDir("$projectDir") + commandLine("bash", "build-swift.sh") + } + + tasks.withType { + dependsOn(buildSwift) + }*/ +} + +dependencies { + + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.activity.compose) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.ui) + implementation(libs.androidx.ui.graphics) + implementation(libs.androidx.ui.tooling.preview) + implementation(libs.androidx.recyclerview) + implementation(libs.androidx.navigation.runtime) + implementation(libs.androidx.material3) + implementation(libs.material) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(libs.androidx.ui.test.junit4) + debugImplementation(libs.androidx.ui.tooling) + debugImplementation(libs.androidx.ui.test.manifest) +} \ No newline at end of file diff --git a/Android/app/proguard-rules.pro b/Android/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/Android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/Android/app/src/androidTest/java/com/pureswift/swiftandroid/ExampleInstrumentedTest.kt b/Android/app/src/androidTest/java/com/pureswift/swiftandroid/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..0b3aecb --- /dev/null +++ b/Android/app/src/androidTest/java/com/pureswift/swiftandroid/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.pureswift.swiftandroid + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.pureswift.swiftandroid", appContext.packageName) + } +} \ No newline at end of file diff --git a/Android/app/src/main/AndroidManifest.xml b/Android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..b361577 --- /dev/null +++ b/Android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/app/src/main/java/com/example/swift/HelloSubclass.java b/Android/app/src/main/java/com/example/swift/HelloSubclass.java new file mode 100644 index 0000000..2312d8f --- /dev/null +++ b/Android/app/src/main/java/com/example/swift/HelloSubclass.java @@ -0,0 +1,27 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift.org project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of Swift.org project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +package com.example.swift; + +public class HelloSubclass extends HelloSwift { + private String greeting; + + public HelloSubclass(String greeting) { + this.greeting = greeting; + } + + public void greetMe() { + super.greet(greeting); + } +} diff --git a/Android/app/src/main/java/com/example/swift/HelloSwift.java b/Android/app/src/main/java/com/example/swift/HelloSwift.java new file mode 100644 index 0000000..5a1ba2e --- /dev/null +++ b/Android/app/src/main/java/com/example/swift/HelloSwift.java @@ -0,0 +1,64 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift.org project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of Swift.org project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +package com.example.swift; + +import java.util.function.Predicate; + +public class HelloSwift { + public double value; + public static double initialValue = 3.14159; + public String name = "Java"; + + static { + System.loadLibrary("SwiftAndroidApp"); + } + + public HelloSwift() { + this.value = initialValue; + } + + public native int sayHello(int x, int y); + public native String throwMessageFromSwift(String message) throws Exception; + + // To be called back by the native code + public double sayHelloBack(int i) { + System.out.println("And hello back from " + name + "! You passed me " + i); + return value; + } + + public void greet(String name) { + System.out.println("Salutations, " + name); + } + + public Predicate lessThanTen() { + Predicate predicate = i -> (i < 10); + return predicate; + } + + public String[] doublesToStrings(double[] doubles) { + int size = doubles.length; + String[] strings = new String[size]; + + for(int i = 0; i < size; i++) { + strings[i] = "" + doubles[i]; + } + + return strings; + } + + public void throwMessage(String message) throws Exception { + throw new Exception(message); + } +} diff --git a/Android/app/src/main/java/com/example/swift/ThreadSafe.java b/Android/app/src/main/java/com/example/swift/ThreadSafe.java new file mode 100644 index 0000000..2b1b358 --- /dev/null +++ b/Android/app/src/main/java/com/example/swift/ThreadSafe.java @@ -0,0 +1,22 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift.org project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of Swift.org project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +package com.example.swift; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) +public @interface ThreadSafe { +} diff --git a/Android/app/src/main/java/com/example/swift/ThreadSafeHelperClass.java b/Android/app/src/main/java/com/example/swift/ThreadSafeHelperClass.java new file mode 100644 index 0000000..3b7793f --- /dev/null +++ b/Android/app/src/main/java/com/example/swift/ThreadSafeHelperClass.java @@ -0,0 +1,41 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift.org project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of Swift.org project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +package com.example.swift; + +import java.util.Optional; +import java.util.OptionalLong; +import java.util.OptionalInt; +import java.util.OptionalDouble; + +@ThreadSafe +public class ThreadSafeHelperClass { + public ThreadSafeHelperClass() { } + + public Optional text = Optional.of(""); + + public final OptionalDouble val = OptionalDouble.of(2); + + public String getValue(Optional name) { + return name.orElse(""); + } + + public Optional getText() { + return text; + } + + public OptionalLong from(OptionalInt value) { + return OptionalLong.of(value.getAsInt()); + } +} diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/Application.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/Application.kt new file mode 100644 index 0000000..4075c97 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/Application.kt @@ -0,0 +1,29 @@ +package com.pureswift.swiftandroid + +import com.example.swift.HelloSubclass + +class Application: android.app.Application() { + + init { + NativeLibrary.shared() + } + + override fun onCreate() { + super.onCreate() + onCreateSwift() + } + + private external fun onCreateSwift() + + override fun onTerminate() { + super.onTerminate() + onTerminateSwift() + } + + private external fun onTerminateSwift() + + fun sayHello() { + val result = HelloSubclass("Swift").sayHello(17, 25) + println("sayHello(17, 25) = $result") + } +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/EmbeddedAndroidViewDemo.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/EmbeddedAndroidViewDemo.kt new file mode 100644 index 0000000..5b20617 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/EmbeddedAndroidViewDemo.kt @@ -0,0 +1,63 @@ +package com.pureswift.swiftandroid + +import android.view.ViewGroup.LayoutParams.MATCH_PARENT +import android.view.ViewGroup.LayoutParams.WRAP_CONTENT +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.material3.Text +import androidx.compose.material3.Button +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.content.ContextCompat + +@Preview(showBackground = true) +@Composable +fun EmbeddedAndroidViewDemo() { + Column { + val state = remember { mutableIntStateOf(0) } + + //widget.ImageView + AndroidView(factory = { ctx -> + ImageView(ctx).apply { + val drawable = ContextCompat.getDrawable(ctx, R.drawable.ic_launcher_foreground) + setImageDrawable(drawable) + } + }) + + //Compose Button + Button(onClick = { state.value++ }) { + Text("MyComposeButton") + } + + //widget.Button + AndroidView(factory = { ctx -> + //Here you can construct your View + android.widget.Button(ctx).apply { + text = "MyAndroidButton" + layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT) + setOnClickListener { + state.value++ + } + } + }, modifier = Modifier.padding(8.dp)) + + //widget.TextView + AndroidView(factory = { ctx -> + //Here you can construct your View + TextView(ctx).apply { + layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT) + } + }, update = { + it.text = "You have clicked the buttons: " + state.value.toString() + " times" + }) + } +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/Fragment.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/Fragment.kt new file mode 100644 index 0000000..26a6c39 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/Fragment.kt @@ -0,0 +1,24 @@ +package com.pureswift.swiftandroid + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout + +class Fragment(val swiftObject: SwiftObject): android.app.Fragment() { + + @Deprecated("Deprecated in Java") + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + val context = this.context + checkNotNull(context) + val linearLayout = LinearLayout(context) + return linearLayout + } + + external override fun onViewCreated(view: View, savedInstanceState: Bundle?) +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/ListViewAdapter.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/ListViewAdapter.kt new file mode 100644 index 0000000..722b2b0 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/ListViewAdapter.kt @@ -0,0 +1,14 @@ +package com.pureswift.swiftandroid + +import android.R +import android.content.Context +import android.view.View +import android.view.ViewGroup +import android.widget.ArrayAdapter +import androidx.recyclerview.widget.RecyclerView + +class ListViewAdapter(context: Context, val swiftObject: SwiftObject, val objects: ArrayList) : + ArrayAdapter(context, 0, objects) { + + external override fun getView(position: Int, convertView: View?, parent: ViewGroup): View +} diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/MainActivity.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/MainActivity.kt new file mode 100644 index 0000000..249104b --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/MainActivity.kt @@ -0,0 +1,76 @@ +package com.pureswift.swiftandroid + +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import java.util.Date + +class MainActivity : ComponentActivity() { + + init { + NativeLibrary.shared() + } + + val emitter = UnitEmitter() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + onCreateSwift(savedInstanceState) + //enableEdgeToEdge() + + // set composable root view + setContent { + EventReceiver(emitter = emitter) + } + } + + external fun onCreateSwift(savedInstanceState: Bundle?) + + fun setRootView(view: View) { + Log.d("MainActivity", "AndroidSwiftUI.MainActivity.setRootView(_:)") + setContentView(view) + } +} + +@Composable +fun EventReceiver(emitter: UnitEmitter) { + + val tick by emitter.flow.collectAsState(initial = Unit) + + var date by remember { mutableStateOf(Date()) } + + LaunchedEffect(Unit) { + emitter.flow.collect { + date = Date() + } + } + + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Column( + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text("Hello Swift!") + Text(date.toString()) + } + } +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/NativeLibrary.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/NativeLibrary.kt new file mode 100644 index 0000000..da59d15 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/NativeLibrary.kt @@ -0,0 +1,34 @@ +package com.pureswift.swiftandroid + +import android.util.Log + +class NativeLibrary private constructor() { + + companion object { + + @Volatile + var shared : NativeLibrary? = null + + fun shared(): NativeLibrary { + return shared?: synchronized(this){ + val instance = NativeLibrary() + shared = instance + return instance + } + } + } + + init { + loadNativeLibrary() + } + + private fun loadNativeLibrary() { + try { + System.loadLibrary("SwiftAndroidApp") + } catch (error: UnsatisfiedLinkError) { + Log.e("NativeLibrary", "Unable to load native libraries: $error") + return + } + Log.d("NativeLibrary", "Loaded Swift library") + } +} diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/NavigationBarViewOnItemSelectedListener.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/NavigationBarViewOnItemSelectedListener.kt new file mode 100644 index 0000000..cf8014f --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/NavigationBarViewOnItemSelectedListener.kt @@ -0,0 +1,9 @@ +package com.pureswift.swiftandroid + +import android.view.MenuItem +import com.google.android.material.navigation.NavigationBarView + +class NavigationBarViewOnItemSelectedListener(val action: SwiftObject): NavigationBarView.OnItemSelectedListener { + + external override fun onNavigationItemSelected(menuItem: MenuItem): Boolean +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/RecyclerViewAdapter.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/RecyclerViewAdapter.kt new file mode 100644 index 0000000..d11648d --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/RecyclerViewAdapter.kt @@ -0,0 +1,40 @@ +package com.pureswift.swiftandroid + +import android.util.Log +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.ViewHolder + +class RecyclerViewAdapter(val swiftObject: SwiftObject) : + RecyclerView.Adapter() { + + class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { + + } + + // Create new views (invoked by the layout manager) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewAdapter.ViewHolder { + Log.d("RecyclerViewAdapter", "SwiftAndroidApp.RecyclerViewAdapter.onCreateViewHolderSwift(_:_:) $viewType") + val view = LinearLayout(parent.context) + val viewHolder = ViewHolder(view) + checkNotNull(viewHolder) + checkNotNull(viewHolder.itemView) + return viewHolder + } + + // Replace the contents of a view (invoked by the layout manager) + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + onBindViewHolderSwift(holder as RecyclerViewAdapter.ViewHolder, position) + } + + external fun onBindViewHolderSwift(holder: RecyclerViewAdapter.ViewHolder, position: Int) + + // Return the size of your dataset (invoked by the layout manager) + override fun getItemCount(): Int { + return getItemCountSwift() + } + + external fun getItemCountSwift(): Int +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/Runnable.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/Runnable.kt new file mode 100644 index 0000000..08a0987 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/Runnable.kt @@ -0,0 +1,6 @@ +package com.pureswift.swiftandroid + +class Runnable(val block: SwiftObject): java.lang.Runnable { + + external override fun run() +} diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/SwiftObject.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/SwiftObject.kt new file mode 100644 index 0000000..94ff2db --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/SwiftObject.kt @@ -0,0 +1,17 @@ +package com.pureswift.swiftandroid + +/// Swift object retained by JVM +class SwiftObject(val swiftObject: Long, val type: String) { + + override fun toString(): String { + return toStringSwift() + } + + external fun toStringSwift(): String + + fun finalize() { + finalizeSwift() + } + + external fun finalizeSwift() +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/UnitEmitter.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/UnitEmitter.kt new file mode 100644 index 0000000..93af004 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/UnitEmitter.kt @@ -0,0 +1,15 @@ +package com.pureswift.swiftandroid + +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.SharedFlow + +class UnitEmitter() { + + private val _flow = MutableSharedFlow(extraBufferCapacity = 64) + val flow: SharedFlow get() = _flow + + fun emit() { + //println("Emit") + _flow.tryEmit(Unit) + } +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/ViewOnClickListener.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/ViewOnClickListener.kt new file mode 100644 index 0000000..39b5ce3 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/ViewOnClickListener.kt @@ -0,0 +1,8 @@ +package com.pureswift.swiftandroid + +import android.view.View + +class ViewOnClickListener(val action: SwiftObject): View.OnClickListener { + + external override fun onClick(view: View) +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Color.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Color.kt new file mode 100644 index 0000000..4a8371b --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Color.kt @@ -0,0 +1,11 @@ +package com.pureswift.swiftandroid.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Theme.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Theme.kt new file mode 100644 index 0000000..47f8f81 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Theme.kt @@ -0,0 +1,58 @@ +package com.pureswift.swiftandroid.ui.theme + +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40 + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun SwiftAndroidTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Type.kt b/Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Type.kt new file mode 100644 index 0000000..4de94b7 --- /dev/null +++ b/Android/app/src/main/java/com/pureswift/swiftandroid/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.pureswift.swiftandroid.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/Android/app/src/main/res/drawable/ic_launcher_background.xml b/Android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/Android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Android/app/src/main/res/drawable/ic_launcher_foreground.xml b/Android/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/Android/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Android/app/src/main/res/layout/list_item.xml b/Android/app/src/main/res/layout/list_item.xml new file mode 100644 index 0000000..eaf5504 --- /dev/null +++ b/Android/app/src/main/res/layout/list_item.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/Android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/Android/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..c209e78ecd372343283f4157dcfd918ec5165bb3 GIT binary patch literal 1404 zcmV-?1%vuhNk&F=1pok7MM6+kP&il$0000G0000-002h-06|PpNX!5L00Dqw+t%{r zzW2vH!KF=w&cMnnN@{whkTw+#mAh0SV?YL=)3MimFYCWp#fpdtz~8$hD5VPuQgtcN zXl<@<#Cme5f5yr2h%@8TWh?)bSK`O z^Z@d={gn7J{iyxL_y_%J|L>ep{dUxUP8a{byupH&!UNR*OutO~0{*T4q5R6@ApLF! z5{w?Z150gC7#>(VHFJZ-^6O@PYp{t!jH(_Z*nzTK4 zkc{fLE4Q3|mA2`CWQ3{8;gxGizgM!zccbdQoOLZc8hThi-IhN90RFT|zlxh3Ty&VG z?Fe{#9RrRnxzsu|Lg2ddugg7k%>0JeD+{XZ7>Z~{=|M+sh1MF7~ zz>To~`~LVQe1nNoR-gEzkpe{Ak^7{{ZBk2i_<+`Bq<^GB!RYG+z)h;Y3+<{zlMUYd zrd*W4w&jZ0%kBuDZ1EW&KLpyR7r2=}fF2%0VwHM4pUs}ZI2egi#DRMYZPek*^H9YK zay4Iy3WXFG(F14xYsoDA|KXgGc5%2DhmQ1gFCkrgHBm!lXG8I5h*uf{rn48Z!_@ z4Bk6TJAB2CKYqPjiX&mWoW>OPFGd$wqroa($ne7EUK;#3VYkXaew%Kh^3OrMhtjYN?XEoY`tRPQsAkH-DSL^QqyN0>^ zmC>{#F14jz4GeW{pJoRpLFa_*GI{?T93^rX7SPQgT@LbLqpNA}<@2wH;q493)G=1Y z#-sCiRNX~qf3KgiFzB3I>4Z%AfS(3$`-aMIBU+6?gbgDb!)L~A)je+;fR0jWLL-Fu z4)P{c7{B4Hp91&%??2$v9iRSFnuckHUm}or9seH6 z>%NbT+5*@L5(I9j@06@(!{ZI?U0=pKn8uwIg&L{JV14+8s2hnvbRrU|hZCd}IJu7*;;ECgO%8_*W Kmw_-CKmY()leWbG literal 0 HcmV?d00001 diff --git a/Android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/Android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..b2dfe3d1ba5cf3ee31b3ecc1ced89044a1f3b7a9 GIT binary patch literal 2898 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 literal 0 HcmV?d00001 diff --git a/Android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/Android/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..4f0f1d64e58ba64d180ce43ee13bf9a17835fbca GIT binary patch literal 982 zcmV;{11bDcNk&G_0{{S5MM6+kP&il$0000G0000l001ul06|PpNU8t;00Dqo+t#w^ z^1csucXz7-Qrhzl9HuHB%l>&>1tG2^vb*E&k^T3$FG1eQZ51g$uv4V+kI`0<^1Z@N zk?Jjh$olyC%l>)Xq;7!>{iBj&BjJ`P&$fsCfpve_epJOBkTF?nu-B7D!hO=2ZR}

C%4 zc_9eOXvPbC4kzU8YowIA8cW~Uv|eB&yYwAObSwL2vY~UYI7NXPvf3b+c^?wcs~_t{ ze_m66-0)^{JdOMKPwjpQ@Sna!*?$wTZ~su*tNv7o!gXT!GRgivP}ec?5>l1!7<(rT zds|8x(qGc673zrvYIz;J23FG{9nHMnAuP}NpAED^laz3mAN1sy+NXK)!6v1FxQ;lh zOBLA>$~P3r4b*NcqR;y6pwyhZ3_PiDb|%n1gGjl3ZU}ujInlP{eks-#oA6>rh&g+!f`hv#_%JrgYPu z(U^&XLW^QX7F9Z*SRPpQl{B%x)_AMp^}_v~?j7 zapvHMKxSf*Mtyx8I}-<*UGn3)oHd(nn=)BZ`d$lDBwq_GL($_TPaS{UeevT(AJ`p0 z9%+hQb6z)U9qjbuXjg|dExCLjpS8$VKQ55VsIC%@{N5t{NsW)=hNGI`J=x97_kbz@ E0Of=7!TQj4N+cqN`nQhxvX7dAV-`K|Ub$-q+H-5I?Tx0g9jWxd@A|?POE8`3b8fO$T))xP* z(X?&brZw({`)WU&rdAs1iTa0x6F@PIxJ&&L|dpySV!ID|iUhjCcKz(@mE z!x@~W#3H<)4Ae(4eQJRk`Iz3<1)6^m)0b_4_TRZ+cz#eD3f8V;2r-1fE!F}W zEi0MEkTTx}8i1{`l_6vo0(Vuh0HD$I4SjZ=?^?k82R51bC)2D_{y8mi_?X^=U?2|F{Vr7s!k(AZC$O#ZMyavHhlQ7 zUR~QXuH~#o#>(b$u4?s~HLF*3IcF7023AlwAYudn0FV~|odGH^05AYPEfR)8p`i{n zwg3zPVp{+wOsxKc>)(pMupKF!Y2HoUqQ3|Yu|8lwR=?5zZuhG6J?H`bSNk_wPoM{u zSL{c@pY7+c2kck>`^q1^^gR0QB7Y?KUD{vz-uVX~;V-rW)PDcI)$_UjgVV?S?=oLR zf4}zz{#*R_{LkiJ#0RdQLNC^2Vp%JPEUvG9ra2BVZ92(p9h7Ka@!yf9(lj#}>+|u* z;^_?KWdzkM`6gqPo9;;r6&JEa)}R3X{(CWv?NvgLeOTq$cZXqf7|sPImi-7cS8DCN zGf;DVt3Am`>hH3{4-WzH43Ftx)SofNe^-#|0HdCo<+8Qs!}TZP{HH8~z5n`ExcHuT zDL1m&|DVpIy=xsLO>8k92HcmfSKhflQ0H~9=^-{#!I1g(;+44xw~=* zxvNz35vfsQE)@)Zsp*6_GjYD};Squ83<_?^SbALb{a`j<0Gn%6JY!zhp=Fg}Ga2|8 z52e1WU%^L1}15Ex0fF$e@eCT(()_P zvV?CA%#Sy08_U6VPt4EtmVQraWJX` zh=N|WQ>LgrvF~R&qOfB$!%D3cGv?;Xh_z$z7k&s4N)$WYf*k=|*jCEkO19{h_(%W4 zPuOqbCw`SeAX*R}UUsbVsgtuG?xs(#Ikx9`JZoQFz0n*7ZG@Fv@kZk`gzO$HoA9kN z8U5{-yY zvV{`&WKU2$mZeoBmiJrEdzUZAv1sRxpePdg1)F*X^Y)zp^Y*R;;z~vOv-z&)&G)JQ{m!C9cmziu1^nHA z`#`0c>@PnQ9CJKgC5NjJD8HM3|KC(g5nnCq$n0Gsu_DXk36@ql%npEye|?%RmG)

FJ$wK}0tWNB{uH;AM~i literal 0 HcmV?d00001 diff --git a/Android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/Android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..948a3070fe34c611c42c0d3ad3013a0dce358be0 GIT binary patch literal 1900 zcmV-y2b1_xNk&Fw2LJ$9MM6+kP&il$0000G0001A003VA06|PpNH75a00DqwTbm-~ zullQTcXxO9ki!OCRx^i?oR|n!<8G0=kI^!JSjFi-LL*`V;ET0H2IXfU0*i>o6o6Gy zRq6Ap5(_{XLdXcL-MzlN`ugSdZY_`jXhcENAu)N_0?GhF))9R;E`!bo9p?g?SRgw_ zEXHhFG$0{qYOqhdX<(wE4N@es3VIo$%il%6xP9gjiBri+2pI6aY4 zJbgh-Ud|V%3O!IcHKQx1FQH(_*TK;1>FQWbt^$K1zNn^cczkBs=QHCYZ8b&l!UV{K z{L0$KCf_&KR^}&2Fe|L&?1I7~pBENnCtCuH3sjcx6$c zwqkNkru);ie``q+_QI;IYLD9OV0ZxkuyBz|5<$1BH|vtey$> z5oto4=l-R-Aaq`Dk0}o9N0VrkqW_#;!u{!bJLDq%0092{Ghe=F;(kn} z+sQ@1=UlX30+2nWjkL$B^b!H2^QYO@iFc0{(-~yXj2TWz?VG{v`Jg zg}WyYnwGgn>{HFaG7E~pt=)sOO}*yd(UU-D(E&x{xKEl6OcU?pl)K%#U$dn1mDF19 zSw@l8G!GNFB3c3VVK0?uyqN&utT-D5%NM4g-3@Sii9tSXKtwce~uF zS&Jn746EW^wV~8zdQ1XC28~kXu8+Yo9p!<8h&(Q({J*4DBglPdpe4M_mD8AguZFn~ ztiuO~{6Bx?SfO~_ZV(GIboeR9~hAym{{fV|VM=77MxDrbW6`ujX z<3HF(>Zr;#*uCvC*bpoSr~C$h?_%nXps@A)=l_;({Fo#6Y1+Zv`!T5HB+)#^-Ud_; zBwftPN=d8Vx)*O1Mj+0oO=mZ+NVH*ptNDC-&zZ7Hwho6UQ#l-yNvc0Cm+2$$6YUk2D2t#vdZX-u3>-Be1u9gtTBiMB^xwWQ_rgvGpZ6(C@e23c!^K=>ai-Rqu zhqT`ZQof;9Bu!AD(i^PCbYV%yha9zuoKMp`U^z;3!+&d@Hud&_iy!O-$b9ZLcSRh? z)R|826w}TU!J#X6P%@Zh=La$I6zXa#h!B;{qfug}O%z@K{EZECu6zl)7CiNi%xti0 zB{OKfAj83~iJvmpTU|&q1^?^cIMn2RQ?jeSB95l}{DrEPTW{_gmU_pqTc)h@4T>~& zluq3)GM=xa(#^VU5}@FNqpc$?#SbVsX!~RH*5p0p@w z;~v{QMX0^bFT1!cXGM8K9FP+=9~-d~#TK#ZE{4umGT=;dfvWi?rYj;^l_Zxywze`W z^Cr{55U@*BalS}K%Czii_80e0#0#Zkhlij4-~I@}`-JFJ7$5{>LnoJSs??J8kWVl6|8A}RCGAu9^rAsfCE=2}tHwl93t0C?#+jMpvr7O3`2=tr{Hg$=HlnjVG^ewm|Js0J*kfPa6*GhtB>`fN!m#9J(sU!?(OSfzY*zS(FJ<-Vb zfAIg+`U)YaXv#sY(c--|X zEB+TVyZ%Ie4L$gi#Fc++`h6%vzsS$pjz9aLt+ZL(g;n$Dzy5=m=_TV(3H8^C{r0xd zp#a%}ht55dOq?yhwYPrtp-m1xXp;4X;)NhxxUpgP%XTLmO zcjaFva^}dP3$&sfFTIR_jC=2pHh9kpI@2(6V*GQo7Ws)`j)hd+tr@P~gR*2gO@+1? zG<`_tB+LJuF|SZ9tIec;h%}}6WClT`L>HSW?E{Hp1h^+mlbf_$9zA>!ug>NALJsO{ mU%z=YwVD?}XMya)Bp;vlyE5&E_6!fzx9pwrdz474!~g(M6R?N? literal 0 HcmV?d00001 diff --git a/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..1b9a6956b3acdc11f40ce2bb3f6efbd845cc243f GIT binary patch literal 3918 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�(p-{x$&=IACIfoAR!za)F-^da-t3#0Dycnp zwO~NVXwXCl;jE<}>%@xz|=8fIJAB?>+E{7)|4l${4ngA3G|=r z2Dyv;VVWSgZx9Wj>qUjleGl3Ei9K4>h!(lPS%8VOG>Xu0%6VDz^O=bjJmuP7>DeUv zrbI}MlHB^^d?{zv6d=@_ZD2lg1&G7UjnVN{1}9WkaM3H~btX0GtSzB+tZ^qRgWo4m z!GmimlG$=wgXCnr6j@m<1gAL46#T~5Bnm=2{^@>|t&`9mkEPddj zAvG~@Tv~TAm2i%VW}R-g(Z0)z-Y|szHr@rk>4MAyG*Ma*7Yh#H7(!-5>DZ@8r;_dx z{prSe<>~099F8vsYd2xff7uAS%7{S)f(|@me3t2$iy&NEc7OUEchp@9A|X;;IA>8!oX+y(BKJ$EzV* znR$z;!L$s7uy@{OT~nG#B!NRraT8(X##Ho!0r_o@gg0CA-9H^;-uE&?$2$nHv_00o z%cbuUc-tCx$Uh&EZ4Nf4Zgqv)Y6>usG3>GeQnxx_Z6+PcbX-+ysbt1hQ`K1LDpOE? zrAhIZhSN9yVIAOa22gn577tbc&i3|3V8NWy&!tw##`}9*x}gtI^h1DzZRA>UuaJG) zaZ7j)dq!O}{?#8Y7~7i6fHh4{`pL?>-18|p!S75Y#^DM>-S3)vuZG+Q7l@ek zQP~#cBpWgg#mApc_sPYjpw8odQuRokmTkzcNl`^CcKB7e&;zViV;{Y{o^Y$%7i0m# z62%#1Lq!RC?}lK>%mp}T!3Xv;L*0v*>USLm``N%>w>@fwC+#T&Tx2bN4w(20JB}oU zuSa6v^kXi0xPs?pbaOHnyiqq6By1EZY9OZ^^QA>{q-Hsd&m`pbQ%8121aWG-F5xf zlZ%;B{;C>X19|`^_?dVyCq>n+41w7|!tUS!{9rHlbhX=SZO5CQ^;!Du_E7*`GiR^Q w)2!4MKjfSAeNo!9>IaV6aUZ*?W>} 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

UmY2RIYtNPVDpE$%vda+HD#3m z&VuXJ{BK&Qe+rBa7eq}Q(bq|tn(RrJAk|ztj2(i{d>nmQnM?;HF2k&9sA6up5tmjl z7lySlzMbifH17-m-Lwa_F&e7nOH?ESi3#ckR3tsM+jsck3`oG!uMS}|eAwVXv>}qxwq?QY%QJ0}r@^;fhuUA9W z*BVl>TGo&N004@xSiwDUXUvp51sVmqO3m)=B55aPwf@0=e}cN+$-BdKxY`YrT_4)0 z_d10#i44Q*rFr8MC>*)v$EJvz``(pb{e&*6k+b zsMz%($|1+8hn8c2?P(l@;Rb&CsZeYoCI3?2!LqjbwPXW3z4G$Qfj=cT5Yb%vY0(AX oeb?AaKtwrnc|$|zzw9vfvn^aJJ!zd)XFXqqy0000001=f@-~a#s literal 0 HcmV?d00001 diff --git a/Android/app/src/main/res/values/colors.xml b/Android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/Android/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/Android/app/src/main/res/values/strings.xml b/Android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..7de10d2 --- /dev/null +++ b/Android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + SwiftAndroid + \ No newline at end of file diff --git a/Android/app/src/main/res/values/themes.xml b/Android/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..c81f2c7 --- /dev/null +++ b/Android/app/src/main/res/values/themes.xml @@ -0,0 +1,5 @@ + + + +