Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
75ef0db
unpin xcode version
Avi0n Jun 26, 2026
dd01319
Merge remote-tracking branch 'origin/main' into dev
Avi0n Jun 28, 2026
4fb0504
feat(l10n): update "Pair your device" onboarding instructions
Avi0n Jun 28, 2026
699aa93
feat(radio): add Chile region radio preset
mabahamo Jun 29, 2026
a45068b
docs(radio): cite MeshChile as the source for the Chile preset
mabahamo Jun 29, 2026
15c1e0b
Merge pull request #336 from mabahamo/feature/chile-region-profile
Avi0n Jun 29, 2026
b66def0
fix(remote-nodes): auto-heal login when repeater contact is missing f…
Avi0n Jun 30, 2026
3bc3bb4
feat(neighbors): add repeater neighbors map
Avi0n Jun 30, 2026
0ef0eb2
feat(map): add distance pill to message path map
Avi0n Jun 30, 2026
f2ad13f
ci: lint and formatting jobs
bwees Jul 1, 2026
5ac11b9
Merge pull request #342 from bwees-forks/ci/lint
Avi0n Jul 1, 2026
5d431bb
ci: formatter
bwees Jul 1, 2026
bb5b89d
remove extra swiftlint toggles
bwees Jul 1, 2026
c68a821
fix: lint issues
bwees Jul 1, 2026
e99e700
fix: self references
bwees Jul 1, 2026
3d29095
chore: remove redundant self format rule
bwees Jul 1, 2026
d5a14ce
fix: more self
bwees Jul 1, 2026
fe71174
Merge pull request #344 from bwees-forks/ci/format
Avi0n Jul 1, 2026
becc7cb
fix(remotenodes): allow negative latitude/longitude entry
Avi0n Jul 1, 2026
b0b6579
fix(remote-nodes): validate lat/lon/name before sending to node
Avi0n Jul 1, 2026
e41aca4
fix(tests): fix throwing keypath in favorites test
Avi0n Jul 1, 2026
51718ea
fix: lint issues
Avi0n Jul 1, 2026
693635a
refactor: map controls to be simpler
bwees Jul 2, 2026
ab70a3d
chore: remove dead code
bwees Jul 2, 2026
2aeb0af
fix: cli toolbar padding
bwees Jul 2, 2026
48d1aba
Merge pull request #353 from bwees-forks/fix/cli-toolbar-padding
Avi0n Jul 2, 2026
d06d4a6
fix: reverse ordering of map layers (menu is bottom up so entries are…
bwees Jul 2, 2026
202a67d
fix: map centering
bwees Jul 2, 2026
3ae50df
chore: ai code review cleanup
bwees Jul 2, 2026
4ebd8cf
fix(tests): evaluate allSatisfy outside #expect so favorites test com…
Avi0n Jul 2, 2026
0b2be9e
fix(chat): match heard-repeat echoes by content, not time window
Avi0n Jul 2, 2026
ecc6bc9
ci: re-enable spm-tests job
Avi0n Jul 2, 2026
e68598d
test: bump tight poll timeouts to 10s
Avi0n Jul 2, 2026
3f9d1a0
test: don't assert final value of shared DebugLogBuffer global
Avi0n Jul 2, 2026
35f2fc3
test: rename $-prefixed test, doesn't compile
Avi0n Jul 2, 2026
1f2d5c1
ci: allow manual dispatch of test workflow
Avi0n Jul 2, 2026
0d971b7
test: raise happy-path session timeouts to 10s
Avi0n Jul 2, 2026
450c7de
test: isolate UserDefaults in migration and backup tests
Avi0n Jul 2, 2026
0cd7930
test: answer the routing-check contact query in send tests
Avi0n Jul 2, 2026
d33384a
test: give coordinator reload drain a real deadline
Avi0n Jul 2, 2026
d140e15
ci: add job timeouts and hang sampling to spm tests
Avi0n Jul 2, 2026
dd5ef48
ci: run spm tests serially, retry once on hang
Avi0n Jul 2, 2026
0c4e997
Merge pull request #352 from bwees-forks/refactor/map-controls
Avi0n Jul 3, 2026
abf8e58
chore: make team id be in a dev.yml file
bwees Jul 3, 2026
8ef3ac3
fix: make CI
bwees Jul 3, 2026
65a5bc2
Merge pull request #358 from bwees-forks/chore/build-yml-gitignore
Avi0n Jul 3, 2026
5312e12
Bump MARKETING_VERSION to 1.2.0
Avi0n Jul 3, 2026
65099da
fix: path map hops banner overlap
bwees Jul 2, 2026
abec7d2
chore: move bubble into principal bar location
bwees Jul 3, 2026
f9227ca
fix: remove excess padding at top of nex chat contact list
bwees Jul 3, 2026
aed556a
refactor: contact, room, and channel detail pages styling
bwees Jul 3, 2026
62bb7c6
chore: fix button destructive styling and scroll now reveals the shee…
bwees Jul 3, 2026
20277b1
feat: theme aware QR code
bwees Jul 3, 2026
9f3aea0
fix: lint
bwees Jul 3, 2026
5d84225
chore: revert location color
bwees Jul 3, 2026
2b029b8
chore: small ui tweaks
bwees Jul 3, 2026
d20d48a
fix: format
bwees Jul 3, 2026
4581789
Merge pull request #354 from bwees-forks/fix/path-map-hops-banner
Avi0n Jul 6, 2026
610750d
Merge pull request #359 from bwees-forks/fix/new-chat-padding
Avi0n Jul 6, 2026
e64730c
Merge pull request #361 from bwees-forks/feat/dark-mode-qr-code
Avi0n Jul 6, 2026
3211a17
ci: bump FastLane to 2.237.0
Avi0n Jul 6, 2026
e78eb83
test: cover connect/watchdog/backup/retry gaps and prune redundant tests
Avi0n Jul 6, 2026
9cd3298
chore: code review
bwees Jul 7, 2026
defa9a7
test: read PendingSend back through the writing store in reconnect test
Avi0n Jul 7, 2026
27e449e
Merge pull request #364 from Avi0n/chore/test-coverage-and-prune
Avi0n Jul 7, 2026
276a7a6
fix(ble): stop cancelling pending auto-reconnect
Avi0n Jul 7, 2026
faec8fa
fix(ping): honor firmware timeout hint for zero-hop ping
Avi0n Jul 7, 2026
e21afff
feat(telemetry): graph direct/flood/duplicate packet counters
Avi0n Jul 7, 2026
9b59273
fix(remote-nodes): base "New" neighbor badge on full history
Avi0n Jul 8, 2026
4153c3b
fix: move favorite to bottom of first list section
bwees Jul 8, 2026
e594a59
chore: code review nit
bwees Jul 8, 2026
55b5dda
Merge pull request #360 from bwees-forks/refactor/user-page
Avi0n Jul 8, 2026
83520b5
fix: reroute html image urls to link preview
Avi0n Jul 8, 2026
ff63c6c
feat(nodes): open on Favorites when any exist
Avi0n Jul 8, 2026
a824bb2
feat(deeplink): open meshcore URLs from iOS camera
Avi0n Jul 8, 2026
d6ddc61
chore(warnings): clear build warnings from make test-app
Avi0n Jul 8, 2026
15fca89
fix(state): share one inert AppState environment default
Avi0n Jul 8, 2026
0bb9643
feat(chats): show contact nickname for channel senders
Avi0n Jul 8, 2026
dbaa717
fix(radio): correct 869 repeat frequency and only change frequency
Avi0n Jul 8, 2026
5c471f8
fix(chats): scrape og:image when link preview finds none
Avi0n Jul 9, 2026
ae3fc47
fix(logs): queue entries logged before a buffer exists
Avi0n Jul 9, 2026
13d4d6f
fix(ble): hold the link through reconnect and resync
Avi0n Jul 9, 2026
dae26d1
feat(ble): recover pairing after bond loss
Avi0n Jul 9, 2026
44195a3
fix(ble): harden state restoration and reconnect teardown
Avi0n Jul 9, 2026
30fd487
fix(telemetry): show packet total, not just direct, on a single reading
Avi0n Jul 9, 2026
9446a5a
feat(chats): fold inline images under link-content toggle
Avi0n Jul 10, 2026
ab3c13c
fix(chats): rename backup test symbols to satisfy inclusive-language …
Avi0n Jul 10, 2026
19bbf93
fix(fastlane): abort TestFlight upload when build number query fails
Avi0n Jul 10, 2026
9b2d8b4
fix(fastlane): use global max build number for uploads
Avi0n Jul 10, 2026
6d3bb47
feat(connection): reflect auto-reconnect state on the Live Activity
Avi0n Jul 10, 2026
d88f526
fix(remote-nodes): parse ZephCore tx power replies
Avi0n Jul 10, 2026
f38682b
fix(telemetry): share y-axis across packet charts
Avi0n Jul 10, 2026
87f8d08
ui(telemetry): compact section spacing on history lists
Avi0n Jul 10, 2026
84efd88
fix(ble): retry transient auto-reconnect failures
Avi0n Jul 10, 2026
bc9fa12
feat(trace): show success percentage in batch results
Avi0n Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 3 additions & 2 deletions .github/workflows/build-ipa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,12 @@ jobs:
run: |
brew tap FelixHerrmann/tap
brew trust FelixHerrmann/tap
brew install xcodegen swiftgen swift-package-list
brew install make xcodegen swiftgen swift-package-list
echo "$(brew --prefix make)/libexec/gnubin" >> "$GITHUB_PATH"

- name: Generate Xcode project
if: steps.version_check.outputs.should_build == 'true' || github.event_name == 'workflow_dispatch'
run: xcodegen generate
run: make generate

- name: Update acknowledgements
if: steps.version_check.outputs.should_build == 'true' || github.event_name == 'workflow_dispatch'
Expand Down
59 changes: 59 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Lint

on:
pull_request:
branches:
- main
- dev

push:
branches:
- main
- dev

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
linting:
name: Formatting and Linting
runs-on: macos-26

steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Install dependencies
run: command -v swiftlint >/dev/null 2>&1 || brew install swiftlint

- name: Lint
run: swiftlint lint --strict

- name: Format
run: swiftformat --lint --strict .

codegen:
name: Code Generation Checks
runs-on: macos-26

steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive

- name: Install dependencies
run: command -v swiftgen >/dev/null 2>&1 || brew install swiftgen

- name: Regenerate
run: swiftgen config run --config swiftgen.yml

- name: Verify no changes
run: |
if ! git diff --exit-code; then
echo "::error::Generated files are out of date. Run 'swiftgen config run --config swiftgen.yml' and commit the result."
exit 1
fi
83 changes: 78 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
branches:
- main
- dev
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
Expand All @@ -13,9 +14,8 @@ concurrency:
jobs:
spm-tests:
name: SPM Package Tests
# Temporarily disabled
if: false
runs-on: macos-26
timeout-minutes: 25

steps:
- name: Checkout
Expand All @@ -24,14 +24,85 @@ jobs:
submodules: recursive

- name: Test MeshCore
run: swift test --package-path MeshCore
run: |
run_tests() {
rm -f "$RUNNER_TEMP/watchdog-fired"
swift test --package-path MeshCore --no-parallel &
TEST_PID=$!
(
sleep 480
touch "$RUNNER_TEMP/watchdog-fired"
echo "::warning::swift test still running after 8 minutes - sampling process tree"
for pid in $(pgrep -f "MeshCorePackageTests|swiftpm-testing-helper|swift-test" || true); do
echo "=== sample of PID $pid ==="
sample "$pid" 5 2>/dev/null || true
done
kill -9 $TEST_PID 2>/dev/null || true
) &
WATCHDOG=$!
if wait $TEST_PID; then
kill $WATCHDOG 2>/dev/null || true
return 0
else
STATUS=$?
kill $WATCHDOG 2>/dev/null || true
return $STATUS
fi
}
STATUS=0
run_tests || STATUS=$?
if [ "$STATUS" -eq 0 ]; then
exit 0
fi
if [ -f "$RUNNER_TEMP/watchdog-fired" ]; then
echo "::warning::first attempt hung - retrying once"
run_tests
else
exit "$STATUS"
fi

- name: Test MC1Services
run: swift test --package-path MC1Services
run: |
run_tests() {
rm -f "$RUNNER_TEMP/watchdog-fired"
swift test --package-path MC1Services --no-parallel &
TEST_PID=$!
(
sleep 480
touch "$RUNNER_TEMP/watchdog-fired"
echo "::warning::swift test still running after 8 minutes - sampling process tree"
for pid in $(pgrep -f "MC1ServicesPackageTests|swiftpm-testing-helper|swift-test" || true); do
echo "=== sample of PID $pid ==="
sample "$pid" 5 2>/dev/null || true
done
kill -9 $TEST_PID 2>/dev/null || true
) &
WATCHDOG=$!
if wait $TEST_PID; then
kill $WATCHDOG 2>/dev/null || true
return 0
else
STATUS=$?
kill $WATCHDOG 2>/dev/null || true
return $STATUS
fi
}
STATUS=0
run_tests || STATUS=$?
if [ "$STATUS" -eq 0 ]; then
exit 0
fi
if [ -f "$RUNNER_TEMP/watchdog-fired" ]; then
echo "::warning::first attempt hung - retrying once"
run_tests
else
exit "$STATUS"
fi

xcode-build:
name: Xcode Build
runs-on: macos-26
timeout-minutes: 15

steps:
- name: Checkout
Expand All @@ -41,11 +112,13 @@ jobs:

- name: Install dependencies
run: |
brew install make
echo "$(brew --prefix make)/libexec/gnubin" >> "$GITHUB_PATH"
command -v xcodegen >/dev/null 2>&1 || brew install xcodegen
command -v swiftgen >/dev/null 2>&1 || brew install swiftgen

- name: Generate Xcode project
run: xcodegen generate
run: make generate

- name: Cache Xcode build
uses: irgaly/xcode-cache@v1
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/testflight.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@ jobs:
run: |
brew tap FelixHerrmann/tap
brew trust FelixHerrmann/tap
brew install xcodegen swiftgen swift-package-list
gem install fastlane -v 2.236.1
brew install make xcodegen swiftgen swift-package-list
echo "$(brew --prefix make)/libexec/gnubin" >> "$GITHUB_PATH"
gem install fastlane -v 2.237.0

- name: Setup SSH for Match
uses: webfactory/ssh-agent@v0.10.0
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ xcuserdata/

## Xcodegen
*.xcodeproj
dev.yml

## Obj-C/Swift specific
*.hmap
Expand Down
52 changes: 52 additions & 0 deletions .swiftformat
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# SwiftFormat configuration — mirrors the conventions already in the codebase.
# Run: swiftformat . (lint-only: swiftformat --lint .)

--swiftversion 6.2

# Match .swiftlint.yml exclusions
--exclude .build,.worktrees,build,tmp,MC1.xcodeproj,MC1/Resources/Generated,MeshCore/.build,MeshCore-references,MC1Services/.build,fastlane,scripts

# Indentation — 2 spaces, no tabs
--indent 2
--tabwidth 2
--smarttabs enabled
--indentcase false # switch cases align with switch (switch_case_alignment disabled in SwiftLint)

# Line width — aligned with SwiftLint line_length warning
--maxwidth 250

# Imports — alphabetized within a single group
--importgrouping alpha

# Self — codebase omits redundant self; keep only where required
--self remove

# Braces / control flow — K&R, else & catch on the same line as the brace
--allman false
--elseposition same-line
--guardelse auto

# Wrapping — preserve author's line breaks; only balance the closing paren
--wraparguments preserve
--wrapparameters preserve
--wrapcollections preserve
--wrapconditions preserve
--closingparen balanced

# Spacing / misc conventions observed in the code
--voidtype void
--stripunusedargs closure-only
--commas inline # no trailing commas (trailing_comma disabled in SwiftLint)
--emptybraces no-space
--ranges no-space
--operatorfunc spaced
--nospaceoperators ..<,...

# Rules that would introduce churn against the existing style
--disable markTypes # code does not MARK every type declaration
--disable trailingCommas # matches SwiftLint disabling trailing_comma
--disable wrapMultilineStatementBraces
--disable redundantSelf # bugged: https://github.com/nicklockwood/SwiftFormat/issues/1732

# Leave file headers untouched
--header ignore
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ It's usually easier to simply create a feature request GitHub issue with your id
1. **Clone the repository**.
2. **Generate the Xcode project**:
```bash
xcodegen generate
make generate # creates a gitignored dev.yml; set your Apple team ID there for local signing
```
The project is generated by XcodeGen from `project.yml`; never edit `MC1.xcodeproj` directly, as it is overwritten on the next generate. Make project configuration changes in `project.yml`.
3. **Open `MC1.xcodeproj`**.
Expand Down
Loading
Loading