You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add SyncClientConfig::security_access_group which allows specifying the access group to use for the sync metadata Realm's encryption key. Setting this is required when sharing the metadata Realm between apps on Apple platforms (PR #7552).
When connecting to multiple server apps, a unique encryption key is used for each of the metadata Realms rather than sharing one between them (#7552).
Introduce the new SyncUser interface which can be implemented by SDKs to use sync without the core App Services implementation (or just for greater control over user behavior in tests). (PR #7300).
Improve perfomance of "chained OR equality" queries for UUID/ObjectId types and RQL parsed "IN" queries on string/int/uuid/objectid types. (.Net #3566, since the introduction of these types)
Introducing Query::in() which allows SDKs to take advantage of improved performance when building equality conditions against many constants. (PR #7582)
Fixed
SyncUser::all_sessions() included sessions in every state except for waiting for access token, which was weirdly inconsistent. It now includes all sessions. (PR #7300).
App::all_users() included logged out users only if they were logged out while the App instance existed. It now always includes all logged out users. (PR #7300).
Deleting the active user left the active user unset rather than selecting another logged-in user as the active user like logging out and removing users did. (PR #7300).
Fixed several issues around encrypted file portability (copying a "bundled" encrypted Realm from one device to another):
Fixed Assertion failed: new_size % (1ULL << m_page_shift) == 0 when opening an encrypted Realm less than 64Mb that was generated on a platform with a different page size than the current platform. (#7322, since v13.17.1)
Fixed a DecryptionFailed exception thrown when opening a small (<4k of data) Realm generated on a device with a page size of 4k if it was bundled and opened on a device with a larger page size (since the beginning).
Fixed an issue during a subsequent open of an encrypted Realm for some rare allocation patterns when the top ref was within ~50 bytes of the end of a page. This could manifest as a DecryptionFailed exception or as an assertion: encrypted_file_mapping.hpp:183: Assertion failed: local_ndx < m_page_state.size(). (#7319)
Non-streaming download sync progress notification is fixed for flexible sync Realms where before it was sometimes stopping to emit values right after the registration of the callback (#7561).
Schema initialization could hit an assertion failure if the sync client applied a downloaded changeset while the Realm file was in the process of being opened (#7041, since v11.4.0).
Queries using query paths on Mixed values returns inconsistent results (#7587, since v14.0.0)
Enabling 'cancel_waits_on_nonfatal_error' does not cancel waits during location update while offline (#7527, since v13.26.0)
Breaking changes
The following things have been renamed or moved as part of moving all of the App Services functionality to the app namespace:
SyncUser -> app::User. Note that there is a new, different type named SyncUser.
SyncUser::identity -> app::User::user_id. The "identity" word was overloaded to mean two unrelated things, and one has been changed to user_id everywhere.
The ClientAppDeallocated error code no longer exists as this error code can no longer occur. (PR #7300).
Some fields have moved from SyncClientConfig to AppConfig. AppConfig now has a SyncClientConfig field rather than it being passed separately to App::get_app(). (PR #7300).
Sync user management has been removed from SyncManager. This functionality was already additionally available on App. (PR #7300).
AuditConfig now has a base_file_path field which must be set by the SDK rather than inheriting it from the SyncManager. (PR #7300).
App::switch_user() no longer returns a user. The return value was always exactly the passed-in user and any code which needs it can just use that. (PR #7300).
Non-streaming download progress callback no longer stops reporting values immediately after the registration (if the progress update has happened earlier), but waits for the next batch of data to start syncing to report its progress, since the previous behaviour was not useful (PR #7561).
Compatibility
Fileformat: Generates files with format v24. Reads and automatically upgrade from fileformat v10. If you want to upgrade from an earlier file format version you will have to use RealmCore v13.x.y or earlier.
Internals
App metadata storage has been entirely rewritten in preparation for supporting sharing metadata realms between processes. (PR #7300).
The metadata disabled mode has been replaced with an in-memory metadata mode which performs similarly and doesn't work weirdly differently from the normal mode. The new mode is intended for testing purposes, but should be suitable for production usage if there is a scenario where metadata persistence is not needed. (PR #7300).
The ownership relationship between App and User has changed. User now strongly retains App and App has a weak cache of Users. This means that creating a SyncConfig or opening a Realm will keep the parent App alive, rather than things being in a broken state if the App is deallocated. (PR #7300.
A new CMake define REALM_APP_SERVICES can be used to compile out core's default implmentation of the application services. (#7268)
Fix a race condition in Promise which could result in an assertion failure if it was destroyed immediately after a get() on the Future returned. The problematic scenario only occurred in test code and not in library code (PR #7602).
Catch2 is no longer required as a submodule if the REALM_NO_TESTS flag is set.
Sha-2 is no longer required as a submodule on Windows if linking with OpenSSL.
The Catch2 submodule has moved to test/external/catch.
Fix possible file corruption if using Transaction::copy_to if nested collections are present.
Evergreen config was udpated so most linux CI testing is done on ubuntu 22.04 on aarch64 with clang 18, upgrading from clang 11 on ubuntu 20.04 mostly on x86_64 (PR #7475).
Evergreen config was updated to move most MacOS testing to MacOS 14 on arm64 with Xcode 15.2, updating from Macos 11 on x86_64 with Xcode 13.1 (PR #7618).