mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Apple iOS, iPadOS & macOS Clients For Meshtastic
* Fix: "Retrieving nodes" significantly slower after reconnect (#1424) The node database retrieval was calling context.save() for every single NodeInfo packet received (250 saves for 250 nodes). This caused severe performance degradation on reconnect when CoreData had accumulated state. Root Cause: - nodeInfoPacket() called context.save() immediately for each node - With 250 nodes, this meant 250 individual CoreData save operations - On first connection, CoreData is fresh and fast - On reconnect, CoreData has accumulated change tracking, undo management, and memory pressure, making each save progressively slower - This resulted in 10+ second retrieval times vs 1-2 seconds initially Solution: - Added deferSave parameter to nodeInfoPacket() function - During database retrieval (.retrievingDatabase state), defer all saves - Perform a single batch save when database retrieval completes (when NONCE_ONLY_DB configCompleteID is received) - This reduces 250 saves to 1 save Performance Impact: - Eliminates N individual saves during node database sync - Reduces database retrieval time back to 1-2 seconds on reconnect - Matches first-connection performance consistently Fixes #1424 * Revert *MessageListUnified files --------- Co-authored-by: Martin Bogomolni <martinbogo@gmail.com> Co-authored-by: Jake-B <jake-b@users.noreply.github.com> |
||
|---|---|---|
| .github | ||
| ci_scripts | ||
| Meshtastic | ||
| Meshtastic.xcodeproj | ||
| Meshtastic.xcworkspace | ||
| MeshtasticProtobufs | ||
| MeshtasticTests | ||
| protobufs@c1e31a9655 | ||
| scripts | ||
| Settings.bundle | ||
| Widgets | ||
| .gitignore | ||
| .gitmodules | ||
| .swiftlint-precommit.yml | ||
| .swiftlint.yml | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| Localizable.xcstrings | ||
| meshtastic-1080x1080.png | ||
| README.md | ||
| RELEASING.md | ||
Meshtastic Apple Clients
Overview
SwiftUI client applications for iOS, iPadOS and macOS.
Getting Started
This project always uses the latest release version of XCode.
- Clone the repo.
git clone git@github.com:meshtastic/Meshtastic-Apple.git - Open the local directory.
cd Meshtastic-Apple - Set up git hooks to automatically lint the project when you commit changes.
./scripts/setup-hooks.sh - Open
Meshtastic.xcworkspaceopen Meshtastic.xcworkspace - Build and run the
Meshtastictarget.
Technical Standards
Supported Operating Systems
The last two major operating system versions are supported on iOS, iPadOS and macOS.
Code Standards
- Use SwiftUI
- Use SFSymbols for icons
- Use Core Data for persistence
Updating Protobufs:
- run
./scripts/gen_protos.sh
- Build, test, and commit the changes.
Release Process
For more information on how a new release of Meshtastic is managed, please refer to RELEASING.md
License
This project is licensed under the GPL v3. See the LICENSE file for details.