feat: expose recovery actions only for recoverable SyncEngine.SharingErrors - #533
Open
MojtabaHs wants to merge 4 commits into
Open
feat: expose recovery actions only for recoverable SyncEngine.SharingErrors#533MojtabaHs wants to merge 4 commits into
SyncEngine.SharingErrors#533MojtabaHs wants to merge 4 commits into
Conversation
ArchimedesTrajano
approved these changes
Aug 22, 2026
ArchimedesTrajano
left a comment
There was a problem hiding this comment.
Thank you! I think this can be useful until the error is exposed, and potentially even longer. This covers my needs.
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.
Summary
Expose a public recovery action for
SyncEngine.SharingErrorwithout making the error type itself public.This allows callers to determine when a sharing operation can be recovered by starting the sync engine or sending pending changes and retrying.
Usage
For example, a sharing operation can use the recovery action to synchronize the engine and retry when possible:
Motivation
Following the recent thread on the sqlite-data Slack channel, it turns out that
SharingErroris currently private, but some of its errors provide actionable recovery guidance in theirdebugDescription.For example,
.recordMetadataNotFoundexplicitly suggests callingsendChanges()to force synchronization:sqlite-data/Sources/SQLiteData/CloudKit/CloudKitSharing.swift
Lines 138 to 143 in f6bd67a
Without a public recovery API, callers cannot reliably identify this condition and perform the suggested recovery.
This change exposes the recovery contract while keeping the underlying
SharingErrorand its internal reasons private.Changes
SyncEngine.SharingErrorRecoveryAction.SyncEngine.RecoverableSharingErrorto expose recovery actions without exposingSharingError..startAndRetryfor.syncEngineNotRunning..sendChangesAndRetryfor.recordMetadataNotFound.