@nirinchev nirinchev released this Sep 27, 2018 · 1 commit to master since this release

Assets 2

Bug fixes

  • Fixed a bug that would typically result in exceptions with a message like An unknown error has occurred. State: *some-number-larger than 127* when subscribing to queries. (dotnet-private#128, since 3.0.0)

@nirinchev nirinchev released this Sep 4, 2018 · 3 commits to master since this release

Assets 2

Enhancements

  • RealmObject inheritors will now raise PropertyChanged after they have been removed from Realm. The property name in the event arguments will be IsValid.
  • Bundle some common certificate authorities on Linux so connecting to ROS instances over SSL should work out of the box for most certificates. Notably, it will now work out of the box for Realm Cloud instances.

Bug fixes

  • When constructing queries that compare an invalid/unmanaged RealmObject (e.g. realm.All<Foo>().Where(f => f.Bar == someBar)), a meaningful exception will now be thrown rather than an obscure ArgumentNullException.
  • Added ShouldCompactOnLaunch to the PCL version of the library. (dotnet-private#125)

@nirinchev nirinchev released this Jul 4, 2018 · 9 commits to master since this release

Assets 2

Enhancements

  • Exposed a ChangeSet.NewModifiedIndices collection that contains information about the indices of the objects that changed in the new version of the collection (i.e. after accounting for the insertions and deletions).
  • Update Fody to 3.0.

Bug fixes

  • WriteAsync will no longer perform a synchronous Refresh on the main thread. (#1729)
  • Trying to add a managed Realm Object to a different instance of the same on-disk Realm will no longer throw an exception.
  • Removed the IList compliance for Realm collections. This fixes an issue which would cause the app to hang on Android when deselecting an item from a ListView bound to a Realm collection.

Breaking Changes

  • SyncConfiguration is now deprecated and will be removed in a future version. Two new configuration classes have been exposed - [QueryBasedSyncConfiguration](https://docs.realm.io/platform/using-synced realms/syncing-data#using-query-based-synchronization) and FullSyncConfiguration. If you were using a SyncConfiguration with IsPartial = true, then change your code to use QueryBasedSyncConfiguration. Similarly, if IsPartial was not set or was set to false, use FullSyncConfiguration.
  • Removed the IList compliance for Realm collections. This will prevent automatic updates of ListViews databound to Realm collections in UWP projects.

@fealebenpae fealebenpae released this Apr 25, 2018 · 20 commits to master since this release

Assets 2

Enhancements

  • Allow [MapTo] to be applied on classes to change the name of the table corresponding to that class. (#1712)
  • Added an improved API for adding subscriptions in partially-synchronized Realms. IQueryable<T>.Subscribe can be used
    to subscribe to any query, and the returned Subscription<T> object can be used to observe the state of the subscription
    and ultimately remove the subscription. See the documentation
    for more information. (#1679)
  • Added a fine-grained permissions system for use with partially-synchronized Realms. This allows permissions to be
    defined at the level of individual objects or classes. See the
    documentation
    for more information. (#1714)
  • Exposed a string-based IQueryable<T>.Filter(predicate) method to enable more advanced querying
    scenarios such as:
    • Following links: realm.All<Dog>().Filter("Owner.FirstName BEGINSWITH 'J'").
    • Queries on collections: realm.All<Child>().Filter("Parents.FirstName BEGINSWITH 'J'") - find all
      children who have a parent whose name begins with J or realm.All<Child>().Filter("Parents.@avg.Age > 50") -
      find all children whose parents' average age is more than 50.
    • Subqueries: realm.All<Person>().Filter("SUBQUERY(Dogs, $dog, $dog.Vaccinated == false).@count > 3") - find all
      people who have more than 3 unvaccinated dogs.
    • Sorting: realm.All<Dog>().Filter("TRUEPREDICATE SORT(Owner.FirstName ASC, Age DESC)") - find all dogs and
      sort them by their owner's first name in ascending order, then by the dog's age in descending.
    • Distinct: realm.All<Dog>().Filter("TRUEPREDICATE DISTINCT(Age) SORT(Name)") - find all dogs, sort them
      by their name and pick one dog for each age value.
    • For more examples, check out the
      javascript query language docs -
      the query syntax is identical - or the NSPredicate Cheatsheet.
  • The SyncConfiguration constructor now accepts relative Uris. (#1720)
  • Added the following methods for resetting the user's password and confirming their email:
    RequestPasswordResetAsync, CompletePasswordResetAsync, RequestEmailConfirmationAsync, and ConfirmEmailAsync.
    These all apply only to users created via Credentials.UsernamePassword who have provided their email as
    the username. (#1721)

Bug fixes

  • Fixed a bug that could cause deadlocks on Android devices when resolving thread safe references. (#1708)

Breaking Changes

  • Uses the Sync 3.0 client which is incompatible with ROS 2.x.
  • Permission has been renamed to PathPermission to more closely reflect its purpose.
    Furthermore, existing methods to modify permissions only work on full Realms. New methods
    and classes are introduced to configure access to a partially synchronized Realm.
  • The type of RealmConfiguration.DefaultConfiguration has changed to RealmConfigurationBase to allow
    any subclass to be set as default. (#1720)
  • The SyncConfiguration constructor arguments are now optional. The user value will default to the
    currently logged in user and the serverUri value will default to realm://MY-SERVER-URL/default where
    MY-SERVER-URL is the host the user authenticated against. (#1720)
  • The serverUrl argument in User.LoginAsync(credentials, serverUrl) and User.GetLoggedInUser(identity, serverUrl)
    has been renamed to serverUri for consistency. (#1721)

@nirinchev nirinchev released this Mar 28, 2018 · 33 commits to master since this release

Assets 2

Enhancements

  • Added an IsDynamic property to RealmConfigurationBase, allowing you to open a Realm file and read its schema from disk. (#1637)
  • Added a new InMemoryConfiguration class that allows you to create an in-memory Realm instance. (#1638)
  • Allow setting elements of a list directly - e.g. foo.Bars[2] = new Bar() or foo.Integers[3] = 5. (#1641)
  • Added Json Web Token (JWT) credentials provider. (#1655)
  • Added Anonymous and Nickname credentials providers. (#1671)

Bug fixes

  • Fixed an issue where initial collection change notification is not delivered to all subscribers. (#1696)
  • Fixed a corner case where RealmObject.Equals would return true for objects that are no longer managed by Realm. (#1698)

Breaking Changes

  • SyncConfiguration.SetFeatureToken is deprecated and no longer necessary in order to use Sync on Linux or server-side features. (#1703)

@nirinchev nirinchev released this Nov 14, 2017 · 50 commits to master since this release

Assets 2

This release brings bug fixes and a new server-side package: Realm.Server. It allows you to create server-side change handlers that observe hundreds or thousands of Realms and get notifications when any of those changes. Read the full announcement here or head over to the documentation.

Enhancements

  • Added an [Explicit] attribute that can be applied to classes or assemblies. If a class is decorated with it, then it will not be included in the default schema for the Realm (i.e. you have to explicitly set RealmConfiguration.ObjectClasses to an array that contains that class). Similarly, if it is applied to an assembly, all classes in that assembly will be considered explicit. This is useful when developing a 3rd party library that depends on Realm to avoid your internal classes leaking into the user's schema. (#1602)

Bug fixes

  • Fixed a bug that would prevent writing queries that check if a related object is null, e.g. realm.All<Dog>().Where(d => d.Owner == null). (#1601)
  • Addressed an issue that would cause the debugger to report an unobserved exception being thrown when "Just My Code" is disabled. (#1603)
  • Calling Realm.DeleteRealm on a synchronized Realm will now properly delete the realm.management folder. (#1621)
  • Fixed a crash when accessing primitive list properties on objects in realms opened with a dynamic schema (e.g. in migrations). (#1629)
Assets 2

This is a major release that includes numerous improvements as well as several highly requested new features. This release is incompatible with the Realm Object Server 1.x series. Comprehensive documentation on migrating an app that uses synchronized Realms from 1.x to 2.x will be published shortly. Apps that are using offline realms only are not affected and can upgrade safely.

  • We're releasing sync for Windows (UWP, .NET Core, and classic desktop) as beta. It has a few rough edges, but we believe it's stable enough to start experimenting with and use it in your development workflow. The stable release of Sync for Windows is expected later this month.
  • Partial Sync is released as a technical preview and not meant to be used in production. It allows you to specify a query and only objects matching that query will be downloaded by the Realm Object Server. The API is very much work in progress and we expect to change it to something more idiomatic for .NET at a later point. A stable release of Partial Sync is expected early next year.
  • We have dropped the constraints of persisted IList<T> properties and you can now specify primitive values as well as RealmObject subtypes.

Below is the full list of changes and enhancements.

Enhancements

  • Added support for collections of primitive values. You can now define properties as IList<T> where T can be any
    type supported by Realm, except for another IList. As a result, a lot of methods that previously had constraints on
    RealmObject now accept any type and may throw a runtime exception if used with an unsupported type argument.
    (#1517)
  • Added HelpLink pointing to the relevant section of the documentation to most Realm exceptions. (#1521)
  • Added RealmObject.GetBacklinks API to dynamically obtain all objects referencing the current one. (#1533)
  • Added a new exception type, PermissionDeniedException, to denote permission denied errors when working with synchronized Realms that
    exposes a method - DeleteRealmUserInfo - to inform the binding that the offending Realm's files should be kept or deleted immediately.
    This allows recovering from permission denied errors in a more robust manner. (#1543)
  • The keychain service name used by Realm to manage the encryption keys for sync-related metadata on Apple platforms is now set to the
    bundle identifier. Keys that were previously stored within the Realm-specific keychain service will be transparently migrated to the
    per-application keychain service. (#1522)
  • Added a new exception type - IncompatibleSyncedFileException - that allows you to handle and perform data migration from a legacy (1.x) Realm file
    to the new 2.x format. It can be thrown when using Realm.GetInstance or Realm.GetInstanceAsync and exposes a GetBackupRealmConfig method
    that allows you to open the old Realm file in a dynamic mode and migrate any required data. (#1552)
  • Enable encryption on Windows. (#1570)
  • Enable Realm compaction on Windows. (#1571)
  • UserInfo has been significantly enhanced. It now contains metadata about a user stored on the Realm Object Server, as well as a list of all user
    account data associated with that user. (#1573)
  • Introduced a new method - User.LogOutAsync to replace the now-deprecated synchronous call. (#1574)
  • Exposed BacklinksCount property on RealmObject that returns the number of objects that refer to the current object via a to-one or a to-many relationship. (#1578)
  • String primary keys now support null as a value. (#1579)
  • Add preview support for partial synchronization. Partial synchronization allows a synchronized Realm to be opened in such a way
    that only objects requested by the user are synchronized to the device. You can use it by setting the IsPartial property on a
    SyncConfiguration, opening the Realm, and then calling Realm.SubscribeToObjectsAsync with the type of object you're interested in,
    a string containing a query determining which objects you want to subscribe to, and a callback which will report the results. You may
    add as many subscriptions to a synced Realm as necessary. (#1580)
  • Ensure that Realm collections (IList<T>, IQueryable<T>) will not change when iterating in a foreach loop. (#1589)

Bug fixes

  • Realm.GetInstance will now advance the Realm to the latest version, so you no longer have to call Refresh manually after that. (#1523)
  • Fixed an issue that would prevent iOS Share Extension projects from working. (#1535)

Breaking Changes

  • This release requires Realm Object Server 2.x.
  • Realm.CreateObject(string className) now has additional parameter object primaryKey. You must pass that when creating a new object using the dynamic API. If the object you're creating doesn't have primary key declared, pass null. (#1381)
  • AcceptPermissionOfferAsync now returns the relative rather than the absolute url of the Realm the user has been granted permissions to. (#1595)

@nirinchev nirinchev released this Oct 3, 2017 · 82 commits to master since this release

Assets 2

This is a major release that includes numerous improvements as well as several highly requested new features. This release is incompatible with the Realm Object Server 1.x series. Comprehensive documentation on migrating an app that uses synchronized Realms from 1.x to 2.x will be published shortly. Apps that are using offline realms only are not affected and can upgrade safely.

  • We're releasing sync for Windows (UWP, .NET Core, and classic desktop) as beta. It has a few rough edges, but we believe it's stable enough to start experimenting with and use it in your development workflow. The stable release of Sync for Windows is expected later this month.
  • Partial Sync is released as a technical preview and not meant to be used in production. It allows you to specify a query and only objects matching that query will be downloaded by the Realm Object Server. The API is very much work in progress and we expect to change it to something more idiomatic for .NET at a later point. A stable release of Partial Sync is expected early next year.
  • We have dropped the constraints of persisted IList<T> properties and you can now specify primitive values as well as RealmObject subtypes.

Below is the full list of changes and enhancements.

Enhancements

  • Added support for collections of primitive values. You can now define properties as IList<T> where T can be any
    type supported by Realm, except for another IList. As a result, a lot of methods that previously had constraints on
    RealmObject now accept any type and may throw a runtime exception if used with an unsupported type argument.
    (#1517)
  • Added HelpLink pointing to the relevant section of the documentation to most Realm exceptions. (#1521)
  • Added RealmObject.GetBacklinks API to dynamically obtain all objects referencing the current one. (#1533)
  • Added a new exception type, PermissionDeniedException, to denote permission denied errors when working with synchronized Realms that
    exposes a method - DeleteRealmUserInfo - to inform the binding that the offending Realm's files should be kept or deleted immediately.
    This allows recovering from permission denied errors in a more robust manner. (#1543)
  • The keychain service name used by Realm to manage the encryption keys for sync-related metadata on Apple platforms is now set to the
    bundle identifier. Keys that were previously stored within the Realm-specific keychain service will be transparently migrated to the
    per-application keychain service. (#1522)
  • Added a new exception type - IncompatibleSyncedFileException - that allows you to handle and perform data migration from a legacy (1.x) Realm file
    to the new 2.x format. It can be thrown when using Realm.GetInstance or Realm.GetInstanceAsync and exposes a GetBackupRealmConfig method
    that allows you to open the old Realm file in a dynamic mode and migrate any required data. (#1552)
  • Enable encryption on Windows. (#1570)
  • Enable Realm compaction on Windows. (#1571)
  • UserInfo has been significantly enhanced. It now contains metadata about a user stored on the Realm Object Server, as well as a list of all user
    account data associated with that user. (#1573)
  • Introduced a new method - User.LogOutAsync to replace the now-deprecated synchronous call. (#1574)
  • Exposed BacklinksCount property on RealmObject that returns the number of objects that refer to the current object via a to-one or a to-many relationship. (#1578)
  • String primary keys now support null as a value. (#1579)
  • Add preview support for partial synchronization. Partial synchronization allows a synchronized Realm to be opened in such a way
    that only objects requested by the user are synchronized to the device. You can use it by setting the IsPartial property on a
    SyncConfiguration, opening the Realm, and then calling Realm.SubscribeToObjectsAsync with the type of object you're interested in,
    a string containing a query determining which objects you want to subscribe to, and a callback which will report the results. You may
    add as many subscriptions to a synced Realm as necessary. (#1580)

Bug fixes

  • Realm.GetInstance will now advance the Realm to the latest version, so you no longer have to call Refresh manually after that. (#1523)
  • Fixed an issue that would prevent iOS Share Extension projects from working. (#1535)

Breaking Changes

  • This release requires Realm Object Server 2.x.
  • Realm.CreateObject(string className) now has additional parameter object primaryKey. You must pass that when creating a new object using the dynamic API. If the object you're creating doesn't have primary key declared, pass null. (#1381)

@nirinchev nirinchev released this Aug 15, 2017 · 110 commits to master since this release

Assets 2

.NET Core support

We’re pleased to introduce .NET Core support on Realm. Developers can now build apps with the Realm Mobile Platform using C# on both the client and server side for a complete end-to-end C# developer experience with Realm. Refer to the documentation for more details on supported platforms. Note that support for synchronized Realms on Windows is coming later this year.

Xamarin.Mac support

In addition to .NET Core, we're announcing official Xamarin.Mac support. Both Native UI and Xamarin.Forms applications are fully supported and for Xamarin.Forms, we're shipping a new update to the Realm.DataBinding package to automatically create transactions for two-way data bound properties.

Enhancements

  • Exposed Realm.WriteCopy API to copy a Realm file and optionally encrypt it with a different key. (#1464)
  • The runtime representations of all Realm collections (IQueryable<T> and IList<T>) now implement the IList interface that is needed for data-binding to ListView in UWP applications. (#1469)
  • Exposed User.RetrieveInfoForUserAsync API to allow admin users to lookup other users' identities in the Realm Object Server. This can be used, for example, to find a user by knowing their Facebook id. (#1486)
  • Added a check to verify there are no duplicate object names when creating the schema. (#1502)
  • Added more comprehensive error messages when passing an invalid url scheme to SyncConfiguration or User.LoginAsync. (#1501)
  • Added more meaningful error information to exceptions thrown by Realm.GetInstanceAsync. (#1503)
  • Added a new type - RealmInteger<T> to expose Realm-specific API over base integral types. It can be used to implement counter functionality in synced realms. (#1466)
  • Added PermissionCondition.Default to apply default permissions for existing and new users. (#1511)

Bug fixes

  • Fix an exception being thrown when comparing non-constant character value in a query. (#1471)
  • Fix an exception being thrown when comparing non-constant byte or short value in a query. (#1472)
  • Fix a bug where calling the non-generic version of IQueryProvider.CreateQuery on Realm's IQueryable results, an exception would be thrown. (#1487)
  • Trying to use an IList or IQueryable property in a LINQ query will now throw NotSupportedException rather than crash the app. (#1505)

@nirinchev nirinchev released this Jun 20, 2017 · 143 commits to master since this release

Assets 2

1.5.0 (2017-06-20)

Enhancements

  • Exposed new API on the User class for working with permissions: (#1361)
    • ApplyPermissionsAsync, OfferPermissionsAsync, and AcceptPermissionOfferAsync allow you to grant, revoke, offer, and accept permissions.
    • GetPermissionOffers, GetPermissionOfferResponses, and GetPermissionChanges allow you to review objects, added via the above mentioned methods.
    • GetGrantedPermissionsAsync allows you to inspect permissions granted to or by the current user.
  • When used with RealmConfiguration (i.e. local Realm), Realm.GetInstanceAsync will perform potentially costly operation, such as executing migrations or compaction on a background thread. (#1406)
  • Expose User.ChangePasswordAsync(userId, password) API to allow admin users to change other users' passwords. (#1412)
  • Expose SyncConfiguration.TrustedCAPath API to allow providing a custom CA that will be used to validate SSL traffic to the Realm Object Server. (#1423)
  • Expose Realm.IsInTransaction API to check if there's an active transaction for that Realm. (#1452)

Bug fixes

  • Fix a crash when querying over properties that have [MapTo] applied. (#1405)
  • Fix an issue where synchronized Realms did not connect to the remote server in certain situations, such as when an application was offline when the Realms were opened but later regained network connectivity. (#1407)
  • Fix an issue where incorrect property name will be passed to RealmObject.PropertyChanged subscribers when the actual changed property is below a Backlink property. (#1433)
  • Fix an exception being thrown when referencing Realm in a PCL test assembly without actually using it. (#1434)
  • Fix a bug when SyncConfiguration.EnableSSLValidation would be ignored when passed to Realm.GetInstanceAsync. (#1423)

Breaking Changes

  • The constructors of PermissionChange, PermissionOffer, and PermissionOfferResponse are now private. Use the new User.ApplyPermissionsAsync, User.OfferPermissionsAsync, and User.AcceptPermissionOfferAsync API. (#1361)
  • User.GetManagementRealm and User.GetPermissionRealm are now deprecated. Use the new permission related API on User to achieve the same results. (#1361)
  • User.ChangePassword(password) has been renamed to User.ChangePasswordAsync(password). (#1412)
  • Removed the following obsolete API: (#1425)
    • Realm.ObjectForPrimaryKey<T>(long id)
    • Realm.ObjectForPrimaryKey<T>(string id)
    • Realm.ObjectForPrimaryKey(string className, long id)
    • Realm.ObjectForPrimaryKey(string className, string id)
    • Realm.Manage<T>(T obj, bool update)
    • Realm.Close()
    • Realm.CreateObject<T>()
    • IOrderedQueryable<T>.ToNotifyCollectionChanged<T>(Action<Exception> errorCallback)
    • IOrderedQueryable<T>.ToNotifyCollectionChanged<T>(Action<Exception> errorCallback, bool coalesceMultipleChangesIntoReset)
    • IRealmCollection<T>.ObjectSchema
  • Realm.DeleteRealm now throws an exception if called while an instance of that Realm is still open.