Hi everyone,
We’re currently using CKSyncEngine to sync all our locally persisted data across user devices (iOS and macOS) via iCloud.
We’ve noticed something strange and reproducible:
- On iOS, when the CKSyncEngine is initialized with manual sync behavior, both manual calls to fetchChanges() and sendChanges() happen nearly instantly (usually within seconds). Automatic syncing is also very fast.
- On macOS, when the CKSyncEngine is initialized with manual sync behavior, fetchChanges() and sendChanges() are also fast and responsive.
- However, once CKSyncEngine is initialized with automatic syncing enabled on macOS:
-
sendChanges() still appears to transmit changes immediately.
-
But automatic fetching becomes significantly slower — often taking minutes to pick up changes from the cloud, even when new data is already available.
-
Even manual calls to fetchChanges() behave as if they’re throttled or delayed, rather than performing an immediate fetch.
-
Our questions:
- Is this delay in automatic (and post-automatic manual) fetch behavior on macOS expected, or possibly a bug?
- Are there specific macOS constraints that impact CKSyncEngine differently than on iOS?
- Once CKSyncEngine has been initialized in automatic mode, is fetchChanges() no longer treated as a truly manual trigger?
- Is there a recommended workaround to enable fast sync behavior on macOS — for example, by sticking to manual sync configuration and triggering sync using a CKSubscription-based mechanism when remote changes occur?
Any guidance, clarification, or experiences from other developers (or Apple engineers) would be greatly appreciated — especially regarding maintaining parity between iOS and macOS sync performance.
Thanks in advance!