diff --git a/.github/templates/build-packages.yml b/.github/templates/build-packages.yml index ff3f6638b8..5854261d0b 100644 --- a/.github/templates/build-packages.yml +++ b/.github/templates/build-packages.yml @@ -8,21 +8,19 @@ uses: #@ actionCache with: path: 'C:\docfx' - key: docfx-2.70.4 + key: docfx-2.75.2 - name: Download docfx if: inputs.build-docs && steps.check-docfx-cache.outputs.cache-hit != 'true' run: | - Invoke-WebRequest -Uri https://github.com/dotnet/docfx/releases/download/v2.70.4/docfx-win-x64-v2.70.4.zip -OutFile C:\docfx.zip + Invoke-WebRequest -Uri https://github.com/dotnet/docfx/releases/download/v2.75.2/docfx-win-x64-v2.75.2.zip -OutFile C:\docfx.zip Expand-Archive -Path C:\docfx.zip -DestinationPath C:\docfx shell: powershell - - _: #@ template.replace(setupDotnet("6.0.402", ifCondition = "inputs.build-docs")) + - _: #@ template.replace(setupDotnet("7.0.x", ifCondition = "inputs.build-docs")) - name: Build docs if: inputs.build-docs env: DOCFX_SOURCE_BRANCH_NAME: ${{ github.head_ref }} run: | - New-Item global.json - Set-Content global.json '{ "sdk": { "version": "6.0.402" } }' C:\docfx\docfx Docs/docfx.json #! the link generated by docfx is incorrect - it points to diff --git a/.github/workflows/build-packages.yml b/.github/workflows/build-packages.yml index e788a73dc6..89283c2877 100755 --- a/.github/workflows/build-packages.yml +++ b/.github/workflows/build-packages.yml @@ -219,25 +219,23 @@ jobs: uses: nirinchev/cache@29e8e4dd9148ea81f9e188480132072cb6cc92d8 with: path: C:\docfx - key: docfx-2.70.4 + key: docfx-2.75.2 - name: Download docfx if: inputs.build-docs && steps.check-docfx-cache.outputs.cache-hit != 'true' run: | - Invoke-WebRequest -Uri https://github.com/dotnet/docfx/releases/download/v2.70.4/docfx-win-x64-v2.70.4.zip -OutFile C:\docfx.zip + Invoke-WebRequest -Uri https://github.com/dotnet/docfx/releases/download/v2.75.2/docfx-win-x64-v2.75.2.zip -OutFile C:\docfx.zip Expand-Archive -Path C:\docfx.zip -DestinationPath C:\docfx shell: powershell - name: Configure .NET uses: actions/setup-dotnet@607fce577a46308457984d59e4954e075820f10a if: inputs.build-docs with: - dotnet-version: 6.0.402 + dotnet-version: 7.0.x - name: Build docs if: inputs.build-docs env: DOCFX_SOURCE_BRANCH_NAME: ${{ github.head_ref }} run: | - New-Item global.json - Set-Content global.json '{ "sdk": { "version": "6.0.402" } }' C:\docfx\docfx Docs/docfx.json - name: Update Improve this doc links run: | diff --git a/CHANGELOG.md b/CHANGELOG.md index d91eed0881..0ebb5eb16a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## vNext (TBD) +## 11.7.0 (2024-02-05) ### Enhancements * Automatic client reset recovery now does a better job of recovering changes when changesets were downloaded from the server after the unuploaded local changes were committed. If the local Realm happened to be fully up to date with the server prior to the client reset, automatic recovery should now always produce exactly the same state as if no client reset was involved. (Core 13.24.1) diff --git a/Docs/docfx.json b/Docs/docfx.json index 2414e7bcd4..6408a3e5ed 100644 --- a/Docs/docfx.json +++ b/Docs/docfx.json @@ -79,7 +79,7 @@ "_appTitle": "Realm", "_appFaviconPath": "images/favicon.ico", "_appLogoPath": "images/logo.svg", - "_appFooter": "Copyright © 2020-2023 Realm
Generated by DocFX", + "_appFooter": "Copyright © 2020-2024 Realm
Generated by DocFX", "_gitContribute": { "repo": "https://github.com/realm/realm-dotnet.git", "branch": "main", diff --git a/Realm/AssemblyInfo.props b/Realm/AssemblyInfo.props index e61394bc4a..014872e843 100644 --- a/Realm/AssemblyInfo.props +++ b/Realm/AssemblyInfo.props @@ -1,7 +1,7 @@ Realm .NET - 11.6.1 + 11.7.0 Realm is a mobile database: a replacement for SQLite Realm Inc. Copyright © $([System.DateTime]::Now.ToString(yyyy)) Realm Inc. diff --git a/Realm/Realm.Unity/package.json b/Realm/Realm.Unity/package.json index b85cda4903..1e748e7e95 100644 --- a/Realm/Realm.Unity/package.json +++ b/Realm/Realm.Unity/package.json @@ -1,6 +1,6 @@ { "name": "io.realm.unity", - "version": "11.6.1", + "version": "11.7.0", "displayName": "Realm", "description": "Realm is an embedded, object-oriented database that lets you build real-time, always-on applications. With Realm, data is directly exposed as objects and queryable by code, removing the need for ORM's riddled with performance & maintenance issues. Additionally, objects and collections in Realm are always live, meaning that they always reflect the latest data stored in the database. You can subscribe to changes, letting you keep your UI consistently up to date.\nThe .NET Realm SDK also provide access to Atlas App Services, a secure backend that can sync data between devices, authenticate and manage users, and run serverless JavaScript functions.", "unity": "2021.1", diff --git a/Realm/Realm/Attributes/BacklinkAttribute.cs b/Realm/Realm/Attributes/BacklinkAttribute.cs index 6334630360..02c3195d84 100644 --- a/Realm/Realm/Attributes/BacklinkAttribute.cs +++ b/Realm/Realm/Attributes/BacklinkAttribute.cs @@ -47,10 +47,13 @@ namespace Realms /// } /// /// - [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] + [AttributeUsage(AttributeTargets.Property)] public sealed class BacklinkAttribute : Attribute { - internal string Property { get; } + /// + /// Gets the property that is on the other end of the relationship. + /// + public string Property { get; } /// /// Initializes a new instance of the class. diff --git a/Realm/Realm/DatabaseTypes/QueryArgument.cs b/Realm/Realm/DatabaseTypes/QueryArgument.cs index b195b6a8ee..d92e1c4958 100644 --- a/Realm/Realm/DatabaseTypes/QueryArgument.cs +++ b/Realm/Realm/DatabaseTypes/QueryArgument.cs @@ -300,7 +300,7 @@ private QueryArgument(RealmValue? realmValue = null, GeoShapeBase? geoValue = nu public static implicit operator QueryArgument(RealmObjectBase? value) => new(value); /// - /// Implicitly constructs a from . + /// Implicitly constructs a from . /// /// The value to store in the . /// A containing the supplied . diff --git a/Realm/Realm/Exceptions/RealmDecryptionFailedException.cs b/Realm/Realm/Exceptions/RealmDecryptionFailedException.cs index 5eab8fe6e5..d0c8b7f7e0 100644 --- a/Realm/Realm/Exceptions/RealmDecryptionFailedException.cs +++ b/Realm/Realm/Exceptions/RealmDecryptionFailedException.cs @@ -16,11 +16,14 @@ // //////////////////////////////////////////////////////////////////////////// +using Realms.Sync; + namespace Realms.Exceptions { /// /// An exception, raised when file decryption is unsuccessful, most likely due to invalid - /// . + /// . + /// . /// public class RealmDecryptionFailedException : RealmFileAccessErrorException { @@ -28,4 +31,4 @@ internal RealmDecryptionFailedException(string message) : base(message) { } } -} \ No newline at end of file +} diff --git a/Realm/Realm/Extensions/CollectionExtensions.cs b/Realm/Realm/Extensions/CollectionExtensions.cs index af2770d543..8532802f25 100644 --- a/Realm/Realm/Extensions/CollectionExtensions.cs +++ b/Realm/Realm/Extensions/CollectionExtensions.cs @@ -260,7 +260,7 @@ public static void Move(this IList list, int from, int to) /// /// The to observe for changes. /// Type of the elements in the dictionary. - /// + /// /// The collection, implementing . public static IRealmCollection> AsRealmCollection(this IDictionary dictionary) { @@ -310,7 +310,7 @@ public static IQueryable AsRealmQueryable(this IDictionary dic /// /// The to observe for changes. /// Type of the elements in the dictionary. - /// + /// /// The callback to be invoked with the updated . /// /// A subscription token. It must be kept alive for as long as you want to receive change notifications. @@ -326,7 +326,7 @@ public static IDisposable SubscribeForNotifications(this IDictionary /// The to observe for changes. /// Type of the elements in the dictionary. - /// + /// /// The callback to be invoked with the updated . /// /// A subscription token. It must be kept alive for as long as you want to receive change notifications. @@ -403,10 +403,7 @@ public static IQueryable Filter(this IQueryable query, string predicate /// joe.dogs.Filter("Name BEGINSWITH $0", "R"); /// /// - /// - /// Examples of the NSPredicate syntax - /// - /// NSPredicate Cheatsheet + /// public static IQueryable Filter(this IList list, string predicate, params QueryArgument[] arguments) where T : IRealmObjectBase { @@ -612,4 +609,4 @@ private static void PopulateCollectionCore(ICollection? source, ICollectio } } } -} \ No newline at end of file +} diff --git a/Realm/Realm/Schema/ObjectSchema.cs b/Realm/Realm/Schema/ObjectSchema.cs index 54151619e3..2ab4ccfe7e 100644 --- a/Realm/Realm/Schema/ObjectSchema.cs +++ b/Realm/Realm/Schema/ObjectSchema.cs @@ -305,7 +305,7 @@ public Builder(Type type) return this; } - protected override string GetKey(Property item) => item.Name; + private protected override string GetKey(Property item) => item.Name; } } } diff --git a/Realm/Realm/Schema/RealmSchema.cs b/Realm/Realm/Schema/RealmSchema.cs index 56ed0a4fe1..4aa37d4362 100644 --- a/Realm/Realm/Schema/RealmSchema.cs +++ b/Realm/Realm/Schema/RealmSchema.cs @@ -355,7 +355,7 @@ public Builder Add(Type type) return this; } - protected override string GetKey(ObjectSchema item) => Argument.ValidateNotNull(item, nameof(item)).Name; + private protected override string GetKey(ObjectSchema item) => Argument.ValidateNotNull(item, nameof(item)).Name; } } } diff --git a/Realm/Realm/Schema/SchemaBuilderBase.cs b/Realm/Realm/Schema/SchemaBuilderBase.cs index 0da115fb2a..cad345a67c 100644 --- a/Realm/Realm/Schema/SchemaBuilderBase.cs +++ b/Realm/Realm/Schema/SchemaBuilderBase.cs @@ -102,7 +102,7 @@ protected void Add(T item) /// true if the builder contains the specified item; false otherwise. public bool Contains(string name) => _values.ContainsKey(name); - protected abstract string GetKey(T item); + private protected abstract string GetKey(T item); /// public IEnumerator GetEnumerator() => _values.Values.GetEnumerator(); diff --git a/Realm/Realm/Sync/AppConfiguration.cs b/Realm/Realm/Sync/AppConfiguration.cs index ad74a29f09..6fca0de95b 100644 --- a/Realm/Realm/Sync/AppConfiguration.cs +++ b/Realm/Realm/Sync/AppConfiguration.cs @@ -94,7 +94,7 @@ public string BaseFilePath /// Gets or sets the encryption key for user metadata on this device. /// /// - /// This will not change the encryption key for individual Realms. This should still be set in + /// This will not change the encryption key for individual Realms. This should still be set in /// when opening the . /// /// The user metadata encryption key.