mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
V 1.27.1 Clean up log files, turn off user settings username which is causing a crash
This commit is contained in:
parent
2ee000f84a
commit
7aa59a192a
9 changed files with 108 additions and 62 deletions
|
|
@ -672,7 +672,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.26.10;
|
||||
MARKETING_VERSION = 1.27.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
|
|
@ -699,7 +699,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.26.10;
|
||||
MARKETING_VERSION = 1.27.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,15 @@
|
|||
"colors" : [
|
||||
{
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "1.000",
|
||||
"green" : "1.000",
|
||||
"red" : "1.000"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "1.000",
|
||||
"green" : "1.000",
|
||||
"red" : "1.000"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
|
|
@ -10,17 +10,18 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
|
|||
|
||||
private static var documentsFolder: URL {
|
||||
do {
|
||||
return try FileManager.default.url(for: .documentDirectory,
|
||||
in: .userDomainMask,
|
||||
appropriateFor: nil,
|
||||
create: true)
|
||||
return try FileManager.default.url(
|
||||
for: .documentDirectory,
|
||||
in: .userDomainMask,
|
||||
appropriateFor: nil,
|
||||
create: true)
|
||||
} catch {
|
||||
fatalError("Can't find documents directory.")
|
||||
}
|
||||
}
|
||||
|
||||
@ObservedObject private var meshData : MeshData
|
||||
@ObservedObject private var messageData : MessageData
|
||||
@ObservedObject var meshData : MeshData
|
||||
@ObservedObject var messageData : MessageData
|
||||
|
||||
private var centralManager: CBCentralManager!
|
||||
|
||||
|
|
@ -539,7 +540,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
|
|||
meshData.nodes.remove(at: nodeIndex!)
|
||||
meshData.nodes.append(updatedNode!)
|
||||
meshData.save()
|
||||
if meshLoggingEnabled { Logger.log("Updated NodeInfo SNR and Time from Node Info App Packet For: \(updatedNode!.user.longName)") }
|
||||
if meshLoggingEnabled { Logger.log("MESH PACKET Updated NodeInfo SNR and Time from Node Info App Packet For: \(updatedNode!.user.longName)") }
|
||||
print("Updated NodeInfo SNR and Time from Packet For: \(updatedNode!.user.longName)")
|
||||
}
|
||||
}
|
||||
|
|
@ -556,7 +557,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
|
|||
meshData.nodes.append(updatedNode!)
|
||||
meshData.save()
|
||||
|
||||
if meshLoggingEnabled { Logger.log("Updated NodeInfo SNR and Time from Position App Packet For: \(updatedNode!.user.longName)") }
|
||||
if meshLoggingEnabled { Logger.log("MESH PACKET Updated NodeInfo SNR and Time from Position App Packet For: \(updatedNode!.user.longName)") }
|
||||
print("Updated Position SNR and Time from Packet For: \(updatedNode!.user.longName)")
|
||||
}
|
||||
print("Postion Payload")
|
||||
|
|
@ -564,19 +565,19 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
|
|||
}
|
||||
else if decodedInfo.packet.decoded.portnum == PortNum.adminApp {
|
||||
|
||||
if meshLoggingEnabled { Logger.log("BLE FROMRADIO received for Admin App UNHANDLED \(try decodedInfo.packet.jsonString())") }
|
||||
if meshLoggingEnabled { Logger.log("MESH PACKET received for Admin App UNHANDLED \(try decodedInfo.packet.jsonString())") }
|
||||
print("Admin App Packet")
|
||||
print(try decodedInfo.packet.jsonString())
|
||||
}
|
||||
else if decodedInfo.packet.decoded.portnum == PortNum.routingApp {
|
||||
|
||||
if meshLoggingEnabled { Logger.log("BLE FROMRADIO received for Routing App UNHANDLED \(try decodedInfo.packet.jsonString())") }
|
||||
if meshLoggingEnabled { Logger.log("MESH PACKET received for Routing App UNHANDLED \(try decodedInfo.packet.jsonString())") }
|
||||
print("Routing App Packet")
|
||||
print(try decodedInfo.packet.jsonString())
|
||||
}
|
||||
else
|
||||
{
|
||||
if meshLoggingEnabled { Logger.log("BLE FROMRADIO received for Other App UNHANDLED \(try decodedInfo.packet.jsonString())") }
|
||||
if meshLoggingEnabled { Logger.log("MESH PACKET received for Other App UNHANDLED \(try decodedInfo.packet.jsonString())") }
|
||||
print("Other App Packet")
|
||||
print(try decodedInfo.packet.jsonString())
|
||||
}
|
||||
|
|
@ -588,7 +589,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
|
|||
}
|
||||
|
||||
if decodedInfo.configCompleteID != 0 {
|
||||
if meshLoggingEnabled { Logger.log("Config Complete: \(decodedInfo.configCompleteID)") }
|
||||
if meshLoggingEnabled { Logger.log("BLE Config Complete Packet Id: \(decodedInfo.configCompleteID)") }
|
||||
print("BLE Config Complete Packet Id: \(decodedInfo.configCompleteID)")
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,16 +17,15 @@ struct MeshtasticClientApp: App {
|
|||
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
ContentView()
|
||||
.environmentObject(meshData)
|
||||
.environmentObject(messageData)
|
||||
.environmentObject(bleManager)
|
||||
.environmentObject(userSettings)
|
||||
.onAppear{
|
||||
meshData.load()
|
||||
messageData.load()
|
||||
}
|
||||
|
||||
}
|
||||
ContentView()
|
||||
.environmentObject(meshData)
|
||||
.environmentObject(messageData)
|
||||
.environmentObject(bleManager)
|
||||
.environmentObject(userSettings)
|
||||
.onAppear{
|
||||
meshData.load()
|
||||
messageData.load()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,10 +3,11 @@ import Foundation
|
|||
class MeshData: ObservableObject {
|
||||
private static var documentsFolder: URL {
|
||||
do {
|
||||
return try FileManager.default.url(for: .documentDirectory,
|
||||
in: .userDomainMask,
|
||||
appropriateFor: nil,
|
||||
create: true)
|
||||
return try FileManager.default.url(
|
||||
for: .documentDirectory,
|
||||
in: .userDomainMask,
|
||||
appropriateFor: nil,
|
||||
create: true)
|
||||
} catch {
|
||||
fatalError("Can't find documents directory.")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,8 +43,6 @@ struct Messages: View {
|
|||
|
||||
let currentUser: Bool = (bleManager.connectedNode != nil) && ((bleManager.connectedNode.id) == message.fromUserId)
|
||||
|
||||
//MessageBubble(contentMessage: message.messagePayload, isCurrentUser: currentUser, time: Int32(message.messageTimestamp), shortName: message.fromUserShortName, id: message.messageId)
|
||||
|
||||
HStack (alignment: .top) {
|
||||
|
||||
CircleText(text: message.fromUserShortName, color: currentUser ? .accentColor : Color(.darkGray)).padding(.all, 5)
|
||||
|
|
@ -189,7 +187,7 @@ struct Messages: View {
|
|||
.navigationBarItems(trailing:
|
||||
|
||||
ZStack {
|
||||
ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedNode != nil) ? bleManager.connectedNode.user.shortName : ((bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.name : "Unknown") )
|
||||
//ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedNode != nil) ? bleManager.connectedNode.user.shortName : ((bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.name : "Unknown") )
|
||||
})
|
||||
.onAppear {
|
||||
|
||||
|
|
|
|||
|
|
@ -31,11 +31,11 @@ enum KeyboardType: Int, CaseIterable, Identifiable {
|
|||
}
|
||||
|
||||
class UserSettings: ObservableObject {
|
||||
@Published var username: String {
|
||||
didSet {
|
||||
UserDefaults.standard.set(username, forKey: "username")
|
||||
}
|
||||
}
|
||||
//@Published var meshtasticUsername: String {
|
||||
// didSet {
|
||||
// UserDefaults.standard.set(meshtasticUsername, forKey: "meshtasticusername")
|
||||
// }
|
||||
//}
|
||||
@Published var preferredPeripheralName: String {
|
||||
didSet {
|
||||
UserDefaults.standard.set(preferredPeripheralName, forKey: "preferredPeripheralName")
|
||||
|
|
@ -63,7 +63,7 @@ class UserSettings: ObservableObject {
|
|||
}
|
||||
|
||||
init() {
|
||||
self.username = UserDefaults.standard.object(forKey: "username") as? String ?? ""
|
||||
//self.meshtasticUsername = UserDefaults.standard.object(forKey: "meshtasticusername") as? String ?? ""
|
||||
self.preferredPeripheralName = UserDefaults.standard.object(forKey: "preferredPeripheralName") as? String ?? ""
|
||||
self.preferredPeripheralId = UserDefaults.standard.object(forKey: "preferredPeripheralId") as? String ?? ""
|
||||
self.provideLocation = UserDefaults.standard.object(forKey: "provideLocation") as? Bool ?? false
|
||||
|
|
@ -75,7 +75,7 @@ class UserSettings: ObservableObject {
|
|||
struct AppSettings: View {
|
||||
|
||||
@EnvironmentObject var bleManager: BLEManager
|
||||
@EnvironmentObject var userSettings: UserSettings
|
||||
@ObservedObject var userSettings: UserSettings = UserSettings()
|
||||
|
||||
@State private var preferredDeviceConnected = false
|
||||
|
||||
|
|
@ -92,13 +92,12 @@ struct AppSettings: View {
|
|||
List {
|
||||
Section(header: Text("USER DETAILS")) {
|
||||
|
||||
HStack {
|
||||
|
||||
Label("Name", systemImage: "person.crop.rectangle.fill")
|
||||
TextField("Username", text: $userSettings.username)
|
||||
.foregroundColor(.gray)
|
||||
}
|
||||
.listRowSeparator(.visible)
|
||||
//HStack {
|
||||
//Label("Name", systemImage: "person.crop.rectangle.fill")
|
||||
//TextField("Username", text: $userSettings.meshtasticUsername)
|
||||
//.foregroundColor(.gray)
|
||||
//}
|
||||
//.listRowSeparator(.visible)
|
||||
Toggle(isOn: $userSettings.provideLocation) {
|
||||
|
||||
Label("Provide location to mesh", systemImage: "location.circle.fill")
|
||||
|
|
@ -138,7 +137,6 @@ struct AppSettings: View {
|
|||
}
|
||||
.listRowSeparator(.visible)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ struct MeshLog: View {
|
|||
var text = ""
|
||||
@State private var logs = [String]()
|
||||
@State private var isExporting: Bool = false
|
||||
@State private var document: LogDocument = LogDocument(logFile: "")
|
||||
@State private var document: LogDocument = LogDocument(logFile: "MESHTASTIC MESH ACTIVITY LOG\n")
|
||||
|
||||
var body: some View {
|
||||
|
||||
|
|
@ -19,27 +19,29 @@ struct MeshLog: View {
|
|||
logs.removeAll()
|
||||
for try await log in url.lines {
|
||||
logs.append(log)
|
||||
document.logFile.append(log)
|
||||
document.logFile.append("\(log) \n")
|
||||
}
|
||||
logs.reverse()
|
||||
} catch {
|
||||
// Stop adding logs when an error is thrown
|
||||
}
|
||||
}
|
||||
.fileExporter(isPresented: $isExporting,
|
||||
document: document,
|
||||
contentType: UTType.plainText,
|
||||
defaultFilename: "mesh-activity-log"
|
||||
.fileExporter(
|
||||
isPresented: $isExporting,
|
||||
document: document,
|
||||
contentType: UTType.plainText,
|
||||
defaultFilename: "mesh-activity-log",
|
||||
onCompletion: {
|
||||
|
||||
result in
|
||||
|
||||
if case .success = result {
|
||||
print("Mesh activity log download: success.")
|
||||
} else {
|
||||
print("Mesh activity log download \(result).")
|
||||
}
|
||||
}
|
||||
)
|
||||
{
|
||||
result in
|
||||
if case .success = result {
|
||||
print("Upload was ok")
|
||||
}
|
||||
else{
|
||||
print("Something went wrong")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.textSelection(.enabled)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue