Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
π Docs
π² What
This PR refactors the app's persistence layer by replacing the custom
UserDefaultsClientdependency with TCA's native@Sharedproperty wrapper and centralizedSharedKeydefinitions.Key Changes:
UserDefaultsClientpackage entirelySharedKeyspackage that defines all shared storage keys in one place@Sharedproperty wrapper instead of dependency injectionMigration Details:
AppStorage Keys (in-memory, fast access):
chatReadTimeInterval- Double value for tracking chat read timestampsessionID- Optional String for session identificationdidShowObservationModePrompt- Boolean flagFileStorage Keys (JSON files, structured data):
rideEventSettings- Event notification preferencesappearanceSettings- Theme and UI preferencesprivacyZoneSettings- Location privacy configuration (includes migration from old location)π€ Why
Problems with the Old Approach:
@Sharedfor persistence over custom dependency clientsBenefits of the New Approach:
SharedKeys.swift)@Shared(.chatReadTimeInterval) var valueinstead ofuserDefaultsClient.chatReadTimeInterval@Sharedautomatically provides test isolation without mockingCode Comparison:
Before:
After:
π See
Files Changed:
UserDefaultsClientpackage (3 files, ~100 lines)SharedKeyspackage (2 files, ~80 lines)@SharedPackage Structure:
Affected Features:
βΏοΈ Accessibility
π§ͺ Testing
π Migration Notes
This is a breaking change internally but not for end users:
@SharedstorageNet Result: -109 lines of code, simpler architecture, better testability, more idiomatic TCA π
closes #528