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"