diff --git a/Meshtastic Client.xcodeproj/project.pbxproj b/Meshtastic Client.xcodeproj/project.pbxproj index 1ec8e372..1b053af8 100644 --- a/Meshtastic Client.xcodeproj/project.pbxproj +++ b/Meshtastic Client.xcodeproj/project.pbxproj @@ -660,9 +660,11 @@ IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2,6"; VALIDATE_PRODUCT = YES; }; name = Release; diff --git a/Meshtastic Client.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Meshtastic Client.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 00000000..965f7499 --- /dev/null +++ b/Meshtastic Client.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,16 @@ +{ + "object": { + "pins": [ + { + "package": "SwiftProtobuf", + "repositoryURL": "https://github.com/apple/swift-protobuf.git", + "state": { + "branch": null, + "revision": "1f62db409f2c9b0223a3f68567b4a01333aae778", + "version": "1.17.0" + } + } + ] + }, + "version": 1 +} diff --git a/Meshtastic Client.xcodeproj/xcuserdata/garthvanderhouwen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Meshtastic Client.xcodeproj/xcuserdata/garthvanderhouwen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 00000000..b3fcf072 --- /dev/null +++ b/Meshtastic Client.xcodeproj/xcuserdata/garthvanderhouwen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/1024.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 00000000..403f4f2f Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/1024.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/120-1.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/120-1.png new file mode 100644 index 00000000..6e571624 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/120-1.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/120.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/120.png new file mode 100644 index 00000000..6e571624 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/120.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/152.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/152.png new file mode 100644 index 00000000..a930e23a Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/152.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/167.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/167.png new file mode 100644 index 00000000..35658530 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/167.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/180.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 00000000..fff06a76 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/180.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/20.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/20.png new file mode 100644 index 00000000..988c8ade Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/20.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/29.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 00000000..553bb7a3 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/29.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/40-1.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/40-1.png new file mode 100644 index 00000000..e78f4105 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/40-1.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/40-2.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/40-2.png new file mode 100644 index 00000000..e78f4105 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/40-2.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/40.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 00000000..e78f4105 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/40.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/58-1.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/58-1.png new file mode 100644 index 00000000..ea3829e7 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/58-1.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/58.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/58.png new file mode 100644 index 00000000..ea3829e7 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/58.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/60.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/60.png new file mode 100644 index 00000000..f384f426 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/60.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/76.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/76.png new file mode 100644 index 00000000..bd7db1b2 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/76.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/80-1.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/80-1.png new file mode 100644 index 00000000..ed42f91e Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/80-1.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/80.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 00000000..ed42f91e Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/80.png differ diff --git a/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/87.png b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/87.png new file mode 100644 index 00000000..a3720d5a Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/AppIcon.appiconset/87.png differ diff --git a/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/655DCEC0-309D-430A-AF50-2453B6ADB1F6-1.png b/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/655DCEC0-309D-430A-AF50-2453B6ADB1F6-1.png new file mode 100644 index 00000000..b80e4b0c Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/655DCEC0-309D-430A-AF50-2453B6ADB1F6-1.png differ diff --git a/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/655DCEC0-309D-430A-AF50-2453B6ADB1F6-2.png b/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/655DCEC0-309D-430A-AF50-2453B6ADB1F6-2.png new file mode 100644 index 00000000..b80e4b0c Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/655DCEC0-309D-430A-AF50-2453B6ADB1F6-2.png differ diff --git a/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/655DCEC0-309D-430A-AF50-2453B6ADB1F6.png b/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/655DCEC0-309D-430A-AF50-2453B6ADB1F6.png new file mode 100644 index 00000000..b80e4b0c Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/655DCEC0-309D-430A-AF50-2453B6ADB1F6.png differ diff --git a/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/Contents.json b/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/Contents.json new file mode 100644 index 00000000..f321d22c --- /dev/null +++ b/Meshtastic Watch/Assets.xcassets/HELTECV20.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "655DCEC0-309D-430A-AF50-2453B6ADB1F6.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "655DCEC0-309D-430A-AF50-2453B6ADB1F6-1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "655DCEC0-309D-430A-AF50-2453B6ADB1F6-2.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic Watch/Assets.xcassets/RAK4631.imageset/Contents.json b/Meshtastic Watch/Assets.xcassets/RAK4631.imageset/Contents.json new file mode 100644 index 00000000..7f7e3a4b --- /dev/null +++ b/Meshtastic Watch/Assets.xcassets/RAK4631.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "RAK7205_Enclosure-With-Solar-Panel_Top-View_01_9ed42002-fb51-4c49-a69e-43fcef692ef6_739x@2x.progressive-1.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "RAK7205_Enclosure-With-Solar-Panel_Top-View_01_9ed42002-fb51-4c49-a69e-43fcef692ef6_739x@2x.progressive.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic Watch/Assets.xcassets/RAK4631.imageset/RAK7205_Enclosure-With-Solar-Panel_Top-View_01_9ed42002-fb51-4c49-a69e-43fcef692ef6_739x@2x.progressive-1.png b/Meshtastic Watch/Assets.xcassets/RAK4631.imageset/RAK7205_Enclosure-With-Solar-Panel_Top-View_01_9ed42002-fb51-4c49-a69e-43fcef692ef6_739x@2x.progressive-1.png new file mode 100644 index 00000000..984c1117 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/RAK4631.imageset/RAK7205_Enclosure-With-Solar-Panel_Top-View_01_9ed42002-fb51-4c49-a69e-43fcef692ef6_739x@2x.progressive-1.png differ diff --git a/Meshtastic Watch/Assets.xcassets/RAK4631.imageset/RAK7205_Enclosure-With-Solar-Panel_Top-View_01_9ed42002-fb51-4c49-a69e-43fcef692ef6_739x@2x.progressive.png b/Meshtastic Watch/Assets.xcassets/RAK4631.imageset/RAK7205_Enclosure-With-Solar-Panel_Top-View_01_9ed42002-fb51-4c49-a69e-43fcef692ef6_739x@2x.progressive.png new file mode 100644 index 00000000..984c1117 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/RAK4631.imageset/RAK7205_Enclosure-With-Solar-Panel_Top-View_01_9ed42002-fb51-4c49-a69e-43fcef692ef6_739x@2x.progressive.png differ diff --git a/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/Contents.json b/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/Contents.json new file mode 100644 index 00000000..fb2eadda --- /dev/null +++ b/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "tbeam-2.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "tbeam-1.jpg", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "tbeam.jpg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/tbeam-1.jpg b/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/tbeam-1.jpg new file mode 100644 index 00000000..69865801 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/tbeam-1.jpg differ diff --git a/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/tbeam-2.jpg b/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/tbeam-2.jpg new file mode 100644 index 00000000..69865801 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/tbeam-2.jpg differ diff --git a/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/tbeam.jpg b/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/tbeam.jpg new file mode 100644 index 00000000..69865801 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/TBEAM.imageset/tbeam.jpg differ diff --git a/Meshtastic Watch/Assets.xcassets/TECHO.imageset/Contents.json b/Meshtastic Watch/Assets.xcassets/TECHO.imageset/Contents.json new file mode 100644 index 00000000..aeb16a23 --- /dev/null +++ b/Meshtastic Watch/Assets.xcassets/TECHO.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "techo-2.jpg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "techo-1.jpg", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "techo.jpg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic Watch/Assets.xcassets/TECHO.imageset/techo-1.jpg b/Meshtastic Watch/Assets.xcassets/TECHO.imageset/techo-1.jpg new file mode 100644 index 00000000..0f1ce811 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/TECHO.imageset/techo-1.jpg differ diff --git a/Meshtastic Watch/Assets.xcassets/TECHO.imageset/techo-2.jpg b/Meshtastic Watch/Assets.xcassets/TECHO.imageset/techo-2.jpg new file mode 100644 index 00000000..0f1ce811 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/TECHO.imageset/techo-2.jpg differ diff --git a/Meshtastic Watch/Assets.xcassets/TECHO.imageset/techo.jpg b/Meshtastic Watch/Assets.xcassets/TECHO.imageset/techo.jpg new file mode 100644 index 00000000..0f1ce811 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/TECHO.imageset/techo.jpg differ diff --git a/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/Contents.json b/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/Contents.json new file mode 100644 index 00000000..1ff58079 --- /dev/null +++ b/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "tlora-2.jpeg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "tlora-1.jpeg", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "tlora.jpeg", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/tlora-1.jpeg b/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/tlora-1.jpeg new file mode 100644 index 00000000..450bbb05 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/tlora-1.jpeg differ diff --git a/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/tlora-2.jpeg b/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/tlora-2.jpeg new file mode 100644 index 00000000..450bbb05 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/tlora-2.jpeg differ diff --git a/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/tlora.jpeg b/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/tlora.jpeg new file mode 100644 index 00000000..450bbb05 Binary files /dev/null and b/Meshtastic Watch/Assets.xcassets/TLORAV1.imageset/tlora.jpeg differ diff --git a/Meshtastic Watch/Assets.xcassets/TLORAV2.imageset/Contents.json b/Meshtastic Watch/Assets.xcassets/TLORAV2.imageset/Contents.json new file mode 100644 index 00000000..a19a5492 --- /dev/null +++ b/Meshtastic Watch/Assets.xcassets/TLORAV2.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic Watch/Assets.xcassets/TLORAV211p6.imageset/Contents.json b/Meshtastic Watch/Assets.xcassets/TLORAV211p6.imageset/Contents.json new file mode 100644 index 00000000..a19a5492 --- /dev/null +++ b/Meshtastic Watch/Assets.xcassets/TLORAV211p6.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Meshtastic Watch/Assets.xcassets/UNSET.imageset/Contents.json b/Meshtastic Watch/Assets.xcassets/UNSET.imageset/Contents.json new file mode 100644 index 00000000..a19a5492 --- /dev/null +++ b/Meshtastic Watch/Assets.xcassets/UNSET.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/MeshtasticClient/Helpers/BLEManager.swift b/MeshtasticClient/Helpers/BLEManager.swift index 215023cc..77006174 100644 --- a/MeshtasticClient/Helpers/BLEManager.swift +++ b/MeshtasticClient/Helpers/BLEManager.swift @@ -20,8 +20,8 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph } } - @ObservedObject var meshData : MeshData - @ObservedObject var messageData : MessageData + @Published var meshData : MeshData + @Published var messageData : MessageData private var centralManager: CBCentralManager! @@ -114,22 +114,22 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph self.timeoutTimerCount += 1 - if timeoutTimerCount == 6 { + if timeoutTimerCount == 10 { - if connectedPeripheral != nil && connectedPeripheral.peripheral.state != CBPeripheralState.connected { + if connectedPeripheral != nil { self.centralManager?.cancelPeripheralConnection(connectedPeripheral.peripheral) - connectedNode = nil - connectedPeripheral = nil - if meshLoggingEnabled { Logger.log("BLE Connecting Timeout Timer disconnected orphaned radio: \(name) in state: \(connectedPeripheral.peripheral.state.rawValue)") } - } - self.lastConnectionError = "Timeout while connecting to \(name)." - print("BLE Connecting 2 Second Timeout Timer Fired \(timeoutTimerCount) Times and failed: \(name)") - if meshLoggingEnabled { Logger.log("BLE Connecting 2 Second Timeout Timer Fired \(timeoutTimerCount) Times and failed: \(name)") } + connectedNode = nil + connectedPeripheral = nil + + self.lastConnectionError = "BLE Connecting Timeout after making \(timeoutTimerCount) attempts to connect to \(name)." + print("BLE Connecting Timeout after making \(timeoutTimerCount) attempts to connect to \(name).") + if meshLoggingEnabled { Logger.log("BLE Connecting Timeout after making \(timeoutTimerCount) attempts to connect to \(String(name)).") } - self.timeoutTimer?.invalidate() self.timeoutTimerCount = 0 + self.timeoutTimer?.invalidate() + } else { print("BLE Connecting 2 Second Timeout Timer Fired \(timeoutTimerCount) Time(s): \(name)") diff --git a/MeshtasticClient/MeshtasticClient.entitlements b/MeshtasticClient/MeshtasticClient.entitlements index a86982db..d0c2e6d1 100644 --- a/MeshtasticClient/MeshtasticClient.entitlements +++ b/MeshtasticClient/MeshtasticClient.entitlements @@ -6,6 +6,8 @@ com.apple.security.device.bluetooth + com.apple.security.files.user-selected.read-write + com.apple.security.network.client com.apple.security.personal-information.location diff --git a/MeshtasticClient/MeshtasticClient.xcdatamodeld/MeshtasticClient.xcdatamodel/contents b/MeshtasticClient/MeshtasticClient.xcdatamodeld/MeshtasticClient.xcdatamodel/contents new file mode 100644 index 00000000..3374cb84 --- /dev/null +++ b/MeshtasticClient/MeshtasticClient.xcdatamodeld/MeshtasticClient.xcdatamodel/contents @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/MeshtasticClient/MeshtasticClientApp.swift b/MeshtasticClient/MeshtasticClientApp.swift index 881d8097..a38832b2 100644 --- a/MeshtasticClient/MeshtasticClientApp.swift +++ b/MeshtasticClient/MeshtasticClientApp.swift @@ -6,7 +6,7 @@ struct MeshtasticClientApp: App { @ObservedObject private var bleManager: BLEManager = BLEManager() @ObservedObject private var userSettings: UserSettings = UserSettings() //let persistenceController = PersistenceController.shared - //@Environment(\.scenePhase) var scenePhase + @Environment(\.scenePhase) var scenePhase var body: some Scene { WindowGroup { @@ -15,18 +15,18 @@ struct MeshtasticClientApp: App { .environmentObject(userSettings) //.environment(\.managedObjectContext, persistenceController.container.viewContext) } - //.onChange(of: scenePhase) { (newScenePhase) in - // switch newScenePhase { - // case .background: - // print("Scene is in the background") - // persistenceController.save() - // case .inactive: - // print("Scene is inactive") - // case .active: - // print("Scene is active") - // @unknown default: - // print("Apple must have changed something") - // } - //} + .onChange(of: scenePhase) { (newScenePhase) in + switch newScenePhase { + case .background: + print("Scene is in the background") + //persistenceController.save() + case .inactive: + print("Scene is inactive") + case .active: + print("Scene is active") + @unknown default: + print("Apple must have changed something") + } + } } } diff --git a/MeshtasticClient/Model/Data/NodeInfoEntity.swift b/MeshtasticClient/Model/Data/NodeInfoEntity.swift new file mode 100644 index 00000000..af2d1e98 --- /dev/null +++ b/MeshtasticClient/Model/Data/NodeInfoEntity.swift @@ -0,0 +1,16 @@ +import Foundation +import CoreData + +//extension NodeInfoEntity { +// @nonobjc public class func createFetchRequest() -> NSFetchRequest { +// return NSFetchRequest(entityName: "NodeInfoEntity") +// } + + +// @NSManaged public var id: UInt32 +// @NSManaged public var num: UInt32 +// @NSManaged public var sha: String +// @NSManaged public var url: String + + +//} diff --git a/MeshtasticClient/Model/Data/NodeInfoEntity.xcdatamodeld/NodeInfoEntity.xcdatamodel/contents b/MeshtasticClient/Model/Data/NodeInfoEntity.xcdatamodeld/NodeInfoEntity.xcdatamodel/contents new file mode 100644 index 00000000..c442da60 --- /dev/null +++ b/MeshtasticClient/Model/Data/NodeInfoEntity.xcdatamodeld/NodeInfoEntity.xcdatamodel/contents @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/MeshtasticClient/RELEASENOTES.md b/MeshtasticClient/RELEASENOTES.md new file mode 100644 index 00000000..3a8842a6 --- /dev/null +++ b/MeshtasticClient/RELEASENOTES.md @@ -0,0 +1,8 @@ +# 1.27.8 + +* Update NodeList SwipeAction Button to be role: Destructive +* Added com.apple.security.files.user-selected.read-write entitlement to AppSandbox for MacOS for Mesh log download +* Cleaned up bluetooth connecting timeout errors and logic, run 10 2 second timers now + + + diff --git a/MeshtasticClient/Views/Bluetooth/Connect.swift b/MeshtasticClient/Views/Bluetooth/Connect.swift index 46e7c457..ac9deb47 100644 --- a/MeshtasticClient/Views/Bluetooth/Connect.swift +++ b/MeshtasticClient/Views/Bluetooth/Connect.swift @@ -103,7 +103,6 @@ struct Connect: View { Button(role: .destructive) { if bleManager.connectedPeripheral != nil && bleManager.connectedPeripheral.peripheral.state == CBPeripheralState.connected { - bleManager.disconnectDevice() isPreferredRadio = false } diff --git a/MeshtasticClient/Views/Messages/Messages.swift b/MeshtasticClient/Views/Messages/Messages.swift index 16cdd52a..ed9cc0e5 100644 --- a/MeshtasticClient/Views/Messages/Messages.swift +++ b/MeshtasticClient/Views/Messages/Messages.swift @@ -14,8 +14,10 @@ struct Messages: View { @State private var totalBytes = 0 @State private var lastTypingMessage = "" @FocusState private var focusedField: Field? + @Namespace var topId @Namespace var bottomId + @State var showDeleteMessageAlert = false @State private var deleteMessageId : UInt32 = 0 diff --git a/MeshtasticClient/Views/Nodes/NodeList.swift b/MeshtasticClient/Views/Nodes/NodeList.swift index ee5a28f4..d743819a 100644 --- a/MeshtasticClient/Views/Nodes/NodeList.swift +++ b/MeshtasticClient/Views/Nodes/NodeList.swift @@ -65,17 +65,15 @@ struct NodeList: View { } } - .swipeActions { - Button { - - let nodeIndex = bleManager.meshData.nodes.firstIndex(where: { $0.id == node.id }) - bleManager.meshData.nodes.remove(at: nodeIndex!) - bleManager.meshData.save() + .swipeActions (edge: .trailing) { + Button (role: .destructive) { + let nodeIndex = bleManager.meshData.nodes.firstIndex(where: { $0.num == node.num }) + bleManager.meshData.nodes.remove(at: nodeIndex!) + bleManager.meshData.save() } label: { Label("Delete from app", systemImage: "trash") - } - .tint(.red) + } } } } @@ -83,6 +81,7 @@ struct NodeList: View { .navigationTitle("All Nodes") .onAppear( perform: { + bleManager.meshData.load() if UIDevice.current.userInterfaceIdiom == .pad { if bleManager.meshData.nodes.count > 0 { selection = "0"