[PR #24] [MERGED] Persist receiver configuration and device identity #24

Closed
opened 2026-10-25 11:00:20 +01:00 by jayanezj · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/jayanezj/traccar-client-macos/pull/24
Author: @jayanezj
Created: 10/25/2026
Status: ✅ Merged
Merged: 10/25/2026
Merged by: @jayanezj

Base: main ← Head: feature/3-configuration-persistence


📝 Commits (1)

  • 026cd6a feat: persist local configuration and device identity (#3)

📊 Changes

23 files changed (+1441 additions, -41 deletions)

View changed files

📝 .github/workflows/ci.yml (+6 -0)
📝 .gitignore (+1 -0)
📝 .swiftlint.yml (+1 -0)
➕ Configuration/Signing.local.xcconfig.example (+5 -0)
➕ Configuration/Signing.xcconfig (+9 -0)
📝 README.md (+52 -9)
📝 TraccarClient.xcodeproj/project.pbxproj (+34 -7)
📝 TraccarClient.xcodeproj/xcshareddata/xcschemes/TraccarClient.xcscheme (+10 -0)
📝 TraccarClient/Application/TraccarClientApp.swift (+44 -1)
➕ TraccarClient/Configuration/AppConfiguration.swift (+116 -0)
➕ TraccarClient/Configuration/ConfigurationModel.swift (+121 -0)
➕ TraccarClient/Configuration/ConfigurationPersistence.swift (+164 -0)
📝 TraccarClient/Interface/SettingsView.swift (+160 -21)
📝 TraccarClient/Interface/TrackingMenu.swift (+2 -2)
➕ TraccarClient/Interface/WindowFocusController.swift (+63 -0)
➕ TraccarClientTests/ConfigurationTests.swift (+371 -0)
➕ TraccarClientTests/KeychainAccessTests.swift (+106 -0)
➕ TraccarClientTests/WindowFocusTests.swift (+104 -0)
📝 scripts/build.sh (+2 -0)
📝 scripts/check-local.sh (+6 -1)

...and 3 more files

📄 Description

Settings now persists the receiver URL and device identifier together in Keychain, with tracking preferences in versioned UserDefaults. Blank identifiers generate eight digits on save; supplied identifiers retain their exact text. Configuration never starts tracking or contacts a receiver.

Keychain access loads silently when available, explains authorization only when needed, and preserves saved data on cancellation. Settings has explicit fields, transient status messages, Dock/Command-Tab window access and validated focus recovery after denial.

Local builds use free Apple Development signing with ignored local Team/certificate configuration. PR CI explicitly uses ad hoc signing without credentials. Release signing and downloaded-DMG validation remain in #17 and #16; certificate-renewal continuity remains an untested assumption.

Validation:

  • Strict SwiftLint, Debug/Release, 26 deterministic tests, arm64/macOS 15.0 minimum and signature checks passed locally.
  • The same builds/tests passed in explicit CI signing mode without local signing configuration; opposite signature modes are rejected.
  • Manually verified real-Keychain persistence, identifiers/URL validation, cancellation/retry, focus after two denials and the Settings/Dock/About/status-message regression.
  • Both hosted build toolchains must pass before integration; physical minimum-OS distribution testing is separate.

Final implementation decisions.

Closes #3


🔄 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/24 **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/3-configuration-persistence` --- ### 📝 Commits (1) - [`026cd6a`](https://github.com/jayanezj/traccar-client-macos/commit/026cd6aa402f7e8a6da0b28fefaee9cd5e25f65c) feat: persist local configuration and device identity (#3) ### 📊 Changes **23 files changed** (+1441 additions, -41 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/ci.yml` (+6 -0) 📝 `.gitignore` (+1 -0) 📝 `.swiftlint.yml` (+1 -0) ➕ `Configuration/Signing.local.xcconfig.example` (+5 -0) ➕ `Configuration/Signing.xcconfig` (+9 -0) 📝 `README.md` (+52 -9) 📝 `TraccarClient.xcodeproj/project.pbxproj` (+34 -7) 📝 `TraccarClient.xcodeproj/xcshareddata/xcschemes/TraccarClient.xcscheme` (+10 -0) 📝 `TraccarClient/Application/TraccarClientApp.swift` (+44 -1) ➕ `TraccarClient/Configuration/AppConfiguration.swift` (+116 -0) ➕ `TraccarClient/Configuration/ConfigurationModel.swift` (+121 -0) ➕ `TraccarClient/Configuration/ConfigurationPersistence.swift` (+164 -0) 📝 `TraccarClient/Interface/SettingsView.swift` (+160 -21) 📝 `TraccarClient/Interface/TrackingMenu.swift` (+2 -2) ➕ `TraccarClient/Interface/WindowFocusController.swift` (+63 -0) ➕ `TraccarClientTests/ConfigurationTests.swift` (+371 -0) ➕ `TraccarClientTests/KeychainAccessTests.swift` (+106 -0) ➕ `TraccarClientTests/WindowFocusTests.swift` (+104 -0) 📝 `scripts/build.sh` (+2 -0) 📝 `scripts/check-local.sh` (+6 -1) _...and 3 more files_ </details> ### 📄 Description Settings now persists the receiver URL and device identifier together in Keychain, with tracking preferences in versioned UserDefaults. Blank identifiers generate eight digits on save; supplied identifiers retain their exact text. Configuration never starts tracking or contacts a receiver. Keychain access loads silently when available, explains authorization only when needed, and preserves saved data on cancellation. Settings has explicit fields, transient status messages, Dock/Command-Tab window access and validated focus recovery after denial. Local builds use free Apple Development signing with ignored local Team/certificate configuration. PR CI explicitly uses ad hoc signing without credentials. Release signing and downloaded-DMG validation remain in #17 and #16; certificate-renewal continuity remains an untested assumption. Validation: - Strict SwiftLint, Debug/Release, 26 deterministic tests, arm64/macOS 15.0 minimum and signature checks passed locally. - The same builds/tests passed in explicit CI signing mode without local signing configuration; opposite signature modes are rejected. - Manually verified real-Keychain persistence, identifiers/URL validation, cancellation/retry, focus after two denials and the Settings/Dock/About/status-message regression. - Both hosted build toolchains must pass before integration; physical minimum-OS distribution testing is separate. [Final implementation decisions](https://github.com/jayanezj/traccar-client-macos/issues/3#issuecomment-6396087703). Closes #3 --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
jayanezj added this to the M1 - Foundation and CI milestone 2026-10-25 11:00:20 +01:00
jayanezj added the pull-request label 2026-10-25 11:00:20 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jayanezj/traccar-client-macos#24