Complete user onboarding flow: background activity, firmware version enforcement, security nag, and Siri shortcuts (#1654)

* Initial plan

* Add Background Activity onboarding step, firmware version screens, and security nag

Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/449fe2d6-dec9-4509-920e-e6196ca11d65

Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>

* Address code review feedback: use @ObservedObject for LocationsHandler, fix firmware label

Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/449fe2d6-dec9-4509-920e-e6196ca11d65

Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>

* Improve readability of firmware version checks in Connect.swift

Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/449fe2d6-dec9-4509-920e-e6196ca11d65

Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>

* Add Siri onboarding step; fix @State→let in version sheets; fix .denied location flow

Agent-Logs-Url: https://github.com/meshtastic/Meshtastic-Apple/sessions/654a5abf-8005-4995-974a-5f1f95dfa68a

Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>

* Update protobufs package

* Additional onboarding cleanup

* Catalyst fixes

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
Co-authored-by: Garth Vander Houwen <garthvh@yahoo.com>
This commit is contained in:
Copilot 2026-04-18 10:50:06 -07:00 committed by GitHub
parent 6d14a23998
commit a5c825aaf0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 831 additions and 83 deletions

View file

@ -307,6 +307,22 @@
},
"shouldTranslate" : false
},
"\"Disconnect Meshtastic\" — disconnect from the connected BLE node." : {
"comment" : "A description of how to use the \"Disconnect Node\" Siri shortcut.",
"isCommentAutoGenerated" : true
},
"\"Send a Meshtastic direct message\" — send a private message to a node." : {
"comment" : "A description of how to send a direct message to a node using Siri.",
"isCommentAutoGenerated" : true
},
"\"Send a Meshtastic group message\" — send a message to a mesh channel." : {
"comment" : "A description of how to send a group message using Siri.",
"isCommentAutoGenerated" : true
},
"\"Shut down my Meshtastic node\" or \"Restart my Meshtastic node\"." : {
"comment" : "A description of how to use Siri to restart or shut down a node.",
"isCommentAutoGenerated" : true
},
"(Re)define PIN_GPS_EN for your board." : {
"localizations" : {
"da" : {
@ -2339,6 +2355,7 @@
}
},
"🦕 End of life Version 🦖 ☄️" : {
"extractionState" : "stale",
"localizations" : {
"da" : {
"stringUnit" : {
@ -4085,6 +4102,7 @@
}
},
"Additional help" : {
"extractionState" : "stale",
"localizations" : {
"da" : {
"stringUnit" : {
@ -4136,6 +4154,10 @@
}
}
},
"Additional Help" : {
"comment" : "A button that opens a link to the Meshtastic FAQ.",
"isCommentAutoGenerated" : true
},
"Address" : {
"localizations" : {
"da" : {
@ -7014,6 +7036,14 @@
}
}
},
"Background Activity" : {
"comment" : "A title for a screen that describes the benefits of enabling background location tracking.",
"isCommentAutoGenerated" : true
},
"Background Mesh Tracking" : {
"comment" : "A description of the background mesh tracking feature.",
"isCommentAutoGenerated" : true
},
"Backup" : {
"localizations" : {
"ja" : {
@ -7723,6 +7753,10 @@
}
}
},
"Battery Usage" : {
"comment" : "A description of the battery usage of enabling background activity.",
"isCommentAutoGenerated" : true
},
"Baud" : {
"localizations" : {
"da" : {
@ -9479,6 +9513,10 @@
}
}
},
"CarPlay Messaging" : {
"comment" : "A description of how to send a message to a mesh channel using CarPlay.",
"isCommentAutoGenerated" : true
},
"Categories" : {
"localizations" : {
"da" : {
@ -12465,6 +12503,10 @@
}
}
},
"Configure Siri & Shortcuts" : {
"comment" : "A button that will open the app's settings to configure Siri and Shortcuts.",
"isCommentAutoGenerated" : true
},
"Confirm" : {
"localizations" : {
"da" : {
@ -12671,6 +12713,14 @@
}
}
},
"Connect to nodes on your local Wi-Fi network." : {
"comment" : "A description of how to connect to nodes on your local Wi-Fi network.",
"isCommentAutoGenerated" : true
},
"Connect to your Meshtastic node via Bluetooth Low Energy for the best messaging experience." : {
"comment" : "A description of the Bluetooth connectivity feature.",
"isCommentAutoGenerated" : true
},
"Connected" : {
"localizations" : {
"da" : {
@ -12753,6 +12803,10 @@
}
}
},
"Connected firmware: **%@**" : {
"comment" : "A label displaying the firmware version of a device. The argument is the firmware version.",
"isCommentAutoGenerated" : true
},
"Connected Node %@" : {
"localizations" : {
"da" : {
@ -13239,6 +13293,14 @@
}
}
},
"Continue" : {
"comment" : "A button that will continue to the next step in the onboarding process.",
"isCommentAutoGenerated" : true
},
"Continuous Location Updates" : {
"comment" : "A description of the continuous location updates feature.",
"isCommentAutoGenerated" : true
},
"Control Type" : {
"localizations" : {
"da" : {
@ -14015,6 +14077,7 @@
}
},
"Current Firmware Version: %@, Latest Firmware Version: %@" : {
"extractionState" : "stale",
"localizations" : {
"da" : {
"stringUnit" : {
@ -14072,6 +14135,16 @@
}
}
},
"Current Firmware Version: %@, Minimum Required Version: %@" : {
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Current Firmware Version: %1$@, Minimum Required Version: %2$@"
}
}
}
},
"Current: %lld" : {
"localizations" : {
"da" : {
@ -18853,6 +18926,10 @@
}
}
},
"Enable Background Activity" : {
"comment" : "A toggle to enable or disable background activity.",
"isCommentAutoGenerated" : true
},
"Enable broadcasting device metrics to the mesh network. When disabled, metrics are only sent to connected clients." : {
"localizations" : {
"es" : {
@ -19387,6 +19464,10 @@
}
}
},
"Enabling background activity may increase battery usage. You can toggle this at any time in the app settings." : {
"comment" : "A description of the battery usage of enabling background activity.",
"isCommentAutoGenerated" : true
},
"Enabling Ethernet will disable the bluetooth connection to the app." : {
"localizations" : {
"da" : {
@ -22158,6 +22239,7 @@
}
},
"Firmware update docs" : {
"extractionState" : "stale",
"localizations" : {
"da" : {
"stringUnit" : {
@ -22209,6 +22291,14 @@
}
}
},
"Firmware Update Docs" : {
"comment" : "A link to the firmware update documentation.",
"isCommentAutoGenerated" : true
},
"Firmware Update Required" : {
"comment" : "A title for a screen that displays a firmware update is required message.",
"isCommentAutoGenerated" : true
},
"Firmware Updates" : {
"localizations" : {
"da" : {
@ -26233,6 +26323,10 @@
}
}
},
"How to Update" : {
"comment" : "A label displayed above the list of available firmware update options.",
"isCommentAutoGenerated" : true
},
"How to update Firmware" : {
"localizations" : {
"da" : {
@ -28134,6 +28228,10 @@
}
}
},
"Keep the mesh map updated and send your position to the mesh even while using other apps." : {
"comment" : "A description of the benefits of continuous location updates.",
"isCommentAutoGenerated" : true
},
"Key" : {
"localizations" : {
"da" : {
@ -31439,7 +31537,12 @@
"comment" : "A description of the read-only mode feature in TAK Server.",
"isCommentAutoGenerated" : true
},
"Meshtastic does not collect any personal information. We do anonymously collect usage and crash data to improve the app." : {
"comment" : "A description of how user data is used by Meshtastic.",
"isCommentAutoGenerated" : true
},
"Meshtastic does not collect any personal information. We do anonymously collect usage and crash data to improve the app. You can opt out under app settings." : {
"extractionState" : "stale",
"localizations" : {
"es" : {
"stringUnit" : {
@ -31767,6 +31870,10 @@
}
}
},
"Message Notifications" : {
"comment" : "A description of the message notifications feature.",
"isCommentAutoGenerated" : true
},
"Message received from the text message app." : {
"extractionState" : "stale",
"localizations" : {
@ -32286,6 +32393,10 @@
}
}
},
"Minimum required: **%@**" : {
"comment" : "A label displaying the minimum required firmware version.",
"isCommentAutoGenerated" : true
},
"Minimum time between detection broadcasts" : {
"extractionState" : "stale",
"localizations" : {
@ -37046,6 +37157,10 @@
}
}
},
"Open Web Flasher" : {
"comment" : "A button that opens the Web Flasher app.",
"isCommentAutoGenerated" : true
},
"Optimized for 2 color displays" : {
"extractionState" : "stale",
"localizations" : {
@ -42037,6 +42152,10 @@
}
}
},
"Read and reply to Meshtastic channel and direct messages directly from your car's display using CarPlay." : {
"comment" : "A description of how to use CarPlay with Meshtastic.",
"isCommentAutoGenerated" : true
},
"Read-Only Mode" : {
"comment" : "A toggle that allows the user to enable or disable read-only mode for the TAK server.",
"isCommentAutoGenerated" : true
@ -42344,6 +42463,14 @@
}
}
},
"Receive notifications for incoming messages and critical alerts even when the app is in the background." : {
"comment" : "A description of the notification feature.",
"isCommentAutoGenerated" : true
},
"Receive position updates from other nodes and maintain an accurate picture of the mesh while in the background." : {
"comment" : "A description of the benefits of enabling background mesh tracking.",
"isCommentAutoGenerated" : true
},
"Received a negative acknowledgment" : {
"extractionState" : "stale",
"localizations" : {
@ -42613,6 +42740,10 @@
}
}
},
"Recommended secure version: **%@**" : {
"comment" : "A label displaying the recommended secure version of the connected device.",
"isCommentAutoGenerated" : true
},
"Recording route" : {
"localizations" : {
"da" : {
@ -46664,6 +46795,10 @@
}
}
},
"Security Advisory" : {
"comment" : "A title for a security advisory displayed in a card.",
"isCommentAutoGenerated" : true
},
"Security Config" : {
"localizations" : {
"da" : {
@ -46780,6 +46915,10 @@
}
}
},
"Security Update Recommended" : {
"comment" : "A title for a view that warns the user that their device is running an outdated firmware version.",
"isCommentAutoGenerated" : true
},
"Select" : {
"extractionState" : "stale",
"localizations" : {
@ -47733,6 +47872,10 @@
}
}
},
"Send and receive Meshtastic messages hands-free using Siri and CarPlay." : {
"comment" : "A description of how to use Siri and CarPlay with Meshtastic.",
"isCommentAutoGenerated" : true
},
"Send ASCII bell with alert message. Useful for triggering external notification on bell." : {
"localizations" : {
"da" : {
@ -50796,6 +50939,10 @@
}
}
},
"Shut Down / Restart Node" : {
"comment" : "A Siri shortcut to restart or shut down a node.",
"isCommentAutoGenerated" : true
},
"Shut Down Node?" : {
"localizations" : {
"da" : {
@ -51152,6 +51299,14 @@
}
}
},
"Siri & CarPlay" : {
"comment" : "A description of how to use Siri and CarPlay with Meshtastic.",
"isCommentAutoGenerated" : true
},
"Siri, Shortcuts & CarPlay" : {
"comment" : "A label displayed above the Siri, Shortcuts & CarPlay onboarding view.",
"isCommentAutoGenerated" : true
},
"Six Hours" : {
"extractionState" : "stale",
"localizations" : {
@ -54143,7 +54298,12 @@
}
}
},
"The Meshtastic Apple app requires firmware version %@ or later. Older firmware versions are no longer supported and may have compatibility issues or missing features." : {
"comment" : "A body text that explains that the app requires a certain version of the firmware.",
"isCommentAutoGenerated" : true
},
"The Meshtastic Apple apps support firmware version %@ and above." : {
"extractionState" : "stale",
"localizations" : {
"da" : {
"stringUnit" : {
@ -60283,6 +60443,7 @@
}
},
"Version %@ includes substantial network optimizations and extensive changes to devices and client apps. Only nodes version %@ and above are supported." : {
"extractionState" : "stale",
"localizations" : {
"da" : {
"stringUnit" : {
@ -61412,6 +61573,7 @@
}
},
"Welcome to" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
@ -61439,6 +61601,10 @@
}
}
},
"Welcome to Meshtastic" : {
"comment" : "The title of the onboarding screen.",
"isCommentAutoGenerated" : true
},
"What does the lock mean?" : {
"localizations" : {
"da" : {
@ -62645,6 +62811,10 @@
"comment" : "A message displayed when a user successfully configures their primary channel for TAK. It instructs the user to share the QR code to invite TAK buddies.",
"isCommentAutoGenerated" : true
},
"Your connected device is running firmware older than **%@**, which contains known security vulnerabilities. Updating your firmware is strongly recommended to protect your device and mesh network." : {
"comment" : "A body text that describes the security advisory.",
"isCommentAutoGenerated" : true
},
"Your current location will be set as the fixed position and broadcast over the mesh on the position interval." : {
"localizations" : {
"da" : {