Add explicit native Core Location capture to the menu-bar app. Continuous capture runs independently of windows, and a single capture has its own lifecycle. Permission, availability, original fix timestamp/accuracy and last-known fallback are visible in Location status. The app starts paused and requests permission only after an explicit capture action.
Use the native macOS privacy description and persisted accuracy preferences without requiring Keychain access for capture. Sending and SOS remain disabled; the complete tracking/queue lifecycle and activity log remain in #11 and #13.
Validation
Strict SwiftLint, Debug/Release builds and binary/signature checks passed locally with Apple Development and explicit CI ad hoc signing.
All 51 tests in four suites passed, including synthetic location, permission, stale callbacks, independent capture, fallback and persistence coverage.
Real-Mac checks passed for permission handling, capture while windows are closed/another app is foregrounded, pause, single capture, timestamp/accuracy, lock and sleep/wake.
Replacing build 1 with build 2 using the same certificate, Team, bundle identifier and designated requirement preserved location permission and Keychain access without renewed prompts. Certificate renewal continuity remains unverified.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/jayanezj/traccar-client-macos/pull/25
**Author:** [@jayanezj](https://github.com/jayanezj)
**Created:** 10/25/2026
**Status:** ✅ Merged
**Merged:** 10/25/2026
**Merged by:** [@jayanezj](https://github.com/jayanezj)
**Base:** `main` ← **Head:** `feature/4-core-location-identity`
---
### 📝 Commits (1)
- [`3f35129`](https://github.com/jayanezj/traccar-client-macos/commit/3f351296b8c7a75be0b5e05df64f28d9479b53b7) feat: add native local location capture (#4)
### 📊 Changes
**18 files changed** (+1030 additions, -38 deletions)
<details>
<summary>View changed files</summary>
📝 `.github/workflows/ci.yml` (+1 -1)
📝 `README.md` (+33 -10)
📝 `TraccarClient.xcodeproj/project.pbxproj` (+19 -4)
📝 `TraccarClient/Application/TraccarClientApp.swift` (+22 -4)
📝 `TraccarClient/Configuration/ConfigurationModel.swift` (+7 -7)
📝 `TraccarClient/Configuration/ConfigurationPersistence.swift` (+19 -1)
➕ `TraccarClient/Interface/LocationStatusView.swift` (+53 -0)
📝 `TraccarClient/Interface/SettingsView.swift` (+7 -3)
📝 `TraccarClient/Interface/TrackingMenu.swift` (+30 -4)
➕ `TraccarClient/Location/CoreLocationProvider.swift` (+158 -0)
➕ `TraccarClient/Location/LocationModel.swift` (+199 -0)
➕ `TraccarClient/Location/LocationTypes.swift` (+102 -0)
📝 `TraccarClient/Resources/Info.plist` (+2 -0)
➕ `TraccarClientTests/LocationFixTests.swift` (+47 -0)
➕ `TraccarClientTests/LocationModelTests.swift` (+326 -0)
📝 `scripts/check-local.sh` (+2 -2)
📝 `scripts/test.sh` (+2 -2)
📝 `scripts/verify-build.sh` (+1 -0)
</details>
### 📄 Description
## Changes
Add explicit native Core Location capture to the menu-bar app. Continuous capture runs independently of windows, and a single capture has its own lifecycle. Permission, availability, original fix timestamp/accuracy and last-known fallback are visible in Location status. The app starts paused and requests permission only after an explicit capture action.
Use the native macOS privacy description and persisted accuracy preferences without requiring Keychain access for capture. Sending and SOS remain disabled; the complete tracking/queue lifecycle and activity log remain in #11 and #13.
## Validation
- Strict SwiftLint, Debug/Release builds and binary/signature checks passed locally with Apple Development and explicit CI ad hoc signing.
- All 51 tests in four suites passed, including synthetic location, permission, stale callbacks, independent capture, fallback and persistence coverage.
- Real-Mac checks passed for permission handling, capture while windows are closed/another app is foregrounded, pause, single capture, timestamp/accuracy, lock and sleep/wake.
- Replacing build 1 with build 2 using the same certificate, Team, bundle identifier and designated requirement preserved location permission and Keychain access without renewed prompts. Certificate renewal continuity remains unverified.
- No positions were sent to a receiver.
[Final decisions and manual validation](https://github.com/jayanezj/traccar-client-macos/issues/4#issuecomment-6399189792).
Closes #4
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
jayanezj
added this to the M2 - Native location and app identity milestone 2026-10-25 16:00:21 +01:00
jayanezj
changed title from [PR #25] Add native local location capture and permission handling to [PR #25] [MERGED] Add native local location capture and permission handling2026-10-25 17:00:20 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/jayanezj/traccar-client-macos/pull/25
Author: @jayanezj
Created: 10/25/2026
Status: ✅ Merged
Merged: 10/25/2026
Merged by: @jayanezj
Base:
main← Head:feature/4-core-location-identity📝 Commits (1)
3f35129feat: add native local location capture (#4)📊 Changes
18 files changed (+1030 additions, -38 deletions)
View changed files
📝
.github/workflows/ci.yml(+1 -1)📝
README.md(+33 -10)📝
TraccarClient.xcodeproj/project.pbxproj(+19 -4)📝
TraccarClient/Application/TraccarClientApp.swift(+22 -4)📝
TraccarClient/Configuration/ConfigurationModel.swift(+7 -7)📝
TraccarClient/Configuration/ConfigurationPersistence.swift(+19 -1)➕
TraccarClient/Interface/LocationStatusView.swift(+53 -0)📝
TraccarClient/Interface/SettingsView.swift(+7 -3)📝
TraccarClient/Interface/TrackingMenu.swift(+30 -4)➕
TraccarClient/Location/CoreLocationProvider.swift(+158 -0)➕
TraccarClient/Location/LocationModel.swift(+199 -0)➕
TraccarClient/Location/LocationTypes.swift(+102 -0)📝
TraccarClient/Resources/Info.plist(+2 -0)➕
TraccarClientTests/LocationFixTests.swift(+47 -0)➕
TraccarClientTests/LocationModelTests.swift(+326 -0)📝
scripts/check-local.sh(+2 -2)📝
scripts/test.sh(+2 -2)📝
scripts/verify-build.sh(+1 -0)📄 Description
Changes
Add explicit native Core Location capture to the menu-bar app. Continuous capture runs independently of windows, and a single capture has its own lifecycle. Permission, availability, original fix timestamp/accuracy and last-known fallback are visible in Location status. The app starts paused and requests permission only after an explicit capture action.
Use the native macOS privacy description and persisted accuracy preferences without requiring Keychain access for capture. Sending and SOS remain disabled; the complete tracking/queue lifecycle and activity log remain in #11 and #13.
Validation
Final decisions and manual validation.
Closes #4
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
[PR #25] Add native local location capture and permission handlingto [PR #25] [MERGED] Add native local location capture and permission handling