Enhancements
- Allow non-embedded links in asymmetric objects. (PR #6981)
Fixed
- Logging into a single user using multiple auth providers created a separate SyncUser per auth provider. This mostly worked, but had some quirks:
- Sync sessions would not necessarily be associated with the specific SyncUser used to create them. As a result, querying a user for its sessions could give incorrect results, and logging one user out could close the wrong sessions.
- Existing local synchronized Realm files created using version of Realm from August - November 2020 would sometimes not be opened correctly and would instead be redownloaded.
- Removing one of the SyncUsers would delete all local Realm files for all SyncUsers for that user.
- Deleting the server-side user via one of the SyncUsers left the other SyncUsers in an invalid state.
- A SyncUser which was originally created via anonymous login and then linked to an identity would still be treated as an anonymous users and removed entirely on logout.
(PR #6837, since v10.0.0)
- Reading existing logged-in users on app startup from the sync metadata Realm performed three no-op writes per user on the metadata Realm (PR #6837, since v10.0.0).
- If a user was logged out while an access token refresh was in progress, the refresh completing would mark the user as logged in again and the user would be in an inconsistent state (PR #6837, since v10.0.0).
- If querying over a geospatial dataset that had some objects with a type property set to something other than 'Point' (case insensitive) an exception would have been thrown. Instead of disrupting the query, those objects are now just ignored. (PR 6989, since the introduction of geospatial)
- The Swift package failed to link required libraries when building for macCatalyst.
Breaking changes
- SyncUser::provider_type() and realm_user_get_auth_provider() have been removed. Users don't have provider types; identities do.
SyncUser::is_anonymous()
is a more correct version of checking if the provider type is anonymous (PR #6837). - SyncUser no longer has a
local_identity()
.identity()
has been guaranteed to be unique per App ever since v10 (PR #6837). - SyncUser no longer overrides operator==. Pointer equality should be used to compare sync users (PR #6837).
Compatibility
- Fileformat: Generates files with format v23. Reads and automatically upgrade from fileformat v5.
- The metadata Realm used to store sync users has had its schema version bumped. It is automatically migrated to the new version on first open. Downgrading to older version of Realm after upgrading will discard stored user tokens and require logging back in.