Thank you for contributing to Meshtastic Apple! Please read this guide before opening a PR.
brew install swiftlint)Run ./scripts/setup-hooks.sh once after cloning to install the pre-commit SwiftLint hook.
The app ships a built-in Help & Documentation browser, a Jekyll site on GitHub Pages, and documentation is also published to the main meshtastic.org site.
| Resource | Location |
|---|---|
| Meshtastic.org | meshtastic.org/docs/category/apple-apps |
| GitHub Pages | meshtastic.github.io/Meshtastic-Apple |
| In-app | Settings → Help & Documentation |
| Deep link | meshtastic:///settings/helpDocs |
Source markdown lives under docs/user/ and docs/developer/. To rebuild the bundled HTML after editing any markdown:
bash scripts/build-docs.sh --output Meshtastic/Resources/docs --beta
Commit the regenerated files under Meshtastic/Resources/docs/ with your PR.
Branch from main (trunk-based development). Use descriptive names:
feat/bluetooth-reconnect-improvements
fix/crash-on-ble-disconnect
docs/update-mqtt-guide
chore/update-protobufs
Use imperative mood subject lines:
Fix crash when BLE device disconnects
Add TAK CoT position relay support
Update protobufs to v2.7
Explain what changed and why in the body. Keep subject lines under 72 characters.
⌘U in Xcode)docs/developer/deep-links.mdVersionedSchema and MigrationStage./scripts/gen_protos.sh and builtprint(). SwiftLint enforces this.// MARK: - to separate logical sections.guard for early exit; avoid deeply nested if.| Check | Warning | Error |
|---|---|---|
| Line length | 400 | — |
| File length | 3500 | — |
| Type body length | 400 | — |
| Function body length | 200 | — |
| Cyclomatic complexity | 60 | — |
| Type name length | 60 | 70 |
#if !targetEnvironment(macCatalyst)#if canImport(UIKit)if #available(iOS 26, *) { ... }git submodule update --remote protobufs/./scripts/gen_protos.shSee RELEASING.md in the repository root for the full release checklist and App Store submission process.