12.5.0 (2025-01-02)
重大な変更
- Windows SDK は 32 ビット ARM のサポートを終了したため、 arm32 での UWP のサポートが削除されました。 (PR #3683 )
- Xamarinプロジェクトのサポートは非推奨になりました。 SDK が動作することは引き続き期待されますが、5 月 にMicrosoftによってサポートが終了したため、 Xamarin はアクティブにテストできなくなりました。 (PR #3683 )
- .NET 6 のサポートは非推奨です。 まだすべてが動作することが予想されていますが、将来のリリースでは SDK を最新の LTS バージョン(8.0)に再ターゲットする予定です。 (PR #3683 )
修正済み
- Logger のログレベルが 情報 よりも高く設定されている場合に、クライアントアプリのシャットダウン中にクラッシュする問題を修正しました。 (コア 14.12.1)
- ファイル::rw_lock() がファイルを開くのに失敗した場合、例外メッセージにはファイル名が含まれません。 (コア 14.12.1)
- ベース名の長さが 240 から 250 の間の場合、ハッシュされたファイル名へのフォールバックは失敗します。 (コア 14.12.1)
- 多数の述語 OR を伴うクエリを実行すると、一部のプラットフォームでクラッシュが発生する可能性があります(Apple では厳密に弱い順序付けチェックが失敗します)。 (コア 14.13.0)
互換性
- Realm Studio: 15.0.0以降。
内部
- Core 14.13.0を使用します。
12.4.1 (2024-09-16)
修正済み
- 管理対象のウェブ ソケットを使用している場合に、不正なバイナリ メッセージによってサーバーが接続を切断し、クライアントに再度接続とアップロードを強制するという、高負荷下で同期トラフィックが中断される可能性を修正しました。 (問題番号3671 )。
互換性
- Realm Studio: 15.0.0以降。
内部
- Core 14.12.0を使用します。
12.4.0 (2024-08-25)
機能強化
SyncTimeoutOptions
にReconnectBackoffOptions
プロパティを導入し、同期クライアントが再接続を試みる前に適用する遅延を制御できるようにしました。 (PR # 3661 )。- ロールと権限の変更でローカル Realm を更新するためにクライアントのリセットが必要なくなりました。 (コア14.11.0 )
- Windows デバイスでは、Device Sync は接続を確立するときに、Windows 信頼できるルート認証局証明書ストア内の SSL 証明書を追加で検索します。 (コア14.11.0 )
- 同期ログ ステートメントのプレフィックスに App Services 接続 ID が含まれるようになりました(例:
Connection[1:<connection id>] Session[1]: log message
)。これは、トラブルシューティング中に同期アクティビティとサーバー ログの相関を容易にするためにです。 (コア14.11.2 ) - 埋め込みオブジェクトのレプリケーション ログでテーブル選択数を減らすことで、同期ブートストラップのパフォーマンスを向上させます。 (コア14.12.0 )
- コミット後も可変サブスクリプションの期間固定されていた読み取りロックを解放しました。 これによりリソースが早期に解放されるため、開始状態が大きい場合の同期ブートストラップのパフォーマンスが向上する可能性があります。 (コア14.12.0 )
- クライアントリセットサイクル検出では、前回のリカバリ試行が同じコア バージョンによって実行されているかどうか、およびリカバリが再度試行されない場合はチェックされるようになりました。 (コア14.12.0 )
- OpenSSL のバンドルされたバージョンを3.3.1に更新しました。 (コア14.12.0 )
修正済み
- 同期ダウンロードの進行状況は、ブートストラップが完了したときにのみアップデートされ、最初の完了の前には常に0になり、その後は永久に1になりました。 (コア14.11.0 )
- セッションが一時停止されているときにセッションが再開されると、同期クライアントがクラッシュする可能性があります。 (コア14.11.0 )
- ブートストラップのダウンロード中に切断または再起動によって同期セッションが中断された場合、セッションが再接続してブートストラップをダウンロードする際に、前回のブートストラップの古いデータが含まれる可能性があります。 これにより、データベースに保存されるオブジェクトがサーバーの実際の状態と一致しない可能性があり、書込みが保証される可能性があります。 (コア14.11.0 )
- 確認するダウンロードがない場合の不要なサーバー往復を修正しました。 (コア14.11.0 )
- ログイン時にユーザー プロファイルが取得される前にアプリ サブスクライブのコールバックが起動され、コールバックを使用すると空のユーザー プロファイルが表示されました。 (コア14.11.1 )
- 同期クライアントが重複置換書込みエラーを報告する場合があります。 (コア14.11.2 )
- リンク全体で int またはタイムスタンプ プロパティで RQL "BETWEen" クエリを使用する際に、「無効な列キー」の例外を修正しました。 (コア14.12.0 )
- ArrayElas とClear の指示に関連する競合解決のバグを修正しました。このバグにより、"Invalid pre_size" の例外が同期を妨げることがあります。 (コア14.12.0 )
- 競合の解決中に結果整合性を妨げるバグを修正しました。 影響を受けるクライアントでは、データの相違と整合性エラーが発生する可能性があり、 (コア14.12.0 )
- バンドルされている OpenSSL にリンクされている場合に、Linux ARMv 7システムでネイティブ Realm ライブラリをロードする際に
unexpected reloc type 0x03
などのエラーが発生する問題を修正しました。 (コア14.12.0 ) Realm.Copy()
ソース Realm が同期された Realm である場合、アップロードされていないローカル変更があることを示す例外を誤ってスローすることがあります。 (コア14.12.0 )
互換性
- Realm Studio: 15.0.0以降。
内部
- Core 14.12.0を使用します。
12.3.0 (2024-07-17)
非推奨
Logger
は非推奨となり、代わりにRealmLogger
が優先されています。Logger
は現在、 から派生しています。 (PR # 3634 )Logger.LogLevel
set
およびget
アクセスユーザは非推奨になりました。RealmLogger.SetLogLevel()
とRealmLogger.GetLogLevel()
を使用してください(以下の拡張機能を参照してください)。Logger.Function(Action<LogLevel, string> logFunction)
は非推奨になりました。RealmLogger.Function(Action<LogLevel, LogCategory, string> logFunction)
を使用してください(以下の拡張機能を参照してください)。
機能強化
ShouldCompactOnLaunch
をRealmConfiguration
だけでなくSyncConfiguration
に設定できるようにします。 (問題番号3617 )- オブジェクトの作成によって生成されるローカル トランザクション ログのサイズが縮小され、挿入が多いトランザクションのパフォーマンスが向上します(Core 14.10.0 )。
- 整数とタイムスタンプに対する範囲クエリのパフォーマンスが向上しました。
Realm.All<T>().Filter(...)
で "BITWEen" 操作を使用する必要があります。 (コア14.10.1 ) ShouldCompactOnLaunch
をRealmConfiguration
だけでなくSyncConfiguration
に設定できるようになりました (問題番号3617 )LogCategory
を導入し、ログに記録するメッセージのカテゴリと重大度レベルをより制御できるようにしました。 (PR # 3634 )- 特定の
LogCategory
に対して 設定とLogLevel
の取得が許可されます。 カテゴリの階層はLogCategory.Realm
から始まります。RealmLogger.SetLogLevel(LogLevel.Warn, LogCategory.Realm.Sync); RealmLogger.GetLogLevel(LogCategory.Realm.Sync.Client.Session); // LogLevel.Warn
- 呼び出されたときに
LogLevel
、LogCategory
、および メッセージを受け取るコールバックを受け入れる関数ロガーを追加しました。RealmLogger.Default = RealmLogger.Function((level, category, message) => /* custom implementation */);
- カテゴリを取る
RealmLogger.Log()
オーバーロードを追加しました。 既存のLog()
API はLogCategory.Realm.SDK
で暗黙的にログを記録します。RealmLogger.Default.Log(LogLevel.Warn, LogCategory.Realm, "A warning message");
- 特定の
- Windows デバイスでは、Device Sync は接続を確立するときに、Windows 信頼できるルート認証局証明書ストア内の SSL 証明書を追加で検索します。 (コア14.11.0 )
- ロールと権限の変更でローカル Realm を更新するためにクライアントのリセットが必要なくなりました。 (コア14.11.0 )
修正済み
ForCurrentlyOutstandingWork
進行状況通知では、登録後すぐにコールバックを呼び出しません。 代わりに、最初の更新を取得するには、いくつかのデータが受信されるまで待機する必要があります。通知機能を登録したときにすでに追いついていた場合は、サーバーがダウンロードを送信するまで長時間待機することになる可能性があり、通知子。 (コア14.8.0 )- 圧縮後、ファイルのアップグレードがトリガーされます。
ShouldDeleteIfMigrationNeeded
がtrue
に設定されていると、これによりデータが失われる可能性があります。 (発行番号3583 、コア14.9.0 ) - 削除されたオブジェクトを置換引数として
.Filter()
に渡すと、invalid RQL for table
で始まるメッセージを含む混乱したエラーがスローされます。 代わりに、より記述的なエラーがスローされるようになりました。 (問題番号3619 ) - 新しいクライアントのリセット条件(フレキシブルな同期移行のロールバックなど)が最初のクライアント リセット条件が完了する前に発生した場合に、AutoClientResetFailed によって失敗する可能性がある問題を修正します。 (コア14.10.0 )
- Windows 上の暗号化ファイルの最大サイズは、x 64でも最大サイズが2 GB でした。これは64ビット Windows 上の32ビット型である
off_t
の内部使用によるものです。 (コア14.10.0 ) - 暗号化コードの動作は、システムページサイズに応じて異なる動作をしなくなりました。これにより、ページサイズが異なるプラットフォーム間で暗号化された Realm ファイルのコピーに関連するバグの原因が完全に排除されるはずです。 既知の重大なバグの 1 つが( RNET- 1141 )であり、この場合、書き込みシステムよりもページ サイズが大きいシステムでファイルを開くと、ファイルのまだ書き込みが行われていないセクションを読み込もうとします。 (コア14.10.0 )
- マルチプロセス シナリオで暗号化されたファイルからのステイル読み取りが発生する可能性のある複雑なシナリオがいくつかありました。 これらはヒットするのが非常に困難であり、通常、アサーションの失敗または DecryptionFailure がスローされたため、クラッシュにつながります。 (コア14.10.0 )
- 暗号化されたファイルには、別のスレッドが限られた範囲にメモリを書き込んでいる間にメモリ ブロックをmecpy できる正常なデータ 競合がいくつかあります。 このような状況が発生した場合、その範囲からの読み取りは論理的に不可能ですが、スレッドサマリータはこれをかなりためてます。 TSAN で実行すると操作が遅くなり、この良好な競合を回避できます。 (コア14.10.0 )
- 全文検索用に文字列をトークン化すると、範囲外の値が [- 1 、 255 ] から
isspace()
に渡される可能性があり、これは未定義の動作です。 (コア14.10.0 ) - Flexible Sync Realm を非同期に起動すると、すべてのデータがダウンロードされるのを待たない場合があります。 (コア14.10.1 )
- アップグレードされた ファイルで
RealmValue
のリストをクリアすると、アサーションが失敗します。 (コア14.10.1 ) - ネストされたコレクションに割り当てると、予期しないマージ結果が生じる可能性があります。 (コア14.10.2 )
- リンクがネストされたリスト、ネストされた辞書、最上位の辞書、または
RealmValue
のリストからのもので、ソーステーブルに256を超えるオブジェクトがある場合に、間違ったオブジェクトからバックリンクを削除する問題を修正しました。 これは、オブジェクトを削除するときにarray_backlink.cpp:112: Assertion failed: int64_t(value >> 1) == key.value
として明示される可能性があります。 (コア14.10.3 ) - リンクのあるネストされたコレクションを含むクラスターの削減/再結合を修正しました。 オブジェクトを削除すると、これは
array.cpp:319: Array::move() Assertion failed: begin <= end [2, 1]
として明示される可能性があります。 (コア14.10.3 ) Session.WaitForUpload()
はコミットの処理方法に一貫性がなく、アップロードする変更セットを生成しませんでした。 以前は、アップロードされるのを待機しているすべてのコミットが空の場合にはすぐに完了することもありますが、サーバーの往復を待機する場合もあります。 常にすぐに完了するようになりました。 (コア14.10.3 )- プロパティが再マッピングされる場合、内部名を指定して
.Filter("... SORT/DISTINCT(mapped-to-name)")
を呼び出すと、Cannot sort on key path 'NAME': property 'PersonObject.NAME' does not exist
のようなエラーがスローされる可能性があります。 (コア14.10.4 ) - セッションが一時停止されているときにセッションが再開されると、同期クライアントがクラッシュする可能性があります。 (コア14.11.0 )
- ブートストラップのダウンロード中に切断または再起動によって同期セッションが中断された場合、セッションが再接続してブートストラップをダウンロードする際に、前回のブートストラップの古いデータが含まれる可能性があります。 これにより、データベースに保存されるオブジェクトがサーバーの実際の状態と一致しない可能性があり、書込みが保証される可能性があります。 (コア14.11.0 )
- 確認するダウンロードがない場合の不要なサーバー往復を修正しました。 (コア14.11.0 )
互換性
- Realm Studio: 15.0.0以降。
内部
- Core v 14.10.3を使用します。
12.2.0 (2024-05-22)
機能強化
SyncProgress.ProgressEstimate
の計算が改善されました。 (問題番号3580 )移行前の Realm のオブジェクトに対応する移行後の Realm 内のオブジェクトを検索できるヘルパーである
Migration.FindInNewRealm
のサポートを追加しました。 (問題番号3600 )生成されたクラスのフィールド名とプロパティ名を変更する難読化ツールとの互換性を向上させるために、生成された
RealmSchema
フィールドに[System.Reflection.Obfuscation]
を追加しました。 (問題番号3574 )RealmValue
に含まれるRealmValue
のリストと辞書(IList<RealmValue>
とIDictionary<string, RealmValue>
)のサポートを追加しました。 リストと辞書には任意の数のコレクション自体を含めることができます。 新しい静的メソッドRealmValue.List
とRealmValue.Dictionary
を使用するか、List
、RealmValue[]
、Dictionary
などの一般的なタイプから変換する場合は暗黙的な 演算子を使用して、既存のコレクションをRealmValue
に変換することができます。 最後に、新しい変換メソッドAsList
とAsDictionary
を使用して、含まれるコレクションを取得できます。 例:var list = new List<RealmValue> { 1, true, "stringVal" }; var rvo = realm.Write(() => { return realm.Add(new RealmValueObject { RealmValueProperty = list}); }); var retrievedList = rvo.RealmValueProperty.AsList();
(PR # 3441 )
修正済み
User.Changed
通知内からApp.CurrentUser
にアクセスすると、デッドロックが発生します。 (コア14.7.0 )- 辞書内の同じキーに同じリンクを複数回挿入すると、 オブジェクトへの複数のバックリンクが誤って作成されます。 これはその後クラッシュすることはありませんが、
RealmObject.BacklinksCount
によって返される値とバックリンク カウントに関連するクエリに影響するようになりました。 (コア14.7.0 ) - コレクションにプリミティブ値が含まれている場合に
RealmObject.DynamicApi.GetList/Set/Dictionary
が失敗する問題を修正しました。 (問題番号3597 )
互換性
- Realm Studio: 15.0.0以降。
内部
- Core 14.7.0を使用します。
12.1.0 (2024-05-01)
機能強化
- 実行時にアプリケーションのベース URL を更新するための実験的な API を追加しました -
App.UpdateBaseUriAsync()
。 これはエッジ サーバーとクラウド間のローリングに使用されることを目的としています。 (問題番号3521 )
修正済み
MongoClient.Collection.FindOneAsync
からの戻り値が null 可能なドキュメント になり、フィルターに一致するオブジェクトがない場合にはnull
が返される可能性があることをより明示的に示すことができます。 (PR # 3586 )- すでに削除された辞書キーの削除を統合する際のクラッシュを修正しました。 (コア14.5.2 )
App.AllUsers
には、アプリ インスタンスが存在するときにログアウトしたユーザーのみが含まれます。 ログアウトしたすべてのユーザーが常に含まれるようになりました。 (コア14.6.0 )- 暗号化ファイルの移植性に関するいくつかの問題を修正しました(「バンドル」で暗号化された Realm をあるデバイスから別のデバイスにコピーする際): (Core 14.6.0 )
- 現在のプラットフォームとは異なるページ サイズのプラットフォームで生成された64 Mb 未満の暗号化された Realm を開くときに、
Assertion failed: new_size % (1ULL << m_page_shift) == 0
を修正しました。 - ページ サイズが4 k のデバイスで生成される小規模(データ4 k 未満)の Realm を開くときにスローされる
DecryptionFailed
例外を修正しました。 - 上位参照がページの末尾から約50バイト以内にある場合に、まれに割り当てられるパターンについて、暗号化された Realm をその後開く際の問題を修正しました。 これは、 DecryptionFailed 例外またはアサーション(
encrypted_file_mapping.hpp:183: Assertion failed: local_ndx < m_page_state.size()
として明示される可能性があります。
- 現在のプラットフォームとは異なるページ サイズのプラットフォームで生成された64 Mb 未満の暗号化された Realm を開くときに、
- Realm ファイルを開くプロセス中に同期クライアントがダウンロードした変更セットを適用すると、スキーマ初期化でアサーションが失敗する可能性がありました。 (コア14.6.0 )
- UUID/ObjectId RQLstringObjectId型および /int/uuid/ 型に対する 解析済みの「IN」クエリの「連鎖 OR 等価」クエリのパフォーマンスを向上させます。(コア14.6.0 )
- 検索条件に空のstringがあるstringプロパティで評価するときに、IN クエリ(またはパターン
x == 1 OR x == 2 OR x == 3
のクエリ)を実行するとバグを修正しました。 代わりに null stringを検索すると、空のstringを持つ一致は として評価されるようになりました。 (コア14.6.1 )
互換性
- Realm Studio: 15.0.0以降。
内部
- Core 14.6.1を使用します。
12.0.0 (2024-04-17)
ファイル形式のバージョンがダンプされました。 古いファイルは自動的にアップグレードされますが、.NET SDK の古いバージョンでダウングレードして開くことはできません。
重大な変更
MongoClient.Collection
でメソッドを使用するときに、MongoDB.Bson
属性を持つクラスに注釈を付ける必要なく、Realm クラスの自動直列化と逆直列化を追加しました。 この機能は、さまざまなタイプのデフォルトのシリアル化を変更するために必要です(DateTimeOffset
を含む)。 以前の直列化を使用する場合は、任意の直列化が行われる前にRealm.SetLegacySerialization
を呼び出す必要があります。そうしないと、expected として機能しない可能性があります。 # 3459SyncProgress.TransferredBytes
とSyncProgress.TransferableBytes
は削除され、代わりにSyncProgress.ProgressEstimate
は削除されました。これは、現在の進行状況の推定パーセンテージを表す、 0.0と1.0の間の double 値です。 (問題番号3478 )- RealmCore v 5.23.9によって生成された Realm ファイルからのアップグレードのサポート (Realm .NET v 5.0.1 )またはそれ以前のバージョンはサポートされなくなりました。 (コア14.0.0 )
String
とbyte[]
は比較とクエリ用に厳密に型指定されるようになりました。 この変更は、RealmValue
プロパティで string 定数をクエリする場合に特に関連します。string のみが返されるようになりました。 バイナリ データの検索が必要な場合は、その型を 定数で指定する必要があります。 RQL(.Filter()
)では、バイナリ定数を指定する新しい方法は、RealmValueProp = bin('xyz')
またはRealmValueProp = binary('xyz')
を使用することです。 (コア14.0.0 )- string のソート順序が、同様の英文字をグループ化するのではなく、標準の Unicode コードポイント順序を使用するように変更されました。 注目すべき変更は、"aAbBzZ" から "ABZabz" への変化です。 (コア14.0.0 )
- RQL(
Filter()
)では、@type
操作を使用してクエリを実行する場合は、オブジェクトへのリンクを照合するためにobjectlink
を使用する必要があります。object
は辞書型用に予約されています。 (コア14.0.0 ) - ファイル形式23以下( 12.0.0より前の Realm .NET バージョン)の Realm を読み取り専用モードで起動すると、クラッシュします。 (コア14.0.0 )
機能強化
RealmValue
のメモリ使用量を削減しました。 (PR # 3441 )IRealmCollection.SubscribeForNotifications
を使用する場合にキーパス コレクションを渡すためのサポートを追加しました(KeyPathsCollection
)。KeyPathsCollection
を渡すと、 は通知を発生させるプロパティの変更を指定できるようになります。KeyPathsCollection
は次の方法で取得できます。KeyPathsCollection.Of
またはKeyPathsCollection.Of<T>
メソッドを使用して明示的にビルドするList
またはKeyPath
または string の配列からの変換を使用して暗黙的にビルドする。- それぞれ、完全な通知と低速な通知で静的値
Full
とShallow
のいずれかを取得します。
KeyPath
は、string からの暗黙的な変換、またはKeyPath.ForExpression<T>
メソッドを使用して式から構築されたものから取得できます。以下に例を挙げます。
var query = realm.All<Person>(); KeyPath kp1 = "Email"; KeyPath kp2 = KeyPath.ForExpression<Person>(p => p.Name); KeyPathsCollection kpc; //Equivalent declarations kpc = KeyPathsCollection.Of("Email", "Name"); kpc = KeyPathsCollection.Of<Person>(p => p.Email, p => p.Name); kpc = new List<KeyPath> {"Email", "Name"}; kpc = new List<KeyPath> {kp1, kp2}; query.SubscribeForNotifications(NotificationCallback, kpc);
(PR # 3501 )
Realm オブジェクトで逆シリアル化できる MongoDB からドキュメントのコレクションを取得するために
MongoClient.GetCollection<T>
メソッドを追加しました。 このメソッドはMongoClient.GetDatabase(dbName).GetCollection(collectionName)
と同じように機能しますが、データベース名とコレクション名は Realm オブジェクト クラスから自動的に派生します。 # 3414RQL
.Filter()
string>、 =、 、string 。(コア13.27.0 )OpenSSL のバンドルされたバージョンを3.2.0に更新しました。 (コア13.27.0 )
小数点128プロパティのストレージが最適化され、必要な値に応じて、個々の値が0ビット(すべて null の場合)、 32ビット、 64ビット、または128ビットを使用します。 (コア14.0.0 )
RQL でコレクション インデックスのサポートを追加しました(
Filter()
クエリ)。 例:var people = realm.All<Person>(); //People whose first dog is called "Fluffy" var query1 = people.Filter("ListOfDogs[FIRST].Name = $0", "Fluffy") //People whose last dog is called "Fluffy" var query2 = people.Filter("ListOfDogs[LAST].Name = $0", "Fluffy") //People whose second dog is called "Fluffy" var query3 = people.Filter("ListOfDogs[2].Name = $0", "Fluffy") //People that have a dog called "Fluffy" var query4 = people.Filter("ListOfDogs[*].Name = $0", "Fluffy") //People that have 3 dogs var query5 = people.Filter("ListOfDogs[SIZE] = $0", 3)
(コア14.0.0 )
インデックス付き
RealmValue
プロパティのサポートを追加しました。 (PR # 3544 )複雑なスキーマと処理する非常に単純な変更を伴うオブジェクト通知子のパフォーマンスを20 % も向上させます。 (コア14.2.0 )
非常に多くの通知子の数が75 % ほどある場合にパフォーマンスを向上させます。 (コア14.2.0 )
ページ サイズが4 k を超えるプラットフォーム(例: arm 64 Apple プラットフォーム)における、サイズが256ページ未満のファイルのファイル圧縮パフォーマンスを向上させます。 (コア14.4.0 )
AppConfiguration
のデフォルトのベース URL がservices.cloud.mongodb.com
を指すように更新されました。 https://www.mongodb.com/ja-jp/docs/atlas/app-services/domain-migration/を参照してください。 詳しくは、 を参照してください。 (問題番号3551 )
修正済み
indexed_property == NONE {x}
のように x ではなく x にのみ一致するという RQL(.Filter()
)クエリを修正しました。 これは、等価(==、または IN)のインデックス付きプロパティが 1 つのアイテムのリストでNONE
と一致する場合にのみ適用されます。 定数リストに複数の値が含まれている場合は、正しく動作していました。 (コア13.27.0 )- 自動クライアントリセットリカバリ中に回復された変更セットをアップロードすると、「無効なサーバー バージョン」エラーが発生し、新しいクライアントがリセットされる可能性があります。 (コア13.27.0 )
- 一致しないプレフィックス検索を使用した全文インデックスのクラッシュを修正しました。 (コア13.27.0 )
- 同期セッションの開始中に Assertion
failed: m_initiated
によるクラッシュを修正しました。 (コア13.27.0 ) - ユーザー スレッドが同期イベント ループで m_ finalized を読み取るために競合する可能性がある TSAN 違反を修正しました。 (コア13.27.0 )
- クライアントがリセットされる前に Realm ファイルをバックアップする際に既存のファイルの上書きにつながる可能性のあるマイナーな競合状態を修正します。 (コア13.27.0 )
- コレクションがクリアされたときに true となるブール値プロパティ
ChangeSet.IsCleared
もIDictionary
に対しても発生し、それがISet
とIList
に整合しました。 (コア14.0.0 ) - インデックス付きの
RealmValue
プロパティに対する等価クエリを修正しました。 (コア14.0.0 ) - 8388606を超えるリンクが特定のオブジェクトを指している場合に発生するクラッシュを修正しました。
IDictionary
のNULL
値をクエリする際に間違った結果を修正しました。 (コア14.0.0 )- Apple 以外の ARM 64デバイスで生成され、別のプラットフォームにコピーされた Realm(およびその逆)は、並べ替え順序の違いにより、移植できませんでした。 これは、非 ASCII 文字に最初の違いがある文字列またはバイナリに影響します。 これらの項目は、string に長い共通のプレフィックス(> 200文字)がある場合、セットやインデックス付き列では見つからないことがあります。 (コア14.0.0 )
- LnkLst から項目を削除するときに無効化されたリンクが表示され、その後にそれらのリスト項目にアクセスする際にクラッシュや例外が発生する可能性がある問題を修正しました。 これは、同期 Realms に影響します。以前に、 1000を超えるリンクを含むリンクリスト内のリンクを別のクライアントが削除し、その後同じリストからさらにローカルな削除を行うことで、リストのアイテムが1000未満になった場合があります。 (コア14.2.0 )
- プロセスが終了している間にバックグラウンド スレッドで Realm を開くことに関連する誤ったクラッシュを修正しました。 (コア14.3.0 )
- オフライン時にキャッシュされたユーザーでRealmを開くと致命的なエラーが発生し、セッションが接続を再試行しない問題を修正します。 (コア14.4.0 )
- ファイルが別のスレッドで閉じられるRealm中にあります。 (コア14.5.0 )
- デフォルトの null 値(埋め込みオブジェクトが含まれる)の設定時にレプリケーション コードのバグが原因で実行される履歴を修正しました。 (コア14.5.0 )
- ログアウトし、非同期コミットのコールバックが実行されない場合、null ポインター例外がトリガーされる可能性があります。 (コア14.5.0 )
互換性
- Realm Studio: 15.0.0以降。
内部
- Core 14.5.1を使用します。
11.7.0 (2024-02-05)
機能強化
- アップロードされていないローカル変更がコミットされた後にサーバーから変更セットがダウンロードされた場合の、自動クライアント リセット復元の機能が向上しました。 クライアントのリセット前にローカル Realm がサーバーと完全に最新の状態になった場合、クライアントのリセットが関係のない場合は、自動リカバリによって常に とまったく同じ状態が生成されるようになります。 (コア13.24.1 )
- ブートストラップ アプリケーション中にスローされた例外は、処理されない例外でプログラムを終了するのではなく、ユーザーに表示されるようになりました。 (コア13.25.0 )
- string 定数に対する
Realm.Filter()
クエリで>
、>=
、<
、<=
演算子を使用することを許可します。 これは、大文字と小文字を区別する辞書編集レベルの比較です。 RQL.Filter()
string>、 =、 、string 。(コア13.26.0 - 14 -gcf 25 f) Session.GetProgressObservable
は Flexible Sync で使用できるようになりました。 (問題番号3478 )
修正済み
- 自動クライアントリセットリカバリでは、リストに回復不能な変更を加えた書込み (write) を復元するときに、リストに挿入が重複します。 既存のエントリの変更または削除など)、サブスクリプションの変更、および リストへのエントリを追加する書込みが行われます。 (コア13.24.0 )
- クライアントのリセット回復中に、リンクのセットが欠落しているか、回復を妨げる例外がスローされる可能性があります。 (コア13.24.0 )
- リカバリを使用してクライアントをリセット中に、リカバリにも追加されなかったインデックスに対して操作された
IList<RealmObject>
またはIList<RealmValue>
での移動またはセット操作を回復する場合、オフライン中に別のクライアントによって削除されたオブジェクトへのリンクは次のようになりますリカバリ クライアントによって再作成された場合。 ただし、これらのリンクのオブジェクトにはプライマリキーのみが入力され、他のすべてのフィールドはデフォルト値になります。 現在は、これらのクラスター オブジェクトを作成する代わりに、復元されるリストは削除されたリンクをスキップします。 (コア13.24.0 ) - パーティションベースの同期 Realms でクライアントリセットリカバリのためにローカル変更を再適用中にエラーが発生すると、クライアントリセットの試行が記録されず、クライアントリセットの自動回復の試行と失敗の無限のループが発生する可能性があります。 (コア13.24.0 )
- ローカル クロックが2015 - 01 - 01 T 00 : 00 : 00 Z より遅れている場合、変更セットのタイムスタンプは正しくありません。 こうした場合、同期クライアントは例外をスローするようになりました。 (コア13.24.1 )
- 柔軟な同期Realmを最初に開くときにクライアントのリセットがトリガーされた場合、構成にはリセット コールバックの前後に初期サブスクリプションのコールバックがあり、最初のサブスクリプションのコールバックは読み取りトランザクションを終了せずに開始されました(これは通常、ケース)、リセットされたコールバック後に の固定Realmを開くと、BreadVersion 例外がtriggerされます。 (コア13.24.1 )
- 柔軟な同期での自動クライアント リセット回復は、回復された変更を複数の書込みトランザクションに適用し、書込みロックを解放します。 (コア13.24.1 )
- クラス名の長さが57の場合、 56の制限が誤って適用されたため、クライアント リセットがクラッシュします。 (コア13.24.1 )
- RealmApple/Linux を使用し、exFAT ファイル システムに Realm を保存しているときに、同じプロセスで複数の暗号化された ファイルを開くことで発生する可能性がある「復号に失敗した」例外の複数の原因を修正しました。(コア13.24.1 )
- 同期クライアントのクラッシュを引き起こす可能性のあるいくつかのエラーを修正しました。 (コア13.25.0 )
- 多くのバックリンクに関係する最初の同期ダウンロードのパフォーマンスが低下している。 (コア13.25.1 )
- 4.3.0は脆弱性としてマークされているため、 System.Net.Security の最小バージョンを4.3.2に明示的に引き上げました(詳細については、 NuGet ページの 非推奨の通知 を参照してください)。
- posix_false() と フォールバック を使用してスペースを手動で消費するときに、 EOPNOTS App を処理します。 これにより、Android ユーザーは制限のあるファイルシステムで Realm を開くことができるようになります。 (コア13.26.0 )
- ダウンロード メッセージがブートストラップ メッセージと誤った場合、アプリケーションは incoming_changesets.size() != 0でクラッシュする可能性があります。 これは、同期セッションが特定の時点で一時停止され、その後再開された場合に発生することがあります。 (コア13.26.0 )
- ARMv 7 Linux(Core 13.26.0 )で
__atomic_is_lock_free
などの記号の欠落を報告するエラーを修正しました - 自動クライアントリセットリカバリ中に回復された変更セットをアップロードすると、「無効なサーバー バージョン」エラーが発生し、新しいクライアントがリセットされる可能性があります。 (Core 13.26.0 - 14 -gcf 25 f)
- サブスクライブがすでに失敗した後にサブスクリプション変更通知を登録するときに、エラー理由string内の無効なデータを修正しました。 (Core 13.26.0 - 14 -gcf 25 f)
互換性
- Realm Studio: 13.0.0以降。
内部
- Core v 13.26.0 - 14 -gcf 25 f を使用します。
11.6.1 (2023-11-17)
修正済み
- ブートストラップ中にセッションが中断された場合に、FLX サブスクリプションがサーバーに送信されない問題を修正しました。 (コア13.23.3 )
- サブスクリプションがコミットされた後、同期クライアントが新しいサブスクリプションをチェックする前にアップロード メッセージが送信された場合、FLX サブスクリプションがサーバーに送信されない問題を修正しました。 (コア13.23.3 )
- クライアントのリセット後にサブスクリプションが完了とマークされている場合に、「KeyNotFound」例外によるアプリケーションのクラッシュを修正しました。 (コア13.23.3 )
- FLX Realm で DiscardLocal クライアントのリセット中に非常に特定の時間にクラッシュが発生すると、サブスクリプションが無効な状態のままになる可能性があります。 (コア13.23.4 )
- 開発モードでのリカバリを使用した自動クライアントリセットを使用して、オフライン時にローカルに行われたスキーマ変更を回復する場合、「無効なスキーマ変更(UPLOAD): 存在しないテーブルの追加説明を処理できません」というエラーを修正しました。 (コア13.23.4 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.23.4を使用します。
11.6.0 (2023-11-03)
機能強化
特定のメールに対してサーバー上で確認関数を再度実行できるようにするため、
App.EmailPasswordAuth.RetryCustomConfirmationAsync
メソッドを追加しました。 (問題番号3463 )ユーザーに関する変更をサブスクライブに通知するために使用できる
User.Changed
イベントが追加されました。これは通常、ユーザーの状態またはアクセス トークンです。 (問題番号3429 )Realm モデルの特定の生成されたプロパティに適用される無視属性をカスタマイズするためのサポートを追加しました。 構成オプションは
realm.custom_ignore_attribute
と呼ばれ、グローバル構成ファイルで設定できます(グローバル構成ファイルの詳細については、 .NET ドキュメントを参照してください)。 Realm ジェネレーターはこれをオペレーターの stringIgnoreDataMember
XmlIgnore
として扱い、これらのノードにすでに適用されている 属性と 属性に追加されます。属性は、それらが存在する名前空間がグローバルを使用するファイルに追加されない限り、完全修飾である必要があります。 たとえば、JsonIgnore
からSystem.Text.Json
を追加する方法は次のようになります。realm.custom_ignore_attribute = [System.Text.Json.Serialization.JsonIgnore]
(問題番号2579 )
Realm ソース ジェネレーターは、モデル クラス内のコレクションがプロパティ 初期化子またはコンストラクターで null 以外の値に割り当てられている場合、エラーが発生するようになりました。 Realm コレクションは内部で初期化され、 プロパティへの null 以外の値の割り当てはサポートされていません
null!
割り当ては、null 可能な参照型の警告を無視するのにのみ役立ち、実際にはコレクションが null になることはありません。 (問題番号3455 )AppConfiguration.UseManagedWebSockets = true
を使用すると、WebSocket エラーのログがより冗長になるようになりました。 # 3459
修正済み
- インターフェースベースの Realm クラスが8.0未満の言語バージョンで使用されている場合に発生するエラーを追加しました。 同時に、 は生成コードで
not
の使用を削除したため、 8.0の最小 C# バージョンと互換性があります。 (問題番号3265 ) - 複数の認証プロバイダを使用して単一のユーザーにログインすると、認証プロバイダごとに個別の SyncUser が作成されます。 これはほとんど機能しましたが、いくつか問題がありました。
- 同期セッションは、作成に使用される特定の SyncUser には必ずしも関連付けられてはいません。 その結果、ユーザーのセッションをクエリすると誤った結果が得られ、1 人のユーザーをログアウトすると間違ったセッションが閉じられる可能性がありました。
- 年 8 月から 11 月までの Realm のバージョンを使用して作成された既存のローカル同期 Realm ファイルが正しく開かれないことがあり2020 。
- SyncUsers の 1 つを削除すると、そのユーザーのすべての SyncUsers のローカル Realm ファイルがすべて削除されます。
- SyncUsers の 1 つを使用してサーバーサイドのユーザーを削除すると、他の SyncUsers は無効な状態のままになりました。
- 最初に匿名ログインによって作成され、その後 ID にリンクされた SyncUser は、引き続き匿名ユーザーとして扱われ、ログアウト時に完全に削除されます。 (コア13.21.0 )
- アクセス トークンの更新の進行中にユーザーがログアウトした場合、更新が完了すると、ユーザーは再度ログインしたものとしてマークされ、ユーザーは不整合な状態になります(Core 13.21.0 )。
- 型プロパティが「Point」以外(大文字と小文字を区別しない)に設定されている地理空間データセットをクエリする場合、例外がスローされます。 クエリを中断する代わりに、それらのオブジェクトは無視されるようになりました。 (コア13.21.0 )
- サーバーから write_not_allowed エラーを受信すると、クラッシュが発生します。 (コア13.22.0 )
- サブスクリプションを更新しても の自動更新がtriggerRealm されず、別の方法によって別の書込みが実行されるまで非同期更新がハングすることがありました。(コア13.23.1 )
- FAT 32 /exFAT ファイルシステムでプロセス間デッドロックが発生する同時 Realm ファイル アクセスによるプロセス間ロックを修正します。 (コア13.23.1 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.23.1を使用します。
11.5.0 (2023-09-15)
機能強化
SessionException
で報告されるエラー コードの一部を効率化しました。 いくつかのエラー コードが結合され、一部はサーバーによって報告されなくなったため非推奨になりました。 (問題番号3295 )- Full Text Searchではプレフィックスの検索のみをサポートしています。 例: "description text 'alex*' " (コア13.18.0 )
- Atlas Device Sync から受信した不明なプロトコル エラーでは、有効なエラー アクションも受信した場合、アプリケーションがクラッシュしなくなりました。 不明なエラー アクションは ApplicationBug エラー アクションとして扱われ、同期エラー ハンドラーを介してエラーが発生し、同期が失敗します。 (コア13.18.0 )
- 同期プロトコル バージョン10で有効になっているサーバー ログ メッセージのサポートを追加しました。 AppservicesリクエストIDは、今後のサーバー リリースのサーバー ログ メッセージで提供される予定です。 (コア13.19.0 )
修正済み
- 動的 API を使用して存在しないプロパティにアクセスしようとすると、
MissingMemberException
がスローされるというメッセージを修正しました。 (PR # 3432 ) - .NET Native を使用する際に発生する
Cannot marshal generic Windows Runtime types with a non Windows Runtime type as a generic type argument
ビルド エラーを修正しました。 (発行番号3434 、 から11.4.0を発行します) - 不明なアプリサーバーエラーで失敗したアサーションを修正しました。 (コア13.17.2 )
- 辞書で @keys に対してクエリを実行すると、例外がスローされます。 (コア13.17.2 )
- スラベル ア割り当てのクラッシュを修正しました(
Assertion failed: ref + size <= next->first
)。 (コア13.20.1 ) - 空の UPLOAD メッセージを送信すると、「無効なサーバー バージョン」エラーが発生し、クライアントがリセットされる可能性があります。 (コア13.20.1 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.20.1を使用します。
11.4.0 (2023-08-16)
機能強化
SubscriptionSet.Add
を使用するための省略形としてIQueryable.SubscribeAsync
API を追加しました。これはおおよそ次のように変換される構文です。
同期のたびに待機するか、サブスクリプションが最初に追加されたときのみ待機するかを制御するパラメーターと、キャンセルされたトークン サポートを制御するパラメーターを提供します。 (PR # 3403 )realm.Subscriptions.Update(() => { realm.Subscriptions.Add(query); }); await realm.Subscriptions.WaitForSynchronization(); // This can now be expressed as await query.SubscribeAsync();
- 任意の
cancellationToken
引数をSession.WaitForDownloadAsync/WaitForUploadAsync
に追加しました。 (PR # 3403 ) - 任意の
cancellationToken
引数をSubscriptionSet.WaitForSynchronization
に追加しました。 (PR # 3403 ) - ストリーミング形式のファイルのまれな破損を修正しました(多くの場合、圧縮、変換、または新しいファイルへのコピーが次)。 (コア13.17.1 )
- 追加のスキーマ変更の結果として作成された全文インデックス(つまり ローカル スキーマと同期された Realm のスキーマとの間の相違を適用すると)、エラー コード
Column has no fulltext index
を持つ IllealOperation エラーが発生する可能性があります。 (コア13.17.1 ) - サーバー状態からのダウンロード メッセージの同期進行状況が誤って更新されました。 これにより、サーバーへの追加のラウンドトリップが発生する可能性があります。 (コア13.17.1 )
- 同期トラフィックに Realm の組み込み WebSocket クライアントではなく、管理型 WebSocket(
System.Net.WebSockets.ClientWebSocket
)を使用するオプションを追加しました。 マネージド WebSocket は、認証を必要とするプロキシとファイアウォールのサポートを改善します。 この機能は現在オプトインであり、AppConfiguration.UseManagedWebSockets
を true に設定することで有効にできます。 マネージド WebSockets は、将来のバージョンのデフォルトになります。 ( PR # 3412 )。 realm.SyncSession.PropertyChanged
のサブスクライブ者が存在する場合でも、realm.SyncSession
のガベージが収集される問題を修正しました。
修正済み
- 非同期書き込みトランザクションをキャンセルして Realm ファイルを閉じるまでの競合状態を修正し、
ObjectDisposedException : Safe handle has been closed
がスローされる可能性がありました。 ( PR # 3400 ) - 非常にまれに
Realm.RefreshAsync
によって例外がスローされる問題を修正しました。その例外は無視され、false
が返される問題を修正しました。 ( PR # 3400 ) - サブスクリプションがサブスクライブセットに存在しない場合に、
null
が返されることを正しく示すように、SubscriptionSet.Find
の null 可能性の注釈を修正しました。 (PR # 3403 ) - 再マッピングされたプロパティを使用して
Filter
クエリを実行すると、管理対象のプロパティではなくネイティブ名でのみ機能する問題を修正しました。 これで両方が動作します - 例:
(問題番号3149 )partial class MyModel : IRealmObject { [MapTo("Bar")] public int Foo { get; set; } } // Both of these are valid now realm.All<MyModel>().Filter("Foo > 5"); realm.All<MyModel>().Filter("Bar > 5");
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.17.1を使用
11.3.0 (2023-07-26)
重大な変更
AppConfiguration.LocalAppName
とAppConfiguration.LocalAppVersion
は非推奨となり、将来のバージョンで削除される予定です。 SDK によって提供される値はサーバーに送信されなかったため、影響はありませんでした。 (PR # 3387 )
機能強化
AppConfiguration
で指定された値を返すApp.BaseFilePath
、App.BaseUri
、App.Id
プロパティを追加しました。 (PR # 3385 )App.Create
から返されたApp
インスタンスをキャッシュするかどうかを制御するAppConfiguration.UseAppCache
プロパティを追加しました。 一般的な推奨は、それを設定しないこと( デフォルト値のtrue
のままにする必要がありますが、ユニット テストを作成する際に役立つ可能性があります。 (問題番号3382 )。
修正済み
Realm.GetInstanceAsync
操作の進行中にドメインを再読み込みすると、Unity エディターのクラッシュを修正しました。 (問題番号3344 )- 特に
App
インスタンスがキャッシュされている場合に正しい結果を返すように、App.Equals
とApp.GetHashCode
の実装を修正しました。 (PR # 3385 ) - Unity で Android 用のビルドが「ユーザーの組み立てを分析できない」で失敗する問題を修正しました。 オブジェクトのインスタンスに設定されていないオブジェクト参照。 (問題番号3380 )
- GeoBox は、等価的な GeoPolygon のショートカットになりました。 これにより、一貫したクエリ結果とエラー チェックが提供されます。 (コア13.15.2 )
- いくつかの隅にあるケースを修正しました(例: 無効なポイントが geoWithin クエリに一致した。 (コア13.15.2 )
- スキーマにプロパティが追加されている場合、非同期オープンとクライアントのリセット中にエラーが発生する問題を修正しました。 この修正は、 非同期オープン が使用されている場合、PBS から FLX への移行に適用されます。 (コア13.16.1 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.17.0を使用
11.2.0 (2023-07-07)
機能強化
- 地理空間型コンストラクターに検証チェックを追加しました。 つまり、クエリで使用する場合ではなく、無効な地理空間の形状を構築したときに例外がスローされるようになります。 (PR # 3362 )
- null 以外の型のコレクションで
IndexOf(null)
を呼び出す際の検証を一部緩和しました。 以前はArgumentNullException
がスローされていましたが、現在は-1
が返されます。 これは、バインディング エンジンがIndexOf(SelectedItem)
として呼び出す可能性があるデータバインディングシナリオで特に有用です。これにより、SelectedItem
がnull
の場合に例外がスローされます。 (PR # 3369 ) NotSupportedException
をスローするのではなく実際の結果を返すようにRealmSet.IndexOf
の実装を変更しました。 永続化されたセットの順序はまだ非決定的ですが、書込みトランザクション間では安定しています。 繰り返しになりますが、これは、セットがバインディング コンテキストとしてコレクション制御に渡されるデータバインディングシナリオで主に役立ちます。 (PR # 3369 )
修正済み
- UnityWindowstriggerにより過剰なターミナルWindows が開かれる場合における 上の の問題を修正しました。(問題 [ 3364 ] https://github.com/realm/realm-dotnet/issues/ 3364 )
- CI 上の Unity で、ウィーブが次のエラーで失敗する問題を修正しました:
Could not analyze the user's assembly. Cannot access a closed Stream.
。 (問題 [ 3364 ] https://github.com/realm/realm-dotnet/issues/ 3364 ) - バッチ モードで Unity でクラスをWebhook する際の
NullReferenceException
を修正しました。 (問題番号3363 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.15.0を使用
11.1.2 (2023-06-20)
修正済み
'Realm' is a namespace but is used like a type
が原因で Maui Android プロジェクトのビルドが失敗する名前空間の問題を修正しました。 (問題番号3351 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.15.0を使用
11.1.1 (2023-06-19)
修正済み
'Realm' is a namespace but is used like a type
が原因で Unity プロジェクトのビルドが失敗する名前空間の問題を修正しました。 (問題番号3351 )- 非永続プロパティに Realm 属性を追加するときの警告メッセージを改善しました。 (問題番号3352 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.15.0を使用します。
11.1.0 (2023-06-17)
機能強化
Realm.SourceGenerator
Realm.Fody
パッケージと パッケージを廃止します。ソース生成とウィーバーのアセンブルはメインのRealm
パッケージに含まれるようになりました。 これは、Realm
パッケージのみを参照していたユーザーには透過的な変更である必要がありますが、Realm.SourceGenerator
またはRealm.Fody
にパッケージ参照を明示的に追加した場合は、これを削除する必要があります。 (PR # 3319 )- 複数の親が参照するオブジェクトを重複させ、「孤立した」オブジェクトを排除することで、
RealmObject
->EmbeddedObject
の移行を自動的に処理します。 (問題番号2408 ) - 書込みトランザクション (write transaction) で変更が実際に行われるまで、新しい通知子を書込みトランザクション (write transaction) に登録できるようになりました。 これにより、書込みトランザクション(write transaction)の開始によってトリガーされる 変更通知 に新しい通知を登録できるようになります(以前のコールバックで書込みが実行された場合を除く)。 (コア13.10.1 )
- サーバーがこのリリースで公式にサポートされている場合に、パーティションベースの同期を使用してフードの下でフレキシブルな同期を使用するクライアント アプリを移行するための、パーティションベースから Flexible Sync への移行 。 古いバージョンの Realm(Core 11.0.0でリリースされた元のサポートを含む)を使用しているクライアントには、アプリと同期しようとすると「Flexible Sync への切り替え」というエラー メッセージが表示されます。 (コア13.11.0 )
- 辞書の値に基づいてソート/区別をサポートする例
.Filter("TRUEPREDICATE SORT(meta['age'])")
。 (コア13.14.0 ) - ポイントに対する地理空間クエリの初期サポートを追加しました。 (問題番号3299 )
- このバージョンでは、「この点はこの形状に含まれています」という形式のクエリのみがサポートされています(MongoDB の$geoWithinと同等)。
- 現在のところ、インデックスのサポートはありません。
- 永続化された地理空間ポイントに専用のタイプはありません。 代わりに、ポイントは GeoJson の作成された埋め込みオブジェクトとして保存され、クエリはアフィックスを使用してその形状にオブジェクトが含まれているかどうかを確認されます。 便宜上、Realm が提供する専用型の代わりに使用できる埋め込みオブジェクトの例を以下に示します。
public partial class Location : IEmbeddedObject { // The coordinates and type properties are mandatory but may be private. // You can add more fields if necessary - those will be ignored when doing // geospatial queries. [MapTo("coordinates")] private IList<double> Coordinates { get; } = null!; [MapTo("type")] private string Type { get; set; } = "Point"; public double Latitude => Coordinates.Count > 1 ? Coordinates[1] : throw new Exception($"Invalid coordinate array. Expected at least 2 elements, but got: {Coordinates.Count}"); public double Longitude => Coordinates.Count > 1 ? Coordinates[0] : throw new Exception($"Invalid coordinate array. Expected at least 2 elements, but got: {Coordinates.Count}"); public Location(double latitude, double longitude) { // According to the GeoJson spec, longitude must come first in the // coordinates array. Coordinates.Add(longitude); Coordinates.Add(latitude); } } // Example usage public partial class Company : IRealmObject { public Location Location { get; set; } }
- 含まれているかどうかを確認できるように、3 つの新しいシェイプタイプと 1 つのヘルパー ポイント タイプが追加されています。
GeoPoint
: 他のシェイプ タイプのビルディング ブロック。モデルのプロパティ タイプとして使用することはできず、他のシェイプ タイプを構築することのみを目的としています。 緯度と経度の値のペアから暗黙的に構築できます。var point = new GeoPoint(latitude: 12.345, longitude: 67.890); var point = (12.345, 67.890);
GeoCircle
: 中心と半径から構築された球体上の円を表す形状var circle = new GeoCircle(center: (12.34, 56.78), radius: 10); // radius in radians var circle = new GeoCircle((12.34, 56.78), Distance.FromKilometers(10));
GeoBox
: 左下隅と右上隅から構築された球体上のボックスを表す形状。var box = new GeoBox((12.34, 56.78), (15.34, 59.78));
GeoPolygon
: 外側の円と任意の穴から構築された任意の多角形:var polygon = new GeoPolygon((10, 10), (20, 20), (0, 20), (10, 10)); // a triangle with no holes var outerRing = new GeoPoint[] { (10, 10), (20, 20), (0, 20), (10, 10) }; var hole1 = new GeoPoint[] { (1, 1), (2, 2), (0, 2), (1, 1) }; var hole2 = new GeoPoint[] { (5, 5), (6, 6), (4, 6), (5, 5) }; var polygon = new GeoPolygon(outerRing, hole1, hole2); // A triangle with two smaller triangular holes
- クエリは、LINQ または RQL 経由で実行できます。
var matches = realm.All<Company>().Where(c => QueryMethods.GeoWithin(c.Location, circle)); var matches = realm.All<Company>().Filter("Location GEOWITHIN $0", circle);
- 辞書の値に基づいてソート/区別をサポートする例
realm.All<MyModel>().Filter("TRUEPREDICATE SORT(meta['age'])")
。 (コア13.14.0 ) - 自動クライアント リセット中に新しい FLX レルムのダウンロードに失敗し、Realm を開くとクラッシュする可能性を修正しました。 (コア13.14.0 )
修正済み
- 非同期オープン中にリセットがトリガーされ、適用されるスキーマに新しいクラスが追加された場合に、クライアントリセット(または PBS から FLX への自動移行)中に致命的なエラー(同期エラー ハンドラーに報告)を修正しました。 (コア13.11.0 )
- Full Text Searchでは、検索トークンの先頭のみと一致する単語が見つかる場合があります。 (コア13.11.0 )
- 破損により、フォワード リンクに対応するバックリンクがない場合、バックリンクを削除するとクラッシュする可能性がありました。 リリース ビルドではこの不整合を暗黙的に無視し、アプリが続行できるようになりました。 (コア13.12.0 )
IDictionary<string, IRealmObject?>
は、解決されていないリンクを null にマッピングするのではなく、公開します。 無効なオブジェクトを辞書から読み取れるだけでなく、辞書に対するクエリの結果が不正確になることがあります。 (コア13.12.0 )- Webhook のアクセス トークンの更新では、ロケーション メタデータが更新されませんでした。 (コア13.13.0 )
- 同じスレッドまたはスケジューラで同期トランザクションと非同期トランザクションの両方を使用すると、アサーションの失敗「!realm.is_in_transaction()」が発生する可能性があります。 同期トランザクション中に非同期トランザクションのコールバックの 1 つがスケジュールされた場合。 (コア13.13.0 )
- 自動クライアント リセット中に新しい FLX レルムのダウンロードに失敗し、Realm を開くとクラッシュする可能性を修正しました。 (コア13.14.0 )
- 埋め込みオブジェクトを含むプロパティを、テキスト
Can't link to an embedded object that is already managed
で例外をスローするために使用されるのと同じ埋め込みオブジェクトに設定します。 現在は、その代わりに操作はありません。 (問題番号3262 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.15.0を使用します。
- SDK のメトリクス コレクションをオーバーライドして拡張し、将来の開発作業をより強化しました。 (PR # 3209 )
11.0.0 (2023-05-08)
重大な変更
*collection*.SubscribeForNotifications
で使用されるNotificationCallbackDelegate
とDictionaryNotificationCallbackDelegate
のerror
引数が削除されました。 データベースの内部変更により通知コールバック中にエラーが発生することが不可能になったため、長い間使用されていませんでした。 (問題番号3014 )RealmObjectBase.GetBacklinks
を削除しました - 代わりにRealmObjectBase.DynamicApi.GetBacklinksFromType
を使用する必要があります。 (問題番号2391 )Realm.DynamicApi.CreateObject(string, object)
を削除し、より特殊なオーバーロードに置き換えました。RealmObjectBase.DynamicApi.CreateObject(string)
は、プライマリキーなしでオブジェクトを作成するために使用できます。RealmObjectBase.DynamicApi.CreateObject(string, string/long?/ObjectId?/Guid?)
は、対応するタイプのプライマリキーを持つオブジェクトを作成するために使用できます。
Realm.DynamicApi
によって公開される API はdynamic
を返さなくなり、代わりにIRealmObject
、IEmbeddedObject
などの具体的な型を返すように選択されています。 返されたオブジェクトをdynamic
GoAPIと にキャストすることもできます 。ただし、 やAPIIRealmObjectBase.DynamicApi.Get/Set
などの AOT プラットフォームでは、 などの string ベースのiOS を使用するよりもパフォーマンスが低下しUnity 。(問題番号2391 )Realm.WriteAsync(Action<Realm>)
Realm.WriteAsync(Action)
が優先されるよう、 を排除しました。10.14.0で導入された新しいWriteAsync
メソッドはより効率的であり、バックグラウンド スレッドで Realm を再度開く必要はありません。 推奨はされませんが、古い動作を実現したい場合は、次のような拡張メソッドを記述できます。
(PR # 3234 )public static async Task WriteAsync(this Realm realm, Action<Realm> writeAction) { await Task.Run(() => { using var bgRealm = Realm.GetInstance(realm.Config); bgRealm.Write(() => { writeAction(bgRealm); }); }); await realm.RefreshAsync(); }
InMemoryConfiguration.EncryptionKey
を削除しました。 メモリ内の Realm とそのプロパティの設定を暗号化することはできず、ランタイム エラーが発生することはありませんでした。 (PR # 3236 )SyncConfiguration
を削除しました - 代わりにPartitionSyncConfiguration
またはFlexibleSyncConfiguration
を使用してください。 (PR # 3237 )Realm.GetSession
を削除しました - 代わりにRealm.SyncSession
を使用してください。 (PR # 3237 )DiscardLocalResetHandler
を削除しました - 代わりにDiscardUnsyncedChangedHandler
を使用してください。 (PR # 3237 )Session.SimulateClientReset
拡張機能を削除しました。 これらは自動リセットハンドラーでは機能せず、役立つというよりは複雑なものでした。 (PR # 3237 )AppConfiguration.CustomLogger
とAppConfiguration.LogLevel
を削除しました - 代わりにLogger.Default
とLogger.LogLevel
を使用してください。 (PR # 3238 )RealmConfigurationBase.ObjectClasses
を削除しました - 代わりにRealmConfigurationBase.Schema
を使用してください。 (PR # 3240 )ObjectSchema.IsEmbedded
を削除しました - 代わりにObjectSchema.BaseType
を使用してください。 (PR # 3240 )ObjectSchema.Builder.IsEmbedded
を削除しました - 代わりにObjectSchema.Builder.RealmSchemaType
を使用してください。 (PR # 3240 )ObjectSchema.Builder(string name, bool isEmbedded = false)
を削除しました - 代わりにBuilder(string name, ObjectSchemaType schemaType)
を使用してください。 (PR # 3240 )RealmSchema.Find
を削除しました - 代わりにRealmSchema.TryFindObjectSchema
を使用してください。 (PR # 3240 )- Atlas App Services で非推奨になったため、
User.GetPushClient
を削除しました。 https://www.mongodb.com/ja-jp/docs/atlas/app-services/reference/push-notifications/を参照してください。 (PR # 3241 ) SyncSession.Error
イベントを削除しました - 代わりに Realm を開くときにSyncConfigurationBase.OnSessionError
を使用してください。 (PR # 3241 )ManualRecoveryHandler
のパラメータレス コンストラクタを削除しました - 代わりにコールバックを受け取るコンストラクタを使用してください。 (PR # 3241 )RealmValue.AsString
値にnull
が含まれている場合、 は の例外をスローするようになりました。 null 可能なstringを取得する場合は、AsNullableString
を使用します。 (PR # 3245 )RealmValue.AsData
値にnull
が含まれている場合、 は の例外をスローするようになりました。 null 可能なbyte[]
を取得する場合は、AsNullableData
を使用します。 (PR # 3245 )RealmValue.AsRealmObject
値にnull
が含まれている場合、 は の例外をスローするようになりました。 null 可能なstringを取得する場合は、AsNullableRealmObject
を使用します。 (PR # 3245 )Realm.SyncSession
では、Realm がnull
を返す前にPartitionSyncConfiguration
またはFlexibleSyncConfiguration
で開かれていない場合、エラーがスローされるようになりました。 (PR # 3245 )Realm.Subscriptions
では、Realm がnull
を返す前にFlexibleSyncConfiguration
- で開かれていない場合、エラーがスローされるようになりました。 (PR # 3245 )PermissionDeniedException
を取得できなくなったため削除しました。 (問題番号3272 )ErrorCode
列挙型からいくつかの廃止されたエラー コードを削除しました。 削除されたすべてのコードは廃止され、サーバーによって発行されなくなりました。 (PR 3273 )IncompatibleSyncedFileException
を取得できなくなったため削除しました。 (問題番号3167 )Realms.Schema.Property
API は、プロパティがインデックス化されているかどうかを示すブール値ではなく、IndexType
を使用するようになりました。 (問題番号3281 )StringExtensions
の拡張メソッド(Like
、Contains
)は非推奨になりました。 代わりに、QueryMethods
で同一の を使用します - 例realm.All<Foo>().Where(f => f.Name.Like("Mic*l"))
はrealm.All<Foo>().Where(f => QueryMethods.Like(f.Name, "Mic*l"))
のように書き換える必要があります。
機能強化
- Realm 組み立てに null 可能性の注釈を追加しました。 参照型を返すメソッドに、返される値が null であるかどうかを示すために正しく注釈が付けられるようになりました。 (問題番号3248 )
- インデックスの値を置き換える
myList[1] = someObj
)が、Replace
アクションでCollectionChange
通知を正しく発生させるようになりました。 (問題番号2854 ) - アプリケーションの有効期間における任意の時点でログ レベルを変更できるようになりました。 (PR # 3277 )
- 一部のログ メッセージは Core データベースに追加されました。 Realm のオープンやトランザクションのコミットなどのイベントがログに記録されるようになりました。 (問題番号2910 )
- 全文検索(単純ターム)クエリのサポートを追加しました。 (問題番号3281 )
- string プロパティで FTS クエリを有効にするには、
[Indexed(IndexType.FullText)]
属性を追加します。 - LINQ クエリを実行するには、
QueryMethods.FullTextSearch
:realm.All<Book>().Where(b => QueryMethods.FullTextSearch(b.Description, "fantasy novel"))
を使用します。 Filter
クエリを実行するには、TEXT
演算子:realm.All<Book>().Filter("Description TEXT $0", "fantasy novel")
を使用します。
- string プロパティで FTS クエリを有効にするには、
- 次のクエリのパフォーマンスが向上しました(Core 13.8.0 ):
- インデックスを持つstring /int/UUID/ ObjectIdプロパティで、完全一致(他のクエリ条件なし)の数をカウントする場合(
IQueryable.Count()
)、大幅に改善されます( ~75%)。 この改善は、返される結果(重複値)が多数ある場合に特に顕著です。 - インデックスを持つ
DateTimeOffset
プロパティで完全一致をクエリする場合の大幅な改善(約99 %)。 - インデックスを持つ
RealmValue
プロパティで大文字と小文字を区別しない一致をクエリする場合の大幅な改善(約99 %)。 - インデックスを持つブール値プロパティで完全一致をクエリする場合のモード(約25 %)の改善。
- インデックスがない
RealmValue
プロパティで大文字と小文字を区別しない一致をクエリする場合のわずかな改善(約5 %)。 - インデックスなしの
RealmValue
での等価クエリのモード(約30 %)の改善。
- インデックスを持つstring /int/UUID/ ObjectIdプロパティで、完全一致(他のクエリ条件なし)の数をカウントする場合(
- 暗号化された Realm で複数の プロセスが同時に実行されるようにします。 (コア13.9.0 )
- 変更を行った後に書込みトランザクションをロールバックするパフォーマンスを向上させます。 通知イベントがサブスクライブされていない場合、これはロールバックされる変更の数に比例する時間ではなく、一定時間になります。 通知サブスクライブの場合のロールバックは10 - 20 % より高速になっています。 (コア13.9.4 )
- PBS から FLX への移行 は、サーバーがフレキシブルな同期に移行されている場合に、パーティションベースの同期を使用してフードの下でフレキシブルな同期を使用するクライアント アプリを移行するためのものです。 (コア13.10.0 )
修正済み
- 複数のスレッドで新しい Realm ファイルを作成するときに
The specified table name is already in use
例外が発生する可能性がある問題を修正しました。 (問題番号3302 ) - 異なるデバイスで配列が異なる順序になる可能性があるバグを修正しました。 「無効なごとのサイズ」の場合でも修正される場合があります。 (コア13.7.1 )
- string演算子(contain/like/ Startswith/endswith)、または大文字と小文字を区別しない状態で
RealmValue
プロパティをクエリする際のクラッシュを修正しました。 (コア13.8.0 ) - インデックス付きの
RealmValue
プロパティで string の等価性をクエリすると、大文字と小文字を区別しない一致が返されていました。 たとえば、myIndexedValue == "Foo"
のクエリでは、"foo" や "FOA" などの値と誤って一致します(Core 13.8.0 )。 - 空でないテーブルの
RealmValue
プロパティにインデックスを追加すると、アサーションが発生し、クラッシュします。 (コア13.8.0 ) SyncSession.Stop()
同期セッションをシャットダウンした後もデータベースへの参照を開いたままにし、ユーザーが Realm を削除できないようにする可能性がありました。 (コア13.8.0 )- AND/OR 条件の長いチェーンでクエリ パーサーを使用する際に発生するStack Overflowのクラッシュを修正しました。 (コア13.9.0 )
ClientResetException.InitiateClientReset()
が、Realm を削除しようとした結果を無視しなくなりました。 これにより、Realm
がまだ開いている場合は、Windows で実際に失敗しても、クライアント リセット アクションが成功したと報告される可能性がありました。 (コア13.9.0 )- データ競合を修正します。書込みトランザクションが実行され、別のスレッドが読み取りを開始したときに、現在のセッション中に発生したバージョンの上限を超えて増加した場合、読み取りスレッドは次から読み取ることができなくなりました有効なメモリ マッピング(コア13.9.0 )。
- 配列が8より長く、すべての要素がリスト内の一部の値より小さい場合、
{1, 2, 3, ...} IN list
のようなクエリを実行すると、プログラムはクラッシュします(Core 13.9.4 ) - 書き込みを実行せずに多数のクエリを実行すると、メモリ使用量が徐々に増加し、その一部は無制限キャッシュ(Core 13.9.4 )が原因で完全に解放されることはありませんでした。
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.10.0を使用します。
10.21.1 (2023-04-21)
修正済み
- サーバーが PermissionDenyed エラーを送信したときに発生するクラッシュを修正しました。 (問題番号3292 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.6.0を使用します。
10.21.0 (2023-03-24)
機能強化
- 非同期操作(
Realm.GetInstanceAsync
、Session.WaitForUploadAsync
など)が致命的でないセッション エラーが発生するたびに例外をスローするかどうかを制御するSyncConfiguration.CancelAsyncOperationsOnNonFatalErrors
が追加されました。 (問題番号3222 ) - 接続タイムアウトやping-ping 間隔など、同期タイムアウトを制御する多数のプロパティを持つ
AppConfiguration.SyncTimeoutOptions
が追加されました。 (問題番号3223 ) - SDK によってスローされる例外の一部をシステム例外との整合性を高め、詳細情報を含めるようにアップデートしました。たとえば、無効な引数が指定された場合、
RealmException
ではなくArgumentException
がスローされるようになりました。 (問題番号2796 ) - 新しい例外 -
CompensatingWriteException
を追加しました。これには、権限によりサーバーによって元に戻された書込み (write) に関する情報が含まれます。 他のセッション エラーと同様に、指定されたFlexibleSyncConfiguration.OnSessionError
コールバックに渡されます。 (問題番号3258 ) - .NET アプリケーションで Linux Arm/Arm 64のサポートを追加しました。 (問題番号721 )
修正済み
- Realm SDK が BsonSerializer を登録する方法を変更しました。 以前は、
BsonSerializer.RegisterSerializer
経由でそれらを区別せずに登録されていました。これにより、アプリがMongoDB.Bson
パッケージを使用し、DateTimeOffset
、decimal
、またはGuid
に対して独自のシリアライザーを定義している場合、競合が発生していました。 現在、登録はBsonSerializer.RegisterSerializationProvider
経由で行われるため、SDK で使用されるデフォルトのシリアライザーは、シリアライザーがインスタンス化される前に任意の点でBsonSerializer.RegisterSerializer
を呼び出すか、アプリを作成して Realm を開いた後にBsonSerializer.RegisterSerializationProvider
を呼び出すことで上書きできます。 (問題番号3225 ) - Unicode パラメーターを持つクエリでサブスクリプションを作成すると、サーバー エラーが発生します。 (コア13.6.0 )
- Unity 2022以降でビルドが
Specified method is not supported
エラーでビルドに失敗する問題を修正しました。 (問題番号3306 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.6.0を使用します。
- 新しいコミットが CR にプッシュされると、既存のビルドをキャンセルします。 (PR # 3260 )
10.20.0 (2023-02-10)
ファイル形式のバージョンがダンプされました。 古いファイルは自動的にアップグレードされますが、.NET SDK の古いバージョンでダウングレードして開くことはできません。
重大な変更
User.GetPushClient
は、サーバー上ですぐに無効になるため、非推奨となっています。 (問題番号3073 )
機能強化
より大きなファイル サイズが不要になった場合、Realm ファイルは圧縮されます。 (コア13.0.0 )
バージョン 固定によるファイル増加のほとんどが排除されます。 (コア13.0.0 )
そのバージョンの読み取りロックがすでに保持されている場合に、読み取りロックを取得する際のパフォーマンスを向上させます。 これにより、変更通知に関連する多くの操作、特に変更通知子が登録されている Realm の更新が高速化されます。 (コア13.2.0 )
OpenSSL を1.1.1 n から3.0.7にアップグレードします。 (コア13.2.0 )
柔軟な同期レルムからバンドルされたローカル Realm への変換がサポートされるようになりました(Core 13.2.0 )
ソースが生成したクラスにネストされたクラスのサポートを追加しました。 (問題番号3031 )
ソースが生成したクラスのモデル定義で、null 可能参照型のサポートを強化しました。 これにより、null 可能なコンテキストがアクティブな場合に通常どおり Realm モデルを使用できるようになり、必須プロパティを示すために
Required
属性を使用する必要がなくなります。この情報は null 可能性ステータスから直接推論されるためです。 Realm オブジェクトにリンクするプロパティの null 可能性については、いくつか考慮事項があります。- 単一の Realm オブジェクトにリンクするプロパティは本質的に null 可能なため、 型は null 可能として定義する必要があります。
- リスト、セット、バックリンクには null オブジェクトを含めることができないため、型パラメータは null 以外である必要があります。
- 辞書には null 値を含めることができるため、型パラメータは null 可能である必要があります。
ここで説明されているものとは異なる null 可能性注釈を使用してプロパティを定義すると、診断エラーが発生します。 例:
public partial class Person: IRealmObject { //Single values public Dog? MyDog { get; set; } //Correct public Dog MyDog { get; set; } //Error //List public IList<Dog> MyDogs { get; } //Correct public IList<Dog?> MyDogs { get; } //Error //Set public ISet<Dog> MyDogs { get; } //Correct public ISet<Dog?> MyDogs { get; } //Error //Dictionary public IDictionary<string, Dog?> MyDogs { get; } //Correct public IDictionary<string, Dog> MyDogs { get; } //Error //Backlink [Realms.Backlink("...")] public IQueryable<Dog> MyDogs { get; } //Correct [Realms.Backlink("...")] public IQueryable<Dog?> MyDogs { get; } //Error }
一部の開発者は、このようなプロパティの null 値の注釈をより自由にしたいと考えており、グローバル構成ファイルで
realm.ignore_objects_nullability = true
を設定することで可能です(グローバル構成ファイルの詳細については、 を参照してください) .NETドキュメント)。 これが有効になっている場合、以前のすべてのプロパティは有効と見なされ、オブジェクトにリンクされるプロパティの null 可能性注釈は無視されます。PropertyChanged
およびCollectionChanged
通知のパフォーマンスが向上しました。 (問題番号3112 )Xamarin / MauiおよびUnityアプリケーションで vOS のサポートを追加しました。 (問題番号3161 )
Realm.Freeze()
のパフォーマンスを向上させます。 (コア13.3.0 )
修正済み
ISet<RealmValue>
string データとバイナリ データは同等と見なします。 そのため、string と同等のコンテンツを持つバイナリ データが Atlas から挿入された場合、クライアントとサーバーの整合性が失われる可能性があります。 (コア13.0.0 )- クラッシュにつながる可能性のあるクエリエラーでの誤ったアサーションを修正しました。 (コア13.1.0 )
- ファイルが生成されたデバイスよりもページ サイズが大きいデバイスで暗号化されたファイルを開かないようになる問題を修正しました。 (コア13.1.1 )
- 非同期コールバックが割り当てられた後にオブジェクトを使用していた同期クライアントでセグメント違反が発生する可能性を修正しました(Core 13.2.0 )
- 単一サブスクリプションでリカバリとフレキシブルな同期を使用する場合のクラッシュを修正しました(Core 13.2.0 )
- モデルの プロパティがサポートされていない場合、よりわかりやすいエラー メッセージを追加しました。 ターゲット タイプが
RealmObject
から継承する必要があることを提案するようになりました。 (問題番号3162 ) - アクティブなトランザクションの実行中に Realm インスタンスを破棄すると、トランザクションが正しくロールバックされるようになりました。 (問題番号2924 )
- コレクションのコンテンツが変更された場合、コレクション自体が置き換えられていない場合でも、コレクション プロパティに
PropertyChanged
通知が配信される問題を修正しました。 (問題番号3112 ) - Unity でアセンブルをウィーブすると
System.InvalidOperationException
が発生する可能性がある問題を修正しました。 (問題番号3199 ) Session.Stop
により、Session.Start
が呼び出されるまでセッションが正しく停止された状態が維持されるようになりました。 以前は、明示的に要求されない場合でも、セッションが再開される可能性がある状況が多数ありました。 (コア13.3.0 )- リカバリを使用したクライアント リセットが使用され、回復によって新しいローカル コミットが実行されない場合、同期クライアントは クライアントのリセット中に致命的なエラーが発生した サイクルで停止した可能性があります。「以前の「リカバリ」モードは からのリセット
は成功せず、サイクルのエラーメッセージを防ぐために「リカバリ」モードの使用を停止しました。 (コア13.3.0 ) - 先ほど選んだオブジェクトへのブートストラップ中に書き込みが発生した場合の、フレキシブルな同期におけるダイジェスト履歴を修正しました。 (コア13.3.0 )
- キャッシュされた固定 Realm を開く際に実行される複数のデータの競合を修正しました。 新しい固定 Realm がキャッシュに追加され、完全に初期化される前にロックが解放されたため、別のスレッドでキャッシュからすぐに読み取られると競合が発生しました。 (コア13.3.0 )
- 「リフレッシュ」Realm のダウンロード中にクライアントのリセット w/リカバリ またはローカル破棄が中断された場合、同期クライアントは MulpleSyncAgents 例外でクラッシュする可能性があります。 (コア13.3.0 )
- FLX ブートストラップ中にサーバーから送信される変更セットが16 MB を超えると、同期クライアントがロジック エラーでクラッシュする可能性があります。 (コア13.3.0 )
- Catalyst アプリと Realm Studio 間で Realm ファイルを共有しても、Realm ファイルへのアクセスが適切に同期されませんでした。 (コア13.4.0 )
互換性
- Realm Studio: 13.0.0以降。
内部
- Core 13.4.0を使用します。
- リフレクションを使用しないように
DynamicRealmObjectHelper.TryGetPrimaryKeyValue
を更新しました。 (問題番号3166 ) - デバッグ ビルド実行時における UWP テストのワークフローを修正しました。 (問題番号3030 )
10.19.0 (2023-01-06)
機能強化
CallAsync の引数の冗長な直列化/逆直列化を削除しました。 (問題番号3079 )
トランザクションの現在の状態を説明するフィールド
Transaction.State
を追加しました。 (問題番号2551 )EmailPasswordAuth.CallResetPasswordFunctionAsync のパラメータとして null が引数として渡される場合のエラー メッセージが改善されました。 (問題番号3011 )
生成されたクラスのプロパティのバッキング フィールドを削除し、Realm オブジェクトで使用されるメモリをマイナーに改善しました(問題番号2647 )
辞書の 値をラップする
IQueryable
コレクションを取得するために、IDictionary
に 2 つの拡張メソッドを追加しました。dictionary.AsRealmQueryable()
を使用すると、IQueryable<T>
からIDictionary<string, T>
を取得できます。これは通常のクエリ可能なコレクションとして扱われ、LINQ または でフィルタリング/順序付けできます。Filter(string)
dictionary.Filter(query, arguments)
は リストをフィルタリングし、辞書の値のフィルタリングされたコレクションを返します。 これはdictionary.AsRealmQueryable().Filter(query, arguments)
とほぼ同等です。
結果として得られるクエリ可能なコレクションは、
realm.All<T>()
を呼び出して取得される結果と同じように動作します。つまり、変更されたときに通知が発行され、自動的に更新されます。 (問題番号2647 )自動リカバリと最上位テーブルの埋め込みテーブルへの変換により、クライアント リセットのパフォーマンスが向上します。 (コアアップグレード)
Flexible 同期では、サブスクリプションを 完了 とマークする前に、ブートストラップ後にサーバーがすべての保留中の履歴を送信するまで待機するようになりました。 (コアアップグレード)
開いている Realm データベースからすべてのオブジェクトを削除する
Realm.RemoveAll()
のパフォーマンスが若干向上します。 (問題番号2233 )Realm またはアプリ構成に対して baseFilePath を設定しない場合のエラー メッセージを改善しました。 ( 2863を発行する)
UWP ListView データバインディングを可能にするためにすべての Realm コレクションに
IList
実装を追加しました。 (問題番号1759 )
修正済み
- Realm パラメータの初期化が 2 回実行され、予期しない動作が発生する問題を修正しました。
- Realm に追加されたときに
IEmbeddedObject
とIAsymmetricObject
がRealmValue
として使用されるのを防ぎ、より意味のあるエラー メッセージを表示するようになりました。 - 暗号化された Realm への最後の外部参照がクライアント リセット エラーを受信してから新しい Realm のダウンロードが開始されるまでの間に閉じられた場合は、無料後の使用を修正します。 (コアアップグレード)
- リカバリを使用したクライアントリセット中に、最上位オブジェクトからリストへのパス プレフィックスにリンク列を持つ埋め込みオブジェクトを回復するときに、アサーションが失敗する問題を修正しました。 (コアアップグレード)
- 暗号化キーを使用して暗号化されていないファイルを実行すると、問題が復号化の失敗以外であることを示す誤解されたエラーメッセージが報告されることがあります。 (コアアップグレード)
- 同期ワーカー スレッドもサーバーからの変更セットの処理をすでに完了しているときに、書込みトランザクションをコミットした後すぐに同期された Realm を閉じると発生する可能性があるまれなデッドロックを修正します。 (コアアップグレード)
- 失敗の原因となった実際の同期エラーではなく、非同期オープン コールバックに「操作がキャンセルされました」エラーが配信される可能性がある競合状態を修正します。 (コアアップグレード)
- ブートストラップは単一の書込みトランザクションでは適用されません。一度に1 MB の変更セットの変更セット、または SDK によって構成された場合に適用されます。 (コアアップグレード)
- Apple プラットフォームでのデータベースの破損と暗号化の問題を修正しました。 (コアアップグレード)
- 名前の競合を避けるために、ソースで生成されたファイルに完全修飾名を追加しました。 (問題番号3099
- バインディングで管理されていないオブジェクトを使用する際に例外が発生する問題を修正しました(問題番号3094 )
- ユーザーがログアウトしたときにユーザーのプロファイルを取得するとアサーションが失敗する問題を修正しました。 (コアアップグレード)
- ".tmp_comaction_space" を削除しました Windows で Realm を圧縮した後に残っている ファイル。 (コアアップグレード)
SubscriptionSet.WaitForSynchronizationAsync
を待機しているときに同期された Realm を閉じると発生するクラッシュを修正しました。 (問題番号2952 )- プロパティの新しい値が現在の値と同じである場合に備えて、UI プロパティでセッターを呼び出すのを避けます。 これにより、 CollectionView またはMauiが 画面に表示されているときに、バインドされたプロパティのセッターが不必要に呼び出される問題を回避できます。 オブジェクトが現在のユーザーの権限に属していない場合は、埋め込み書込み (write) が行われるため、問題が発生します。 セルの再利用が含まれる場合、限定的な場合、これによりエラー ループが発生する可能性があります(iOS で検証済み)。 (問題番号3128 )
- ソース ジェネレーターが プロパティの初期化で使用される型の名前空間を追加しない問題を修正します。 (問題番号3135 )
- ドメイン再読み込みがオフになっている Unity アプリケーションで Realm が正しく動作しなくなる問題を修正しました。 (問題番号2898 )
- .NET 2.1 以降で
string.Contains
を使用する際に、検索stringがリテラルではないバグを修正しました。 (問題番号3134 ) - 使用されなくなった一部の
ErrorCode
列挙ノードへの[Obsolete]
通知を追加しました。 (問題番号3155
互換性
- Realm Studio: 12.0.0以降。
内部
- Core 12.13.0を使用します。
Realm.RefreshAsync
をネイティブ実装に置き換えました (PR # 2995 )
10.18.0 (2022-11-02)
機能強化
Realm モデル クラスを生成できるソース ジェネレーターである
Realm.SourceGenerator
を導入しました。 これは、Realm ライブラリを最新化するための継続的な作業の一部であり、将来的に特定の言語レベルの機能をより簡単に導入できるようになります。 ソース生成を使用するには、モデル クラスは基本インターフェースのいずれか(IRealmObject
、IEmbeddedObject
、またはIAsymmetricObject
)の実装を宣言し、部分的に宣言する必要があります。 例:public partial class Person: IRealmObject { public int Age { get; set; } public string Name { get; set; } public PhoneNumber Phone { get; set; } } public partial class PhoneNumber: IEmbeddedObject { public string Number { get; set; } public string Prefix { get; set; } }
その後、ソース ジェネレーターはインターフェースの完全な実装を追加します。
「クラシック」Realm モデル クラス(
RealmObject
、EmbeddedObject
、またはAsymmetricObject
から派生したクラス)を変換して新しいソース生成を使用するには、ほとんどの場合、クラスを部分的に定義し、対応するクラスの基本クラスを切り替えることを意味します。インターフェース実装。 クラシック Realm モデル定義は引き続きサポートされますが、将来は廃止される予定です。ソース ジェネレーターはまだbetaであることに注意してください。使用中に問題が発生した場合は、 情報提供 してください。 いくつか追加の注意事項を示します。
OnManaged
とOnPropertyChanged
は部分的なメソッドになりました。- 継承はサポートされていないため、Realm モデルは他のクラスから派生できません。
- ネストされたクラスはサポートされていません。
修正済み
Session
インスタンスでPropertyChanged
通知をサブスクライブするときに NullreferenceException がスローされる問題を修正し、サブスクライブ解除の前にガベージされる問題を修正しました。 (PR # 3061 )- Removed bitcode support from the iOS binary as it's no longer accepted for App Store submissions. (問題番号3059 )
IEmbeddedObject
からアクセスするときに親を返す問題を修正しました。 (問題番号2742 )- 固定されたコレクションの列挙型を作成すると、パフォーマンスが若干向上し、割り当てが減少するようになりました(問題番号2815 )。
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 12.9.0を使用します。
- ユーザーに問題とPRを自動的に割り当てるワークフローを追加しました。 (PR # 3069 )
- 変更ログがアップデートされたことを検証するためのワークフローを追加しました。 (PR # 3069 )
10.17.0 (2022-10-06)
機能強化
- リモート変更よりもローカル変更の統合を優先します - ローカル変更をコミットするときにユーザーが待機しなければならない時間を短縮します。 ダウンロードした変更セットを履歴に保存しないようにします。 (コアアップグレード)
- 辞書のキーや値のソートや識別のパフォーマンスが大幅に向上します。 最もコストのかかる操作が O(N log N) 回ではなく O(log N) に実行されるようになり、大規模な辞書ではソートにかかる時間が99 % 以上短縮されるようになりました。 (コアアップグレード)
- App Services アプリケーション配置モデルの移行をシームレスに処理します。 (コアアップグレード)
修正済み
- 同期セッションが閉じられ、同時にアプリが破棄される場合の無料使用後の使用を修正します。 (コアアップグレード)
- オブジェクトが初期化される前に例外がスローされるたびに、
RealmObjectBase
のアナライザで発生するNullReferenceException
を修正しました。 (問題番号3045 )
互換性
- Realm Studio: 12.0.0以降。
内部
- Core 12.9.0を使用
10.16.0 (2022-10-03)
機能強化
高パフォーマンスが一般に重要な書き込み負荷の高いワークロードを対象に
AsymmetricObject
を導入しました。 この新しいオブジェクト:- クライアントからサーバーへ一方向にデータを同期します
- は Realm に追加されると、クエリ、削除、または変更できなくなります
- はフレキシブルな同期でのみ使用可能
- どのタイプの関係の受信者にもならない
- には
EmbeddedObject
を含めることができますが、RealmObject
またはAsymmetricObject
にはリンクできません。
同じ書き込みトランザクション内で、
AsymmetricObject
とRealmObject
を追加することはできますclass Measurement : AsymmetricObject { [PrimaryKey, MapTo("_id")] public Guid Id { get; private set; } = Guid.NewGuid(); public double Value { get; set; } public DataTimeOffset Timestamp { get; private set; } = DateTimeOffset.UtcNow; } class Person : RealmObject { //............ } //..... var measurement = new Measurement { Value = 9.876 }; realm.Write(() => { realm.Add(measurement); realm.Add(new Person()); }); _ = asymmetricObject.Value; // runtime error _ = realm.All<Measurement>(); // compile time error
クライアントがリセットされた場合に、同期されていないローカルの変更をリモートの変更で自動的にマージしようとする 2 つのクライアント リセット ハンドラー(
RecoverUnsyncedChangesHandler
とRecoverOrDiscardUnsyncedChangesHandler
を追加しました。 具体的には、RecoverOrDiscardUnsyncedChangesHandler
を使用すると、サーバーのルールに従って自動マージが実行できない場合に、 破棄されるローカル戦略にフォールバックできます。 これらの 2 つの新しいステージは、DiscardUnsyncedChangesHandler
.RecoverOrDiscardUnsyncedChangesHandler
と比較すると、クライアント リセット イベントの処理をさらに簡素化します。今後は、 がデフォルトになる予定です。 例は次のとおりですクライアントがリセットされた場合に、同期されていないローカルの変更をリモートの変更で自動的にマージしようとする 2 つのクライアント リセット ハンドラー(
RecoverUnsyncedChangesHandler
とRecoverOrDiscardUnsyncedChangesHandler
を追加しました。 具体的には、RecoverOrDiscardUnsyncedChangesHandler
を使用すると、サーバーのルールに従って自動マージが実行できない場合に、同期されていない戦略を破棄するためにフォールバックできます。 これらの 2 つの新しいステージは、DiscardUnsyncedChangesHandler
.RecoverOrDiscardUnsyncedChangesHandler
と比較すると、クライアント リセット イベントの処理をさらに簡素化します。今後は、 がデフォルトになる予定です。 前述の戦略の詳細については、 Docsページをご覧ください。 新しいハンドラーの使用例は次のとおりです。var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new RecoverOrDiscardUnsyncedChangesHandler { // As always, the following callbacks are optional OnBeforeReset = (beforeFrozen) => { // executed right before a client reset is about to happen }, OnAfterRecovery = (beforeFrozen, after) => { // executed right after an automatic recovery from a client reset has completed }, OnAfterDiscard = (beforeFrozen, after) => { // executed after an automatic recovery from a client reset has failed but the DiscardUnsyncedChanges fallback has completed }, ManualResetFallback = (session, err) => { // handle the reset manually } } };
(PR # 2745 )
realm.All<Car>().Filter("Color IN {'blue', 'orange'}")
などの定数リスト式の string クエリ サポートを表示します。 これには、realm.All<Car>().Filter("NONE Features IN {'ABS', 'Seat Heating'}")
などのリストとリストの一致に関する一般的なクエリ サポートも含まれます。 (コアアップグレード)新しい Realm ファイルが初めてサーバーに接続するとき、特にオフライン時に大量のデータが書き込まれた場合のパフォーマンスが向上します。 (コアアップグレード)
サーバーの変更を適用するために使用される書込みトランザクションから、同期ワーカー スレッドで実行される作業の多くを移行し、他のスレッドが書込みをブロックする時間を短縮します。 (コアアップグレード)
同期変更セット パーサーのパフォーマンスが向上し、サーバーからの変更セットの適用が高速化されます。 (コアアップグレード)
修正済み
- プロジェクトに
[TargetFramework]
が定義されていない場合ごとに、より意味のあるエラー メッセージが表示されるようになりました。 (問題番号2843 ) SyncConfiguration
を使用して初めて読み取り専用 Realm を起動してもスキーマ バージョンが設定されなかったため、m_schema_version != ObjectStore::NotVersioned
アサーションが失敗する可能性がありました。 (コアアップグレード)- アップロード完了コールバック(
Session.WaitForUploadAsync
)は、それらを完了するダウンロード メッセージが完全に統合される前に、 を呼び出した場合があります。 (コアアップグレード) - exFAT ドライブで MacOS を使用して実行中に「F_BARRERFSYNC を使用した fctl() が失敗しました: デバイスの ioctl が不適切です」という例外を修正しました。 (コアアップグレード)
- 10 進128を 大きな意味で同期すると、クラッシュが発生する可能性があります。 (コアアップグレード)
Realm.Refresh()
では、実際には最新バージョンに進むことはできませんでした。 ブロッキングを必要としない現在のバージョンよりも新しいバージョンがある場合は、ドキュメント化された動作とは対照的に、代わりにそのバージョンに進みます。 (コアアップグレード)- 通知に関するいくつかの問題が修正されました。 (コアアップグレード)
- 複数のスレッドが Realm の初期オープンを同時に実行した場合に発生する可能性のある RealmCoordinator::m_sync_session でのデータ競合を修正します。
- SyncSession が親 Realm より廃止され、その後同じファイルの新しい Realm に採用された場合、そのファイルの同期書込み (write) は他のプロセスに通知されません。
- Apple プラットフォームのメインスレッドで書き込みを実行する際に発生する QoS バージョン逆警告の原因を 1 つ修正しました。 非同期通知が準備が整うまでの待機が、QoS に対応する方法で行われるようになりました。
- フレキシブルな同期のリンクにサブスクリプションを設定すると、サーバーはその処理方法を認識できません( # 5409 、 v 11.6.1以降)
- 大文字と小文字を区別しないクエリが、4バイトの UTF8 文字を含むstringを検索すると、プログラムはクラッシュします。 (コアアップグレード)
- Realm.add を使用して削除されたオブジェクトの追加を防止するための検証を追加しました。 (問題番号3020 )
互換性
- Realm Studio: 12.0.0以降。
内部
- Core 12.7.0を使用します。
10.15.1 (2022-08-08)
修正済み
- 10.15.0で導入された、Atlas App Services に対する非匿名ユーザー認証を妨げる問題を修正しました。 (問題番号2987 )
- ユーザー ID とプロバイダーを出力する
User.ToString()
にオーバーライドを追加しました。 (PR # 2988 ) User.Equals
の動作と一致する == および .= 演算子オーバーロードをUser
に追加しました。 (PR # 2988 )
互換性
- Realm Studio: 12.0.0以降。
内部
- Core 12.4.0を使用します。
10.15.0 (2022-08-05)
機能強化
- .NET6Mac Catalyst およびMaui による のプレビュー サポート。(PR # 2959 )
- メモリ マッピングと仮想アドレス空間の使用を削減(Core アップグレード)
修正済み
- 柔軟な同期 Realm(Core アップグレード)を開く際のデータ競合を修正しました。
RealmObject
RealmValue
を null またはその他の RealmObject 以外の値に設定するときに、バックリンクの削除が欠落していた問題を修正しました。 宛先オブジェクトを削除するときに、「キーが見つかりません」またはmixed.hpp:165: [realm-core-12.1.0] Assertion failed: m_type
などのアサーションの失敗が発生する可能性があります。 (コアアップグレード)- Windows で、アクティブな同期セッションがない場合に同期クライアントの CPU 使用率が高くなる問題を修正しました。 (コアアップグレード)
- iOS 14およびメモリが制限されているデバイスまたはフラグメント化されたデバイスで、多くの小さな文字列を含む変更セットの統合中に同期クライアントのパフォーマンスが向上しました(変更セット 1 件あたり合計1024バイト)。 (コアアップグレード)
- Realm-apply-to- State ツールで展開する文字列をデコードする際の例外を修正しました。 (コアアップグレード)
- エミュレートされたプロセス間条件変数を使用するプラットフォーム(Android Linux 以外のほとんどのプラットフォーム)で複数のスレッドが書込みロック (write lock) を待機している間にトランザクションをコミットする際のデータ競合を修正しました。 (コアアップグレード)
- 仮想アドレス空間が不足するケースを修正しました(mmap の障害として表示/報告)(Core アップグレード)
- 110有効ビットを超える小数128の値がサーバーと正しく同期されませんでした(Core アップグレード)
互換性
- Realm Studio: 12.0.0以降。
内部
- Core 12.4.0を使用します。
10.14.0 (2022-06-02)
機能強化
Realm.WriteAsync
のより効率的な置換を追加しました。 以前の API では、バックグラウンド スレッドが開始され、ここで Realm が開かれ、バックグラウンド スレッドで同期書込みトランザクションが実行されます。 新しい API は書込みロック(write lock)(トランザクションの開始)を非同期に取得し、トランザクションを非同期にコミットしますが、実際の書込みブロックは元のスレッドで実行されます。 つまり、ブロックがキャプチャする前にキャプチャされたオブジェクトやクエリは、スレッドセーフな参照に依存せずにブロック内で使用できます。 重要な点として、非同期呼び出しと同期呼び出しを組み合わせることができます。 また、バックグラウンド スレッドで任意のRealm.WriteAsync
を呼び出す場合、呼び出しは同期的に実行されるだけであるため、読みやすくするためにRealm.Write
を使用する必要があります。 新しい API は、Realm.WriteAsync<T>(Func<T> function, CancellationToken cancellationToken)
、Realm.WriteAsync(Action action, CancellationToken cancellationToken)
、Realm.BeginWriteAsync(CancellationToken cancellationToken)
、Transaction.CommitAsync(CancellationToken cancellationToken)
で構成されています。 一方、Transaction.Rollback()
には非同期カウンターポートは必要ありません。 非推奨の API 呼び出しは、Realm.WriteAsync(Action<Realm> action)
、Real.WriteAsync<T>(Func<Realm, IQueryable<T>> function)
、Realm.WriteAsync<T>(Func<Realm, IList<T>> function)
、Realm.WriteAsync<T>(Func<Realm, T> function)
です。 の使用例を示します。
(PR # 2899 )using Realms; var person = await _realm.WriteAsync(() => { return _realm.Add( new Person { FirstName = "Marco" }); }); // you can use/modify person now // without the need of using ThreadSafeReference
- サーバーからユーザーを削除するためのメソッド
App.DeleteUserFromServerAsync
を追加しました。 また、ユーザーがローカルで無効化され、ローカル データがすべて削除されます。 ユーザーがサーバーからアップロードしたデータは削除されません。 (問題番号2675 ) - コレクションがクリアされたときに true となるブール値プロパティ
ChangeSet.IsCleared
を追加しました。 また、Realm コレクションでは、コレクションがクリアされたときに、Remove
ではなくReset
のアクションによりCollectionChanged
イベントが発生するようになりました。 これは、IList
やISet
などのコレクション プロパティでのみ機能することに注意してください。 (問題番号2856 ) - に追加しました - これは、Realm が初めて開かれたときに呼び出されるコールバックです。
PopulateInitialSubscriptions
FlexibleSyncConfiguration
Realm が開かれる前に、Realm に追加される初期サブスクリプションを作成できます。 (問題番号2913 ) - SharedInfo のバージョンを12にアップグレードします。 これには、Realm Studio などのマルチプロセス シナリオでファイルにアクセスするすべてのアプリの更新が必要です。
- 同期クライアントは、サーバーからの補完的な書込みエラー メッセージをグレースフルディングして処理し、どのオブジェクトが補完的な書込みを発生させているかについての詳細情報を SDK の同期エラー ハンドラーに渡します。 ( # 5528 )
修正済み
- セットにオブジェクトを追加し、親オブジェクトを削除し、その後前述のオブジェクトを削除するとクラッシュが発生します( # 5387 )
- ブートストラップが中断された場合、Flexible Sync では同期が正しく再開されない( # 5466 )
- 柔軟な同期により、サーバーからのブートストラップがブートストラップ全体を受信した場合にのみ適用されるようになりました。サーバー上の読み取りスナップショットの変更によって孤立したオブジェクトが存在しないことが保証されます( # 5331 )
- Apple プラットフォームでの書込みパフォーマンスにおけるパフォーマンス低下を部分的に修正します。 空の書込みトランザクションをコミットするには ~ 10 x が10.13.0よりも高速で、 ただし、 10.7.1より前よりも遅くなります。 クラッシュセーフなファイル同期を使用するため( v 10.7.1以降)。 (Swift 発行番号7740 )。
互換性
- Realm Studio: 12.0.0以降。
内部
- Core 12.1.0を使用します。
10.13.0 (2022-05-18)
機能強化
- 同期 Realm をローカル Realm に、ローカル Realm を同期 Realm に変換する機能を追加しました。 (問題番号2746 )
- 同期されていない変更の破棄と呼ばれる新しいクライアント リセット戦略のサポートを追加しました。 この新しいステージにより、同期された Realm でのクライアント リセット イベントの処理が大幅に簡素化されます。
この追加により、
Session.Error
は非推奨になります。 現在のSession.Error
を一時的に引き続き使用するには、次の操作を行う必要があります。
新しい 同期されていない変更の破棄機能を利用するには、次の操作を実行する必要があります(すべてのコールバックは任意)。var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new ManualRecoveryHandler(); };
代わりに、非推奨期間が終了した後も手動ソリューションを使用し続ける場合は、次の操作を実行する必要があります。var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new DiscardLocalResetHandler { OnBeforeReset = (beforeFrozen) => { // executed right before a client reset is about to happen }, OnAfterReset = (beforeFrozen, after) => { // executed right after a client reset is has completed }, ManualResetFallback = (session, err) => { // handle the reset manually } } };
var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new ManualRecoveryHandler((sender, e) => { // user's code for manual recovery });
修正済み
- Xamarin.iOS での起動時に Realm API によってスローされる
System.DllNotFoundException
を修正しました(問題番号2926 、 10.12.0以降)
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.14.0を使用します。
10.12.0 (2022-05-05)
機能強化
- 、 Android、 で のプレビュー.NET6iOSMaui サポート。新しい .NET 6モバイル ワークロードの一時的なサポートを追加しました(Macalyst は後で有効になります)。 .NET ツール自体はまだプレビュー段階であるため、新しいプラットフォームの適切なテスト範囲はまだありません。 https://github.com/realm/realm-dotnet/issues/new/Chooseで見つかった問題を報告してください。
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.14.0を使用します。
10.11.2 (2022-04-12)
修正済み
- 暗号化を使用する際の破損バグを修正しました。 (中心的発行数5360 )
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.14.0を使用します。
10.11.1 (2022-03-31)
修正済み
- プロジェクトがネイティブ ハンドラーを使用するように構成されている場合でも、マネージド HtpClientHandler が Xamarin アプリケーションで使用される問題を修正しました。 (問題番号2892 )
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.12.0を使用します。
10.11.0 (2022-03-28)
機能強化
Session
のSessionConnectionState
を取得するためにプロパティSession.ConnectionState
を追加しました。 さらに、Session
にINotifyPropertyChanged
が実装され、Session.ConnectionState
の変更をリッスンできるようになります。 (問題番号2801 )- Realm が Windows ARM 64での .NET Framework、.NET Core、UWP アプリの実行をサポートするようになりました。 ( により2704と2817が発行されます )
- Realm .NET SDK で使用されるデフォルトの HTTP クライアント ハンドラーをオーバーライドして HTTP 呼び出しを実行できるプロパティ
AppConfiguration.HttpClientHandler
を追加しました。 HTTPこれは、ユーザーログイン、関数呼び出し、リモート 呼び出しなどのMongoDB 呼び出しの動作にのみ影響することに注意してください。同期クライアントはネイティブの Webhook 実装を使用し、提供されたメッセージ ハンドラーは使用しません。 (問題番号2865 )
修正済み
- [Unity]
Tools->Realm->Weave Assemblies
エディター メニューから呼び出されると、エラーUnityEngine.UnityException: get_dataPath can only be called from the main thread
でウィーバーが失敗する問題を修正しました。 (問題番号2836 ) - 無効な Realm コレクション(例: 削除されたオブジェクトに属するリスト)を列挙するときに
RealmInvalidObjectException
が発生する問題を修正しました。 (問題番号2840 ) - クエリ パーサーが、プロパティ名として「in」を受け入れないようになりました(中心的問題番号5312 )
- アプリケーションは、'KeyNotFound' やアサーション "has_refs()" などの例外でクラッシュすることがあります。 ファイルの破損を示す他の問題もこれにより修正される可能性があります。 ここで述べられた 1 つのは、問題の解決につながる 1 つです。 (中心的発行数5283 )
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.12.0を使用します。
- 一部のiOS アセットでインタープリターをオンにすることで、Windows デバイスでのベンチマークの実行を有効にしました。
10.10.0 (2022-02-28)
GUID 表現の問題
このリリースでは、Guid 値がデータベースに保存される方法における大きなバグが修正されています。 ローカル(同期されていない)データベースの自動移行を提供しますが、Sync を使用するアプリをアップグレードするときは特別な注意が必要です。
Context
GUID は4コンポーネント - int
、 short
、 short
、およびbyte[8]
によって表されます。 Microsoft の Guids は、最初の 3 つのコンポーネントをシステムのエンディアン性(すべての CPU でリトルエンディアン)でエンコードするという点で UUID 仕様とは異なりますが、UUID はコンポーネントをビッグ エンディアンとしてエンディアンします。 最終結果は、.NET SDK によってGuid
として解釈された場合と Realm Database によってUUID
として解釈された場合は、同じバイトの string 表現が異なることを示します。例: f2952191-a847-41c3-8362-497f92cb7d24
と912195f2-47a8-c341-8362-497f92cb7d24
(最初の 3 つのコンポーネントのバイトのスワップに注意)。 Realm Studio で .NET SDK によって作成されたデータベースを開き、Guid プロパティの値を確認すると、問題が確認できます。
修正
当社が提供している修正は、.NET SDK の動作を調整して、ビッグ エンディアン表現でデータベースへのガイドを読み取り/書込むことです。 つまり、SDK とデータベースは一貫して同じ値を表示します。 これには、「 ローカルと同期された Realm のセクション 」で説明されているいくつかの影響があります。
ローカル Realm
ローカル Realm の場合、Realm が新しい SDK を使用して初めて開かれたときに、1 回限りの移行を実行しています。 この移行中に、すべての Guid フィールドをビッグエンディアン形式に更新します。 つまり、string 表現は同じままですが、データベース内の 値はそれに合わせて変化します。 つまり、アップグレード プロセスはシームレスである必要がありますが、SDK の古いバージョンにダウングレードする場合には、バイト順が反転します。 ダウングレードした場合でも、移行は複数回実行されることはありません。
同期された Realm
同期された Realm にはクライアント移行は提供されません。 これは、システムの分散性質により、一貫性のない状態が一定期間存在することを意味するためです。 代わりに、 Guid
プロパティの値はデータベースにすでに保存されているときに読み取られます。つまり、string 表現は SDK の以前のバージョンと比較して反転されますが、Atlas/Compass/Realm Studio の表現と一致するようになります。 。 アプリが該当する一般的なグループは 3 つあります。
- クライアント上の Guid プロパティのstring値を考慮しない場合は、何もする必要はありません。 値は引き続き一意で有効な Guids になります。
- クライアントアプリからの string ガイド値を使用する場合(たとえば、ユーザー ID を CMS と相関させる場合など)、クライアント デバイスを完全に制御できる場合は、1 回限りの移行を実行することをお勧めしますAtlas のデータの読み取りを許可し、すべてのユーザーにアプリの最新バージョンへのアップグレードを強制します。
- すべてのユーザーに同時に更新を強制できない場合は、各 Guid プロパティに別のプロパティを追加し、2 つ間でデータを移行するtrigger関数を書込むことでライブ移行を行うことができます。 アプリの古いバージョンは元の プロパティに書き込み、新しいバージョンは新しいプロパティに書き込み、trigger は 2 つ間で変換します。
同期を使用しており、SDK の最新バージョンに更新する必要があるが、データを移行する準備ができていない場合は、 Opting out
セクションを参照してください。
オプトアウト
何らかの理由で修正された動作をオプトアウトしたい場合は、 Realm.UseLegacyGuidRepresentation
プロパティをtrue
に設定することで一時的にオプトアウトできます。 これは推奨はされませんが、バグ修正やその他の改善が行われている間に移行をテストするためにさらに時間が必要な場合に使用できます。 これをtrue
に設定すると、次の 2 つの処理が行われます。
- 10.10.0以前のバージョンが返されます。 リトルエンディアン表現で Guid 値を読み取り/書き込みする動作
- これにより、ローカル Realm の移行コードが無効になります。
UseLegacyGuidRepresentation
がfalse
に設定されているときに Realm ファイルをすでに開いている場合は、移行は元に戻されないことに注意してください。
機能強化
- 移行中にオブジェクトのプライマリキーを変更できない制限を解除しました。 動的 API と厳密に型指定された API の両方でこれを実行できるようになりました。
var config = new RealmConfiguration { SchemaVersion = 5, MigrationCallback = (migration, oldVersion) => { // Increment the primary key value of all Foos foreach (var obj in migration.NewRealm.All<Foo>()) { obj.Id = obj.Id + 1000; } } }
- [Unity] クラスタを削減し、他の3サードパーティ エディター プラグインと整合性を持たせるために、Unity エディターの Realm メニュー項目を
Tools/Realm
に移動しました。 (問題番号2807 )
修正済み
- 非同期テストで Realm にアクセスするたびに
System.Runtime.InteropServices.SEHException
がスローされる xUnit テストに関する問題を修正しました。 (問題番号1865 ) - Realm の固定時に不要なメタデータの割り当てが発生するバグを修正しました。 (問題番号2789 )
- Realm が管理するオブジェクト(例:
RealmObject
、リスト、結果など)が移行ブロック中に割り当てられ、ガベージが収集されるまで Realm を開いたままにします。 これには、移行後すぐに Realm を削除できなくなったり、別の構成で Realm を開くことができなくなったりするなど、わずかな影響がありました。 (PR # 2795 ) - Unity 3D の IL2 C++コンパイラーがRealmの依存関係の 1 つを正しく処理できない問題を修正しました。 (問題番号2666 )
- Realm NuGet パッケージの opx ランタイム パスを Apple Silicon(ユニバーサル)アーキテクチャにも適用するように修正しました(問題番号2732 )
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.10.0を使用
10.9.0 (2022-01-21)
機能強化
MongoDB Realm との新しい同期モード( 「Flexible Sync」と呼ばれる)のサポートを追加しました。 Flexible Sync を使用する場合、クライアントはどのクエリを実行するかを決定し、これらのクエリに一致するすべてのオブジェクトをサーバーにリクエストします。 一致するオブジェクトは、 と同様にローカル Realm に保存され、オフラインのときにクエリやアクセスができます。 この機能は beta であるため、フィードバック(正と負の両方)は非常に評価が高く、通常、本番環境のワークロードで使用することはまだ推奨されません。
FlexibleSyncConfiguration
という新しい構成タイプを追加しました。 このタイプを使用して、サーバーとの新しい同期モードを使用するRealm
インスタンスを取得します。SyncConfiguration
クラスを非推奨にし、代わりにPartitionSyncConfiguration
を採用しました。 2 つのクラスは同等であり、FlexibleSyncConfiguration
との比率が向上するように新しいタイプが導入されています。 これら 2 つのタイプは同等であり、古い「パーティション同期」モードを使用しているRealm
インスタンスを開くことができます。SubscriptionSet
という新しいタイプを追加しました。 これは、この Realm に対して作成されたさまざまなアクティブなクエリ サブスクリプションを保持するコレクションです。 このコレクションには、Realm.Subscriptions
プロパティを介してアクセスできます。 ローカル 同期とパーティション同期 Realm ではnull
になり、柔軟な同期 Realm では null 以外になります。
最小の例は次のようになります。
var config = new FlexibleSyncConfiguration(user); var realm = Realm.GetInstance(config); // Add a new subscription realm.Subscriptions.Update(() => { var year2022 = new DateTimeOffset(2022, 1, 1); var saleOrders = realm.All<SaleOrder>().Where(o => o.Created > year2022); realm.Subscriptions.Add(saleOrders); }); // Wait for the server to acknowledge the subscription and return all objects // matching the query await realm.Subscriptions.WaitForSynchronizationAsync(); // Now we have all orders that existed on the server at the time of // subscribing. From now on, the server will send us updates as new // orders get created. var orderCount = realm.All<SaleOrder>().Count();
- 同じクラスのクエリでは複数のサブスクリプションを作成できます。その場合、それらは論理的な
OR
と結合されます。 たとえば、 2022で作成されたすべての注文のサブスクリプションを作成し、現在のユーザーが作成したすべての注文のサブスクリプションを作成すると、ローカル Realm には 2 つの結果セットの和集合が含まれます。 - サブスクリプションには、名前を付けることも(サブスクリプション解除が簡単になります)、名前を付けないこともできます。 同じクエリで複数の名前のないサブスクリプションを追加しても操作はありません。
- アクティブなサブスクリプションのセットを変更すると、結果の差が大きくなくても、サーバー側での操作ではコストがかかります。 したがって、サーバー インスタンスが過負荷にならないように、サブスクリプションの更新を可能な限りバッチすることをお勧めします。 ベストプラクティスは、ユーザー サブスクリプションをアップタイム(通常は Realm が初めて開かれるときに宣言)し、絶対に必要な場合にのみアップデートすることです。
- APIと現在の制限の詳細については、 Docsを参照してください。
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.8.0を使用します。
- リリース テストは、Realm-dep ではなく Realm-qa に対して実行されます。 (PR # 2771 )
10.8.0 (2022-01-17)
機能強化
RealmConfigurationBase.FallbackPipePath
プロパティを追加しました。 ほとんどの場合、このプロパティは null のままにすることができますが、 FAT 32を使用する Android の外部ストレージなど、名前付きパイプを作成できないファイルシステムで Realm を開く場合に使用する必要があります。 この場合、パスは、名前付きパイプを作成できる別のファイルシステム上のロケーションを指す必要があります。 (PR # 2766 )- 文字列ベースのクエリ構文で算術操作(+、-、*、/)のサポートを追加しました(
realm.All<Foo>().Filter("some-query")
)。 オペランドは、数値型のプロパティや定数(整数、浮動小数、double 型、Decimal 128 )にすることができます。"(age + 5) * 2 > child.age"
のようなクエリを記述できるようになりました。 (コアアップグレード)
修正済み
- macOS で Unity プロジェクトを開くときに
Sharing violation on path ...
エラーが発生する可能性がある競合状態を修正しました。 (問題番号2720 、 @tomkrikoianで修正) - 読み取り専用 Realm で
Realm.GetInstance
が複数回呼び出された場合にスローされるエラーを修正しました。 (問題番号2731 ) Count()
がIQueryable
で呼び出されると、LIMIT
句が無視されるバグを修正しました - 例realm.All<Foo>().Filter("Bar > 5 LIMIT(1)).Count()
のような式は、string ベースの述語の制限を無視し、すべての一致の数を返します。 (問題番号2755 )- インターフェース プロパティで並べ替えを可能にするために
RealmResultsVisitor.TraverseSort
のロジックを修正しました。 (問題番号1373 、 @daawaan による貢献)
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.8.0を使用します。
- プレリリース パッケージの名前を小文字の「します」を使用するように更新しました - 例
10.7.1-pr-2695.1703
ではなく10.7.1-PR-2695.1703
を使用します。(PR # 2765 ) - CLI を使用してアプリケーションをインポート/エクスポートし、管理 API 経由で構成するように移行しました。 (PR # 2768 )
10.7.1 (2021-11-19)
修正済み
- Realm パスが長すぎてフォールバック ハッシュ名(OS に依存しますが、Linux では300文字)がトリガーされた場合は、ユーザーが削除されても同期ユーザーの Realm は削除されませんでした。 (コアアップグレード)
- クライアントのクロックが30分以上進んでいる場合は、アクセス トークンの更新を試行しないでください。 (コアアップグレード)
- 認証リクエストが失敗した場合は、同期スレッドを強制的に休止しないでください。 これは、 30分以上オフラインになった後に同期によって接続を試みると、アプリケーションで UI がハングしていることが確認できます。 (コアアップグレード)
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.6.1を使用します。
10.7.0 (2021-11-09)
機能強化
- Realm が 同期された 1 つまたはローカル Realm の場合は
null
の場合に、この Realm の同期セッションを返すRealm.SyncSession
プロパティを追加しました。 これにより、非推奨となったGetSession(this Realm)
拡張メソッドが置き換えられます。 (PR # 2711 )
修正済み
- ディスク上の スキーマのスーパーセットであるスキーマを使用して読み取り専用 Realm を開くと、
RealmException
がスローされるバグを修正しました。 これで、コードは正常に動作し、ディスク上のスキーマに存在しないクラスは空のコレクションとして扱われます(例:realm.All<ThisIsNotInOnDiskSchema>().Count == 0
。 (問題番号2619 ) - Windows のランサムウェア保護がオンになっている場合、バイナリ アプリ フォルダーに「ドキュメント」フォルダーが作成されるバグを修正しました。 (問題番号2685 )
- Realm ウィーバー後に
PropertyChanged.Fody
が実行されると、誤ったプロパティ実装が生成される問題を修正しました。 (問題番号1873 ) - [Unity] カスタム ユーザー データを直列化および逆直列化するために必要な追加のコンストラクターを保存しました。 (PR # 2519 )
Schema
プロパティが明示的に設定されたRealmConfiguration
を同時に作成すると、InvalidOperationException
が発生する問題を修正しました。 (問題番号2701 )- [Unity] Realm パッケージが Unity パッケージ マネージャー経由でインストールされていない場合に、iOS 用のビルドで
NullReferenceException
が発生する問題を修正しました。 (問題番号2698 ) - 提供された Realm スキーマがディスク上のスキーマと一致しない場合に、固定されたオブジェクトのプロパティが誤った値を返したり例外をスローしたりする可能性があるバグを修正しました。 (問題番号2670 )
- Realm への外部参照が解放される同時に同期セッションが閉じようとしたときに、まれにアサーションの失敗またはデッドロックを修正しました。 (コアアップグレード)
- 削除されたユーザーと同期 Realm を開くときにアサーションが失敗する問題を修正しました。 代わりに例外がスローされます。 (コアアップグレード)
- アクセス トークン更新応答が受信されているときにユーザーがログアウトされた場合にtriggerされる可能性があるまれにセグメント違反を修正しました。 (コアアップグレード)
- 同期された Realm のダウンロードが完了した後も進行状況通知が引き続き呼び出されるバグを修正しました。 (コアアップグレード)
- EPERM が slowate() から返されるようにします。 Linuxこれにより、 などのユニークなファイルシステムを持つ 環境でAmazon Web ServicesLambda を実行するためのサポートが向上します。レポート作成と修正の提案のうち (コアアップグレード)
- ユーザーの更新トークンの有効期限が切れたときに、ユーザーがログイン状態のままになる問題を修正しました。 (コアアップグレード)
- SyncManager には一貫性のないロックがいくつかあり、そのため、データ競合やデッドロックが発生する可能性があり、非常に奇妙なことが行われるテスト以外では実行されない方法でした。 (コアアップグレード)
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.6.0を使用します。
- iOS ラッパーは、Xcode 10によって導入され、Xcode 12によってデフォルトとして使用される「新しいビルド システム」でビルドされるようになりました。 詳細については、 cmake のDocsを参照してください。
GetInstanceAsync
で同期された Realm を開くときに、結果の Realm インスタンスを更新するようになりました。 (問題番号2256 )- cloud-Develop で実行されているすべてのプラットフォームの同期テストを追加しました。 (問題番号2049 )
- エミュレータで実行中の Android テストを追加しました。 (問題番号2680 )
- Slett(フィードURL )を使用して S3 へのプレリリース パッケージの公開を開始しました。 (問題番号2708 )
- すべてのビルドで LTO を有効にします。 (PR # 2714 )
10.6.0 (2021-09-30)
機能強化
セットをラップする
IQueryable
コレクションを取得するために、ISet
に 2 つの拡張メソッドを追加しました。set.AsRealmQueryable()
を使用すると、IQueryable<T>
からISet<T>
を取得できます。これは通常のクエリ可能なコレクションとして扱われ、LINQ または でフィルタリング/順序付けできます。Filter(string)
set.Filter(query, arguments)
はセットをフィルタリングし、フィルタリングされたコレクションを返します。 これはset.AsRealmQueryable().Filter(query, arguments)
とほぼ同等です。
結果として得られるクエリ可能なコレクションは、
realm.All<T>()
を呼び出して取得される結果と同じように動作します。つまり、変更されたときに通知が発行され、自動的に更新されます。 (問題番号2555 )Migration
に 2 つの新しいメソッドを追加しました(発行番号2543 )。RemoveType(typeName)
により、移行中に 型とそのスキーマを Realm から完全に削除できるようになります。RenameProperty(typeName, oldPropertyName, newPropertyName)
により、移行中にプロパティの名前を変更できます。
Realm スキーマは、モデル クラスから自動的に生成されるのではなく、実行時に構築できるようになりました。 自動生成は引き続き機能し、Realm ユーザーの大多数のニーズをカバーする必要があります。 オブジェクトの形状が実行時にのみ認識される情報に依存している場合、または既知のサイズのコレクションを クラスのプロパティとして表現することでパフォーマンス上の利点が得られる場合がある場合は、スキーマを手動で構築する必要がある場合があります。 (問題番号824 )
RealmConfiguration.ObjectClasses
は非推奨となり、代わりにRealmConfiguration.Schema
が採用されるようになりました。RealmSchema
にはType[]
からの暗黙的な変換演算子が付与されているため、以前はObjectClasses = new[] { typeof(Foo), typeof(Bar) }
のように似ていたコードをSchema = new[] { typeof(Foo), typeof(Bar) }
に簡単に更新できます。Property
は、そのプロパティからセッターを削除することにより、読み取り専用の構造体に変換されました。 これらは以前は何も行われていなかったため、他のユーザーが使用しているとは限りません。- 有効なオプションの範囲を明示的にすることで、Realm プロパティの宣言を簡素化するために、
Property
にいくつかのファクトリー メソッドを追加しました(例:Property.FromType<int>("IntProperty")
またはProperty.Object("MyPersonProp", "Person")
。Property
のコンストラクターは高度なシナリオをサポートするためにパブリックになりましたが、ファクトリー メソッドを使用することをお勧めします。 ObjectSchema.Builder
を公開し、その API を効率化しました。 これを使用すると、単一のオブジェクトのスキーマの可変表現を構築し、それにプロパティを追加または削除できます。 空のビルダを取得するか、既存のモデルクラスの情報でそれを確認できます(つまりRealmObject
またはEmbeddedObject
から継承)。RealmSchema.Builder
を公開し、その API を効率化しました。 Realm 全体のスキーマの可変表現を構築し、それにオブジェクト スキーマを追加または削除できます。- 新しい API の使用方法の簡単な例は次のようになります。
public class Person : RealmObject { public string Name { get; set; } public Address Address { get; set; } } // Declare schema from existing model classes var config = new RealmConfiguration { Schema = new[] { typeof(Person), typeof(Address) } }; // Manually construct a schema - we don't need to call .Build() on the builders // because we have implicit conversion operators defined that will call it for us. // Explicitly calling .Build() is also perfectly fine, if a little more verbose. var config = new RealmConfiguration { Schema = new RealmSchema.Builder { new ObjectSchema.Builder("MyClass", isEmbedded: false) { Property.FromType<int>("Id", isPrimaryKey: true), Property.PrimitiveDictionary("Tags", RealmValueType.String) }, new ObjectSchema.Builder("EmbeddedClass", isEmbedded: true) { Property.Primitive("DateProp", RealmValueType.Date, isNullable: true) } } }; // Enhance an existing model with new properties that will be accessible via // the dynamic API. var personSchema = new ObjectSchema.Builder(typeof(Person)) { Property.FromType<string>("NewStringProp") }; var config = new RealmConfiguration { Schema = new RealmSchema.Builder { personSchema, new ObjectSchema.Builder(typeof(Address)) } }; // Regular Person properties can be accessed as usual while runtime defined ones // need to go through the dynamic API. var person = realm.All<Person>().First(); var name = person.Name; var stringPropValue = person.DynamicApi.Get<string>("NewStringProp");
Linuxモード( Realm 、 ディスクからスキーマを読み取る場合)、スキーマには プロパティを持たないオブジェクトが含まれています。 (問題番号1978 )
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.4.1を使用します。
- セルフホスト型ランサーで実行される Perf テストを移行しました。 (PR # 2638 )
10.5.1 (2021-09-22)
修正済み
- getter 専用の
RealmObject
プロパティを含むクラスのコンパイル中にNullReferenceException
が報告されるバグを修正しました。 (問題番号2576 ) - [] を使用して WTF .NET Framework アプリケーションを配置する際に
Unable to load DLL 'realm-wrappers'
が発生する問題を修正しました。 これは、Realm が依存するネイティブ ライブラリに誤った BuildAction タイプが適用されていたためです。 (問題番号1877 ) - [Unity] で、
Mono.Cecil
をすでに参照しているプロジェクトに Realm パッケージをインポートすると、Multiple precompiled assemblies with the same name Mono.Cecil.dll
による Unity のビルドが失敗する問題を修正しました。 (問題番号2630 ) - 非常に特定のエッジ シナリオで実行時に が見つからない場合があるバグを修正しました。 このようなシナリオの詳細については、 CRの説明 を参照してください。 (問題番号1568 )
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.4.1を使用します。
10.5.0 (2021-09-09)
機能強化
- スレッドセーフリファレンスが、クエリに対応する結果以外のソース トランザクション バージョンを固定しなくなりました。 (コアアップグレード)
- コレクションによってサポートされる結果へのスレッドセーフリファレンスは、現在の書込みトランザクション (write transaction) でコレクションが作成されていない限り、書込みトランザクション (write transaction) 内で作成できるようになりました。 (コアアップグレード)
- 同期された Realm は 2 回開かれることがなくなり、使用されるアドレス空間とファイル記述子が半分に制限されます。 (コアアップグレード)
修正済み
- null プライマリキーを持つオブジェクトが別の同期クライアントによって削除された場合、例外
KeyNotFound: No such object
がトリガーされる可能性があります。 (コアアップグレード) - 以前にユーザーのログアウト中にアプリがクラッシュした場合に、アサーション
m_state == SyncUser::State::LoggedIn
が発生する可能性のある競合状態を修正しました。 (コアアップグレード)
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.4.1を使用します。
- Slack にリリースを投稿するアクションを追加しました。 (問題番号2501 )
- 最新バージョンの変更ログを抽出するための MSBuild インライン タスクを追加しました。 (問題番号2558 )
- リリースが成功すると、元の REをマージし、リリースにタグを付けて、変更ログを更新します。 (PR # 2609 )
10.4.1 (2021-09-03)
修正済み
- SDK が古いバージョンの Linux で動作しなくなる回帰の問題を修正しました。 (問題番号2602 )
- 動的 API の使用中にプライマリキーの変更のチェックを回避する問題を修正しました。つまり、
"some-new-value"
がmyObj
のプライマリキー値と異なる場合、myObj.DynamicApi.Set("Id", "some-new-value")
はNotSupportedException
を正しくスローするようになりました。 (PR # 2601 )
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.3.1を使用します。
- をカバーするコード カバードのアップロードを開始しました。 (問題番号2586 )
- RealmObjectBase 継承から
[Serializable]
属性を削除しました。 (PR # 2600 )
10.4.0 (2021-08-31)
修正済み
- カスタム ロガーが設定されている場合でも、Unity の
Logger.Default
が常にDebug.Log
に戻ってしまう問題を修正しました。 (問題番号2481 ) - Unity の
Logger.Console
が、Debug.Log
ではなくConsole.WriteLine
を使用する問題を修正しました。 (問題番号2481 ) - Newsonソフト.Json および同様のシリアライザーが基本プロパティを直列化しようとするのを防ぐために、RealmObjectBase に直列化の注釈を追加しました。 (問題番号2579 )
- WTF で UI バインドされたコレクションから要素を削除するときに
InvalidOperationException
が発生する問題を修正しました。 (問題番号1903 ) - ユーザー プロファイルが実行間で正しく保持されるようになりました。 (コアアップグレード)
- RealmObject 継承を含む RealmValue のリストのネストされた階層を介して通知を送信する際のクラッシュを修正しました。 (コアアップグレード)
- RealmValue プロパティによってリンクされているオブジェクトが無効化されている場合(同期のみ)のクラッシュを修正しました。 (コアアップグレード)
- リスト内の埋め込みオブジェクトを置き換えるときに、 以前のサイズ履歴の破損を修正しました 。 (コアアップグレード)
- RealmValue プロパティがすでにローカルに存在する場合に AddCluster 手順を適用する際に、同期クライアントでアサーションが失敗する問題を修正しました。 (コアアップグレード)
RealmValue
プロパティがすでにローカルに存在する場合にAddColumn
指示を適用すると、同期クライアントでInvalid data type
アサーションが失敗する問題を修正しました。 (コアアップグレード)
機能強化
リストをラップする
IQueryable
コレクションを取得するために、IList
に 2 つの拡張メソッドを追加しました。list.AsRealmQueryable()
を使用すると、IQueryable<T>
からIList<T>
を取得できます。これは通常のクエリ可能なコレクションとして扱われ、LINQ または でフィルタリング/順序付けできます。Filter(string)
list.Filter(query, arguments)
はリストをフィルタリングし、フィルタリングされたコレクションを返します。 これはlist.AsRealmQueryable().Filter(query, arguments)
とほぼ同等です。
結果として得られるクエリ可能なコレクションは、
realm.All<T>()
を呼び出して取得される結果と同じように動作します。つまり、変更されたときに通知が発行され、自動的に更新されます。 (問題番号1499 )Realm スキーマのキャッシュを追加しました。 これにより、
RealmConfiguration.ObjectClasses
が明示的に設定されているRealm.GetInstance
呼び出しが高速化されます。 速度の向上は、モデル クラスの数と複雑さによって異なります。 有効なすべての Realm プロパティ タイプを含むスキーマをテストする参照ベンチマークでは、Realm.GetInstance の25 % の速度増加が示されました。 (問題番号2194 )複雑なスキーマを持つ Realm のコレクション通知子を作成する際のパフォーマンスが向上します。 SDK では、同期クエリの最初の実行時に、通知をサブスクライブするための最初の呼び出しによって実行されるスレッドでの作業が大幅に少なくなります。
特に、深くネストされたオブジェクト グラフと、コレクション内の少数のオブジェクトを含む List または Set プロパティを持つオブジェクトの通知用変更セットを計算するパフォーマンスが向上します。
クエリ パーサーが
BETWEEN
演算子を受け入れるようになりました。realm.All<Person>().Filter("Age BETWEEN {20, 60}")
のように使用でき、"Age" はオープン 間隔内になければなりません ] 20 、 60 [] 。 (コアアップグレード)
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.3.1を使用します。
- 開かれた Realm のすべての状態のスレッドローカル辞書を保持するために使用されていた RealmStates 辞書を削除しました。 これは削除中に開いている Realm を検出するためにのみ使用され、現在はネイティブの
delete_realm_files
メソッドによって処理されています。 (PR # 2251 ) - 混合パネルへの分析データの送信を停止しました。
- MongoDB Chartsへのベンチマーク結果のアップロードを開始しました。 (問題番号2226 )
- 専用のベンチマークワークフローを GHA から削除しました。 (問題番号2562 )
- Github アクション で Windows ラッパーを構築するときは、Windows 81 SDK を使用します。 (問題番号2530 )
- CodeQL ワークフローを追加しました。 (問題番号2155 )
- パッケージとラッパーのサイズの経時的な追跡を開始しました。 (問題番号2225 )
BinarySerializer
は廃止予定であるため、RealmObjectBase から[Serializable]
属性を削除しました。 (PR # 2578 )- Github アクション にコード カバレッジ ジョブを追加しました。 (PR # 2581 )
- Windows 8.1で実行されている CI テストを追加しました。 (PR # 2580 )
10.3.0 (2021-07-07)
注: このリリースでは xc Framework を使用し、iOS ネイティブ ライブラリのビットコードを有効にします。 これにより、パッケージ サイズが大幅に大きくなり、.ipa が増加する可能性があります iOS 用にコンパイルする場合のサイズ。 ただし、ビットコード部分および不要なアーキテクチャは App Store によって削除されるため、ユーザーに送信される実際のダウンロードのサイズは変更されないか、以前よりも小さくなります。
修正済み
- Windows 8.1で
realm-wrappers.dll
が読み込まれない問題を修正しました。 (問題番号2298 ) - Fixed an assertion failure when listening for changes to a list of primitive Mixed which contains links. (コアアップグレード)
- 無効化されたリンクを含む辞書またはセットへの変更をリッスンするときにアサーションが失敗する問題を修正しました。 (コアアップグレード)
- サイクルを含むオブジェクトセットの変更を計算するときにStack Overflowを発生させる可能性がある無限の再帰ループを修正しました。 (コアアップグレード)
- 実装に衝突処理辞書を追加しました。 (コアアップグレード)
- オブジェクトへのリンクを含む混合のリストまたはセットをクリアした後のクラッシュを修正しました。 (コアアップグレード)
- 管理者によって取り消されている場合にユーザー アプリ トークンを更新しようとするとクラッシュする再帰ループを修正しました。 現在、この状況ではユーザーがログアウトし、エラーが報告されています。 (Core upgrade)
Realm.DeleteRealm
の呼び出しと Realm ファイルの同時開始との間の競合を修正しました。 (コアアップグレード)- [Unity] 複数のベース シリアライザーのコンストラクターを保持するコードを追加し、基本的な直列化および逆直列化ワークロードのほとんどがボックスから取得されるようになりました。 (PR # 2489 )
機能強化
- xc Framework を使用するように iOS のネイティブ ライブラリを変更しました。 つまり、M 1 macOS 上のシミュレーターでの実行がサポートされるようになりました。 (問題番号2240 )
- ネイティブ iOS ライブラリにビットコードを追加しました。 これは Xamarin.iOS には影響しませんが、Unity アプリケーションは App Store サーバーによって実行される最適化を活用し、最終的に新しいアーキテクチャをサポートできます。 (問題番号2240 )
互換性
- Realm Studio: 11.0.0以降。
- このリリースでは iOS ネイティブ ライブラリに xc Framework を使用します。これには Xamarin.iOS 14.14.2.5以降が必要です。
内部
- Core 11.0.4を使用します。
10.2.1 (2021-06-30)
このリリースでは、Unity バイナリのパッケージ化方法が変更され、スタンドアロン モジュールとして依存関係を含む追加の Unity パッケージが不要になります。 io.realm.unity-bundled
パッケージを使用している場合は、パッケージを削除し、新しくリリースされたio.realm.unity
パッケージを追加してください。
修正済み
- [Unity] モデリング エラーが原因で組み立てをウィーブできないと、ログに 1 回だけエラーが表示され、その後
No RealmObjects. Has linker stripped them?
を使用して Realm を開くことが失敗する問題を修正しました。 これで、コードを変更/ウィーブするたびにウィーブ エラーが表示され、ランタイム エラーはウィーバーを手動で再実行することを明示的に示します。 (問題番号2310 ) - [Unity] 同期 の使用中にアプリが終了時にハングする問題を修正しました。 (PR # 2467 )
- [Unity] アプリが同期を使用する場合に、macOS 上の Unity エディターが組み立ての再読み込み後にハングする問題を修正しました。 (問題番号2482 )
- UInt 32を TableKey に、Int 64を ObjKey に誤って変換することで、Android x 86でクラッシュが発生する問題を修正しました。 (問題番号2456 )
機能強化
- なし
互換性
- Realm Studio: 11.0.0以降。
内部
- Core 11.0.3を使用します。
- オブジェクト上の GetHashCode() は、オブジェクト キーに加えてテーブル キーを使用するようになりました。 (問題番号2473 )
10.2.0 (2021-06-15)
修正済み
- クエリに複数の
OrderBy
句を適用すると、前の句を置き換える最後の句ではなく、.ThenBy
であるかのように句が相互に追加されるバグを修正しました。 (PR # 2255 ) SyncConfiguration.ObjectTypes
を明示的に指定すると、スキーマを検証し、すべてのEmbeddedObject
クラスがRealmObject
から継承されるクラスからアクセスできることを確認するためのチェックが追加されました。 この件に関する詳細については、 こちら をご覧ください。 (PR # 2259 )- iOS 用の Unity プロジェクトを構築するときに、
Undefined symbols for architecture xxx: "_realm_thread_safe_reference_destroy"
のようなエラーが発生するバグを修正しました。 (問題番号2318 ) RealmInteger
値のコレクションを定義しようとすると、Weaver がエラーを発行するようになりました。 これはサポートされていませんが、以前はメッセージが表示されずに失敗していましたが、現在はコンパイル時のエラーになります。 (問題番号2308 )- Unity プロジェクトで管理対象オブジェクト(リストまたは結果)のコレクションを使用すると、無効なコンパイル済みバイナリが発生する問題を修正しました。 (PR # 2340 )
- 移行コールバックが定義されているが、Realm が実際に実行する必要がなかった場合のメモリリークを修正しました(PR # 2331 )
- iOS ビルドのバックアップ32ビット サポートを追加しました。 (問題番号2429 )
- Realm および Realm.UnityUtils のスキーマが空であることを示すデバイスの Unity プロジェクトを構築する際に、冗長な警告を排除しました。 (問題番号2320 )
Realm.GetInstanceAsync(syncConfig)
を呼び出した直後にSyncConfiguration.OnProgress
をnull
に設定すると、NullReferenceException
がスローされる可能性がある問題を修正しました。 (問題番号2400 )- 埋め込みオブジェクトを置き換える場合、 は、埋め込みオブジェクトへのリンクを null に設定して適切にクリアされるように同期指示を発行します。 これにより、
Failed to parse, or apply received changeset: ERROR: ArrayInsert: Invalid prior_size (list size = 4, prior_size = 0)
として明示される問題が解決されました( # 4740 - Linux での externalCommitHelper の実装が、 Android 12などのoplog 動作 を変更した新しいバージョンの Linux で動作するようになりました( 問題番号4666 )
- ファイル形式が変更され、プライマリキー列に検索インデックスができるようになりました。 プライマリキー値からObjectKeys を生成するのを停止し、増加するカウンター値を使用するようになりました。 これにより、すべての新しいオブジェクトが同じクラスターに作成され、以前のように分散されないという影響があります。 また、ファイル形式バージョン11以前の形式からのアップグレードもはるかに高速になります。 (コアアップグレード)
機能強化
Guid
データ型のサポートを追加しました。 プライマリキーとして使用でき、インデックスも作成可能です。 (PR # 2120 )辞書のサポートを追加しました。 現在、 stringキーのみがサポートされていますが、値の型はサポートされている型(RealmObject または埋め込みオブジェクトから継承されるプリミティブ型、
RealmValue
、またはカスタム型)のいずれかになります。 リスト、セット、またはその他の辞書は、値の型として使用できません。 モデルに辞書を追加するには、IDictionary<string, T>
タイプの getter 専用プロパティを定義します。public class MyObject : RealmObject { public IDictionary<string, decimal> Denominations { get; } } // Realm will automatically manage the underlying dictionary, so there's no need // to define a constructor or assign it to some value. var obj = new MyObject(); obj.Denominations.Add("quarter", 0.25d);
RealmValue
データ型のサポートを追加しました。 この新しい型は、オブジェクトを含む有効な Realm データ型を表すことができます。RealmValue
のコレクション(リスト、セット、辞書)もサポートされていますが、RealmValue
自体にコレクションを含めることはできません。 タイプRealmValue
のプロパティは null にすることはできませんが、値RealmValue.Null
で表される null を含めることができます。 (PR # 2252 )public class MyObject : RealmObject { public RealmValue MyValue { get; set; } public IList<RealmValue> ValuesList { get; } public ISet<RealmValue> ValuesSet { get; } public IDictionary<string, RealmValue> ValuesDict { get; } } var obj = new MyObject(); obj.MyValue = RealmValue.Null; obj.MyValue = 1; obj.MyValue = "abc"; if (obj.MyValue.Type == RealmValueType.String) { var myString = obj.MyValue.AsString(); }
オブジェクトまたはプリミティブ値のセットのサポートを追加しました。 セットは、要素の一意性を確保する順序付けられていないコレクションです。 Realm は内部等価コンパイラーを使用するため、カスタム クラスで
Equals
またはGetHashCode
をオーバーライドしてその動作をカスタマイズすることはできません。 オブジェクトは常に db 参照によって比較されます。つまり、データベース内の 2 つの異なるオブジェクトは、内容が同じであっても常に異なり、同じデータベース オブジェクトへの複数の参照は常に等しくなります。public class MyObject : RealmObject { public ISet<string> UniqueStrings { get; } } // Realm will automatically manage the underlying set, so there's no need // to define a constructor or assign it to some value. var obj = new MyObject(); var didAdd = obj.UniqueStrings.Add("foo"); // true didAdd = obj.UniqueStrings.Add("foo"); // false
string ベースのクエリでの値置換のサポートを追加しました。 これにより、次の構文に続く式が可能になります :
realm.All<T>().Filter("field1 = $0 && field2 = $1", 123, "some-string-value")
。 (問題番号1822 )ネイティブ バイナリのサイズを ~ 5 % 削減しました。 (PR # 2239 )
新しいクラス -
Logger
を追加しました。これにより、Logger.Default
を設定することで、デフォルトのロガー実装(通常はstdout
またはstderr
に書込まれている)をカスタム 1 で上書きできます。 これにより、将来のリリースで削除される予定のAppConfiguration.CustomLogger
とAppConfiguration.LogLevel
が置き換えられます。 組み込み実装は次のとおりです。Console
- はほとんどのプロジェクトにSystem.Console
を使用し、Unity プロジェクトにUnityEngine.Debug
を使用します。Logger.Default = Logger.Console;
Null
- は次のすべてのメッセージを無視します。Logger.Default = Logger.Null;
Function
- 指定された関数への呼び出しをプロキシします。Logger.Default = Logger.Function(message => myExternalLogger.Log(message));
カスタム ロガーは、
Logger
クラスから派生してLog
メソッドの独自の実装を提供するか、Function
を使用してAction<string>
を提供できます。 (PR # 2276 )RealmObjectBase
が正しく上書きされ、GetHashCode()
が実装されるようになりました。 (問題番号1650 )オブジェクトのコンテンツに関するより意味のある情報を出力するために、
RealmObject.ToString()
のオーバーライドを追加しました。 オブジェクトのタイプ、プライマリキー(プライマリキーが定義されている場合)、およびオブジェクトが管理されているか削除されているかの情報が出力されます。 (問題番号2347 )オブジェクト プロパティに動的にアクセスするための新しい API を追加しました。 これらは、Xamarin.iOS やUnity IL コンパイルを持つ2C++ など、先行するコンパイルされたプラットフォームをサポートするように設計されています。最終的にこれらのデフォルト API にすると同時に、レガシーのDLR ベース API もサポートする意向です。 例:
// Make sure to cast away the dynamic immediately on AOT platforms. var people = (IQueryable<RealmObject>)realm.DynamicApi.All("Person"); foreach (var person in people) { var firstName = person.DynamicApi.Get<string>("FirstName"); var address = person.DynamicApi.Get<EmbeddedObject>("Address"); var city = address.DynamicApi.Get<string>("City"); } // When casting a dynamic object, always cast first to object and then // to the actual object type to remove any callsites being generated. var newPerson = (RealmObject)(object)realm.DynamicApi.Create("Person", 123); newPerson.DynamicApi.Set("FirstName", "Peter");
ウィーブ エディターのアセンブルを有効にするために Unity エディターのオプションを追加しました。 プロジェクトに Realm を参照する エディター の組み立て(たとえば、Realm 関連の機能をテストする EditMode テスト 組み立てなど)がない限り、これは「オフ」になります。 これを「オン」に保つと、ウィーブのために評価が必要になるアセットが増え、ビルドが若干遅くなる可能性があります。 (問題番号2346 )
ファイル形式のアップグレード前に、Realm ファイルのバックアップが作成されるようになりました。 バックアップは3か月間保持されます。 ファイル形式のアップグレードの前のバックアップにより、アップグレードの失敗をより適切に分析できます。 また、「将来」ファイル形式を持つ Realm ファイルを開こうとしたときに )バックアップを復元します 。 ( # 4166 )
互換性
- Realm Studio: 11.0.0 -false 0以降。
内部
- Core 11.0.3を使用します。
- Android を除くすべてのプラットフォームで LTO ビルドを有効にしました。 (PR # 2239 )
- dotnetcore 3.1に更新されたテスト プロジェクト。 つまり、 dotnetcore 2.0ではテストが実行されなくなりました。
- 変換演算子が発生した場合、ResultViewstor での Lambda のコンパイルを削除しました。 IL2 C++は Lambda を動的に構成できないため、これが必要になります。 代わりに、
Operator.Convert<TTarget>(object)
を使用するようになりました。これはOperator.Convert<TSource, TTarget>
よりわずかに効率が低いものの、Convert.ChangeType
よりはかなり高速で、Decimal128
変換あたりの効率も影響を受けません。 主なダウングレードは、暗黙的な変換演算子が定義されているカスタムユーザータイプである、 の引数を持つクエリのサポートを終了することです。
10.1.4 (2021-05-12)
修正済み
Invalid ref translation entry [0, 78187493520]
のようなメッセージが表示され、クラッシュにつながる可能性があるバグを修正しました。 (コアアップグレード)- 変更通知コールバック内で書き込みを実行するときに、
!m_notifier_skip_version.version
やm_notifier_sg->get_version() + 1 == new_version.version
などのアサーションの失敗を修正しました。 (コアアップグレード) - 変更のコレクション通知レポートを修正しました。 これは、ソートされた結果または個別の結果に対して誤った変更インデックスを受け取ったり、変更のみが発生した場合に通知ブロックが呼び出されないことがあります。 (コアアップグレード)
- 同期セッションの開始を試みる前に、アクセス トークンの有効期限を事前に確認し、更新します。 これにより、
ERROR: Connection[1]: Websocket: Expected HTTP response 101 Switching Protocols, but received: HTTP/1.1 401 Unauthorized
などのエラー ログがクライアントに表示されるのを防ぎます。 (コアアップグレード) - 終了時の TableRe条件の破棄は、実行中の他のスレッドと比較して順序付けられませんでした。 これにより、 TableRe Atlas がスタックの最上位にある場合はクラッシュが発生する 可能性 があります。 (コアアップグレード)
uncaught exception in notifier thread: N5realm11KeyNotFoundE: No such object
に関連するエラーを修正しました。 これは、リンクされたオブジェクトが別のクライアントによって削除された場合に、同期されたアプリで発生する可能性がありました。 (コアアップグレード)- 間違った暗号化キーまたは異なる暗号化構成でメタデータ レルムを起動すると、そのメタデータ レルムが削除され、新しいキーまたは構成を使用して新しいメタデータ レルムが作成されます。 (コアアップグレード)
- 読み取り専用 Realm に
ThreadSafeReference
を作成すると、クラッシュが発生します。 (コアアップグレード)
互換性
- Realm Studio: 10.0.0以降。
内部
- Core 10.7.2を使用します。
10.1.3 (2021-04-29)
修正済み
- Windows で同期を使用するときに
"Access violation"
エラーがスローされるコンパイラーのバグを修正しました。
互換性
- Realm Studio: 10.0.0以降。
内部
- Core 10.5.6を使用します。
10.1.2 (2021-03-19)
修正済み
- 32ビット デバイスでは、v 10にアップグレードするときに「そのようなオブジェクトはありません」という例外が発生する場合があります。 (コアアップグレード)
- 通知ワーカー スレッドは、テーブルにクエリで使用されていないテーブルへの送信リンクがある場合、クエリ結果に影響する可能性のあるテーブルを変更したコミットのみではなく、コミットごとにクエリを再実行します。 (コアアップグレード)
- 同期または複数のプロセスで単一の Realm ファイルに書込まれるプロセスで発生する可能性のある「無効な参照翻訳エントリ [ 16045690984833335023 , 78187493520 ]」アサーションの失敗を修正しました。 (コアアップグレード)
- サーバーからの大量のデータを統合しているときに、
"Assertion failed: !fields.has_missing_parent_update()"
が発生することがあります。 (コアアップグレード) - 大きな 10 128値を同期すると
"Assertion failed: cx.w[1] == 0"
が発生します。 (コアアップグレード) - Windowsでハングが発生する可能性のある競合状態を回避します。 (コアアップグレード)
機能強化
- なし
修正済み
- なし
互換性
- Realm Studio: 10.0.0以降。
内部
- Core 10.5.6を使用します。
10.1.1 (2021-02-25)
修正済み
- サポートされていない API(
__C_specific_handler
)の使用が原因で UWP アプリが Microsoft Store から拒否される問題を修正しました。 (問題番号2235 ) - Realm 通知リスナー スレッドは、書込みトランザクションが非常に特定の時間にコミットされた場合、アサーションの失敗「!skip_version.version」にヒットすることがあります。 (コアアップグレード)
機能強化
- なし
修正済み
- なし
互換性
- Realm Studio: 10.0.0以降。
内部
- Core 10.5.3を使用します。
10.1.0 (2021-02-09)
機能強化
- 同期クライアントが、エラーメッセージのサイズだけでなく、サーバーから受信したエラーメッセージをログに記録するようになりました。 (コアアップグレード)
- 同期 WebSockets が閉じられたときにサーバーから返されたエラーがキャプチャされ、SyncError として表示されるようになりました。 (コアアップグレード)
- フィルターなしのクエリでの連続読み取りのパフォーマンスが大幅に向上しました。 (コアアップグレード)
修正済み
- 異なるトランザクション バージョンを持つスレッド間で固定クエリを使用することで、固定されたコレクション内の将来のバージョンのオブジェクトにアクセスできる問題を修正します。 (コアアップグレード)
- ファイル形式のアップグレード後にオブジェクトを作成すると、「Assertion faild:lo() <= std::numeric_limits[uint 32 _t>:max()」というアサーションで失敗する可能性がある問題を修正しました。(Coreアップグレード)
- ソース テーブルのインデックス ゼロで新しいオブジェクトが作成された場合に、フィルターなしでクエリ結果から要素を取得すると誤った結果が発生する問題を修正しました。 (コアアップグレード)
- 同期中にアプリが
Assertion failed: ref + size <= next->first
でクラッシュする問題を修正しました。 (コアアップグレード)
互換性
- Realm Studio: 10.0.0以降。
内部
- Core 10.5.0を使用します。
- 送信される分析バージョンを修正します。
10.0.1 (2021-02-02)
重大な変更
- Realm Cloud(レガシー)のサポートは停止し、代わりに新しいMongoDB Realm Cloudをサポートします。 MongoDB Realm は、サーバー インフラストラクチャをセットアップすることなく、開発者がアプリケーションを迅速に構築できるサーバーレス プラットフォームです。 MongoDB Realm は MongoDB Atlas 上に構築され、データベースへの接続を自動的に統合します。 ( # 2011 )
- 構成パラメータと
SyncSubscription
タイプを含む、クエリベースの同期のサポートを廃止します。 ( # 2011 ) - パスベースの権限システムとクエリベースの同期のオブジェクトレベルの特権の両方を含む、同期権限に関連するすべてを削除します。 MongoDB Realm の権限はサーバー側で定義されます。 ( # 2011 )
Realm
クラスの動的アクセス用のすべての API をRealm.DynamicApi
に移動しました。Realm.CreateObject(string className, object primaryKey)
はRealm.DynamicApi.CreateObject(string className, object primaryKey)
になりました。Realm.All(string className)
はRealm.DynamicApi.All(string className)
になりました。Realm.RemoveAll(string className)
はRealm.DynamicApi.RemoveAll(string className)
になりました。Realm.Find(string className, long? primaryKey)
はRealm.DynamicApi.Find(string className, long? primaryKey)
になりました。Realm.Find(string className, string primaryKey)
はRealm.DynamicApi.Find(string className, string primaryKey)
になりました。
- 同期された Realm 内のすべての最上位オブジェクトには、
_id
というプライマリキーが必要になりました。 モデル プロパティに単調な名前を使用しないようにするには、MapTo("_id")
属性を使用します。 - Xamarin.iOS アプリの最小ターゲットを iOS 9に引き上げました。
- Xamarin.Android アプリの最小 API レベルを16に引き上げました(Android 4.1 )。
FullSyncConfiguration
の名前をSyncConfiguration
に変更しました。RealmObject.FreezeInPlace
を削除しました。 Realm オブジェクトをフリーズするには、Freeze
拡張メソッドを使用します。 (問題番号2180 )
機能強化
Realm Object Server ではなくMongoDBへの同期のサポートを追加しました。 アプリケーションは、 java- 652265735 e 0 ac 8 ed 2 .getsmarting.com/java-jで作成する必要があります。
MongoDB Realm アプリと同期するためのエントリポイントである
App
クラスを追加しました。ユーザーに関する追加情報を含む非構造化ドキュメントを含む
User.CustomData
を追加しました。 カスタム データは MongoDB Realm App で構成されます。User.Functions
を追加しました。 これは、リモート MongoDB Realm 関数を呼び出すためのエントリ ポイントです。 関数を使用すると、アプリケーションのサーバー側ロジックを定義して実行できます。 関数は最新の JavaScript(ES 6 +)で記述され、サーバーレスで実行されます。 関数を呼び出すと、現在のアプリケーションのコンポーネント、および関数を実行するためのリクエストとリクエストを送信したログイン ユーザーに関する情報に動的にアクセスできます。リモート MongoDB サービスで CRUD 操作用の API を公開する
User.GetMongoClient
を追加しました。プッシュ通知用にデバイスを登録するための API を公開する
User.GetPushClient
を追加しました。サーバー URI の代わりにパーティション値を受け入れるようにするには、
SyncConfiguration
を変更します。 パーティション値は現在、string
、long
、またはObjectId
のいずれかのタイプになります。 パーティション値を使用して Realm を起動することは、以前に URL によって Realm を開くのと同じです。 この場合、パーティションはデータとより密に関連付けられることを目的としています。 たとえば、複数のロケーションを持つ大規模な小売業者では、パーティションキーはストア ID になる可能性があり、各 Realm には指定されたストアに関連するデータのみが含まれます。10進128データ型のサポートを追加しました。 これは128ビット IEEE 754の 10 進数浮動小数点数です。 この型のプロパティは、
MongoDB.Bson.Decimal128
型または組み込みdecimal
型として宣言できます。 .NET の組み込み 10 進数は96ビットであるため、数値の全範囲を表すことはできず、Decimal128
で表現可能です。 (PR # 2014 )ObjectId
データ型のサポートを追加しました。 これは、MongoDB データベースでドキュメント ID として一般的な12バイトの一意の識別子です。 プライマリキーとして使用できます。 (PR # 2035 )埋め込みオブジェクトのサポートを追加しました。 埋め込みオブジェクトは、1 つの親オブジェクトによって所有され、その親オブジェクトが削除されるか、その親がその親を参照しなくなると削除されます。 埋め込みオブジェクトは、 ではなく
EmbeddedObject
RealmObject
をサブクラス化することで宣言されます。埋め込みオブジェクトの再割り当ては許可されておらず、複数の親からその埋め込みオブジェクトにリンクされることもありません。 埋め込みオブジェクトを直接表示するクエリも許可されていません。これらは、スタンドアロン オブジェクトではなく、親に属する複雑な構造として表示される必要があるためです。 簡単な 例は次のとおりです。public class Address : EmbeddedObject { public string Street { get; set; } public string City { get; set; } } public class Person : RealmObject { public string Name { get; set; } // Address is an embedded object - you reference it as usual public Address Address { get; set; } } public class Company : RealmObject { public string PhoneNumber { get; set; } // Embedded objects can be contained in lists too public IList<Address> OfficeAddresses { get; } }
埋め込みオブジェクトをインスタンス化するための新しい動的メソッドを追加しました。
Realm.DynamicApi.CreateEmbeddedObjectForProperty
を使用して埋め込みオブジェクトを作成し、それを親の プロパティに割り当てる必要があります。 例:// static API var person = new Person(); person.Address = new Address { City = "New York" }; // dynamic API var dynamicPerson = realm.DynamicApi.CreateObject("Person"); var address = realm.DynamicApi.CreateEmbeddedObjectForProperty(dynamicPerson, "Address") address.City = "New York";
Realm.DynamicApi.AddEmbeddedObjectToList
を使用して埋め込みオブジェクトを作成し、それを親のリストプロパティに追加する必要があります。Realm.DynamicApi.InsertEmbeddedObjectInList
を使用して埋め込みオブジェクトを作成し、指定されたインデックスにある親のリストプロパティに挿入する必要があります。Realm.DynamicApi.SetEmbeddedObjectInList
を使用して埋め込みオブジェクトを作成し、それを親のリスト プロパティのインデックスに設定する必要があります。// static API var company = new Company(); company.OfficeAddresses.Add(new Address { City = "New York" }); company.OfficeAddresses.Insert(0, new Address { City = "Palo Alto" }); company.OfficeAddresses[1] = new Address { City = "New Jersey" }; // dynamic API var dynamicCompany = realm.DynamicApi.CreateObject("Company"); var officeToAdd = realm.DynamicApi.AddEmbeddedObjectToList(dynamicCompany.OfficeAddresses); officeToAdd.City = "New York"; var officeToInsert = realm.DynamicApi.InsertEmbeddedObjectInList(dynamicCompany.OfficeAddresses, 0); officeToInsert.City = "Palo Alto"; var officeToSet = realm.DynamicApi.SetEmbeddedObjectInList(dynamicCompany.OfficeAddresses, 1); officeToSet.City = "New Jersey";
Realm ファイルのメモリ マッピング スキームが変更され、非常に大きなファイルを開きます。
string クエリ パーサーの実装(
realm.All().Filter("some-string-query")
に使用されるもの)を置き換えました。 これにより、クエリの実行時間を古いパーサーと同等に維持しながら、ネイティブ バイナリのサイズが約5 % 削減されます。 (PR # 2185 、Core アップグレード)型間の変換を処理する内部コードを最適化しました。 これにより、iOSやUWP などの先行してコンパイルされたプラットフォームで最も注目すべきデータ操作のパフォーマンスが若干向上します。 変更の性質上、以前は動的オブジェクトを操作中に自動的に発生していた変換が行われなくなる可能性があります。
No conversion exists from *type A* to *type B*
というメッセージを持つNotSupportedException
を検出し、これがバグであると思われる場合は、 Github 問題 を開いてください。 (PR # 2149 )エラーのあるリストを検出するための余分なコンパイル チェックを追加しました
宣言と IList の提案 Realm オブジェクト のコレクション プロパティ用。 (問題番号2083 ) 値を返すことができる
Realm.Write
とRealm.WriteAsync
のオーバーロードを追加しました。 (問題番号2081 )
修正済み
- .NET ネイティブ コンパイラー(UWP プロジェクトで使用)を使用して、リリース時に次の例外がスローされる問題を回避しました:
Incompatible MarshalAs detected in parameter named 'value'. Please refer to MCG's warning message for more information.
。 (問題番号2169 ) - .NET Core 3.0以降で実行中のアプリの移行中に、誤ったプロパティ値が読み取られる可能性があるバグを修正しました。 この問題は、異なるクラスが同じ名前のプロパティを永続化し、間違ったプロパティにアクセスする可能性があるときに明示的にあり、間違ったプロパティにアクセスする可能性があります - 例
foo.Name
はfoo.Bar
を返す可能性がありました。 これは、移行中に 動的 API を使用している場合にのみ発生し、厳密に型指定された API を使用するアプリや .NET Core 3 .x/.NET 5以外のプラットフォームで実行されるアプリには影響しません。 - 複数のプロセスが同じ Realm ファイルを共有し、ファイルからの通知をリッスンするマルチプロセス シナリオで、デッドロックが発生する可能性があるバグを修正しました。 (コアアップグレード)
- 埋め込みオブジェクトを持つオブジェクトの削除と再作成に関する問題を修正しました。 (コアアップグレード)
- コレクションの最初の実行中にソース Realm が非常に特定の時間に閉じられているか、無効化されている場合に「null の例外がキャッチされない:N 5 realm 15 InvalidTableRefE: transaction_ended につながるような競合状態を修正します。通知設定(Core アップグレード)
- 一致するものがない場合に、インデックス付きの string 列で大文字と小文字を区別しないクエリがクラッシュする問題を修正しました(Core アップグレード)
互換性
- Realm Studio: 10.0.0以降。
内部
- Core 10.3.3を使用します。
- bson パーサーに移行しました。
- 混合パネルに加えて S 3 / セグメントに分析を送信します。
- 分析では、同期機能が使用されているかどうかも報告されるようになりました。
- SDK は .NET 5に対してもテストされています。
- このリリースでは、Core、Sync、OS をバンドルする MongoDB リリースを使用します。
- 式ベースの演算子を T 4に置き換えました。 (PR # 2149 )
5.1.3 (2021-02-10)
修正済み
- インデックス付きの string 列で大文字と小文字を区別しないクエリを実行すると、失敗し、「キーがありません」の例外が発生する可能性があります。 (コアアップグレード)
- 一致するものがない場合、インデックス付きの string 列に対する大文字と小文字を区別しないクエリでのクラッシュを修正しました。 (コアアップグレード)
- 32ビット デバイスでアップグレードされたファイルの整合性がなく、「Key not find」の例外が発生する可能性があります。 (コアアップグレード)
- ファイル形式のアップグレード後にオブジェクトを作成すると失敗する可能性がある問題を
Assertion failed: lo() <= std::numeric_limits<uint32_t>::max()
しました。 (コアアップグレード)
互換性
- Realm オブジェクト サーバー: 3.23.1以降。
- Realm Studio: 5.0.0以降。
内部
- 同期5.0.32と Core 6.2.3を使用します。
- QuickJoural の例を最新の Realm および Xamarin.Forms バージョンに更新しました。 (PR # 2057 )
5.1.2 (2020-10-20)
修正済み
- UWP アプリのメイン スレッドで Realm インスタンスにアクセスすると、
Realm accessed from incorrect thread
例外がスローされる問題を修正しました。 (問題番号2045 )
互換性
- Realm オブジェクト サーバー: 3.23.1以降。
- Realm Studio: 5.0.0以降。
内部
- 同期5.0.28と Core 6.1.3を使用します。
- QuickJoural の例を最新の Realm および Xamarin.Forms バージョンに更新しました。 (PR # 2057 )
5.1.1 (2020-10-02)
機能強化
- なし
修正済み
- インデックス付きプロパティをクエリすると、「キーが見つかりません」の例外が発生する場合があります。 (コアアップグレード)
- ゼロ エントリの結果を返す null 以外のインデックス付き整数列で null のクエリを修正しました。 (コアアップグレード)
互換性
- Realm オブジェクト サーバー: 3.23.1以降。
- Realm Studio: 5.0.0以降。
内部
- 同期5.0.28と Core 6.1.3を使用します。
5.1.0 (2020-09-30)
機能強化
- インデックス付きstringまたはint列に対するNOT IN クエリのパフォーマンスが大幅に向上します。 (コアアップグレード)
修正済み
- WTF アプリケーションのメイン スレッドで Realm を使用すると、「Realm が正しくないスレッドからアクセスしました」というメッセージ付きの例外がスローされる問題を修正しました。 (問題番号2026 )
- 暗号化された Realm を開くときに、「形式バージョン0の Realm ファイルを開くことは、このバージョンの Realm ではサポートされていません」というメッセージで例外が発生する可能性がある問題を修正しました。 (コアアップグレード)
- Realm ファイルからデータを読み取るほとんどの操作のパフォーマンスが若干向上します。 (コアアップグレード)
- 以前は複数の一致があり、現在は 1 つの一致になっているインデックス付きstring列に対して等価クエリを再実行すると、「キーが見つかりません」の例外がスローされる場合があります。 (コアアップグレード)
- リンクが 条件の一部であるテーブルをクエリする場合、オブジェクトがターゲット テーブルに最近追加された場合、アプリケーションがクラッシュする可能性があります。 (コアアップグレード)
互換性
- Realm オブジェクト サーバー: 3.23.1以降。
- Realm Studio: 5.0.0以降。
内部
- 同期5.0.27と Core 6.1.2を使用します。
- Githubパッケージ経由でプレリリースの nuget フィードを追加しました。 (PR # 2028 )
5.0.1 (2020-09-10)
注意: このバージョンでは、Realm ファイル形式がバージョン11に引き上げられます。 バージョン10またはそれ以前のバージョンにダウングレードすることはできません。 Realm の古いバージョンで作成されたファイルは、自動的にアップグレードされます。 Realm Studio 5.0.0以降のみが新しいファイル形式を開くことができます。
機能強化
- 「凍結されたオブジェクト」の表記を追加しました。これらは、特定のバージョンで「凍結」されたオブジェクト、クエリ、リスト、または Realm です。 これにより、どのスレッドからでもデータにアクセスできますが、このデータは変更されません。 すべての固定オブジェクトは通常どおりアクセスしてクエリを実行できますが、これらをミューテーションしたり変更リスナーを追加したりしようとすると例外がスローされます。 (問題番号1945 )
Realm.Freeze()
、RealmObject.Freeze()
、RealmObject.FreezeInPlace()
、IQueryable<RealmObject>.Freeze()
、IList<T>.Freeze()
、IRealmCollection<T>.Freeze()
を追加しました。 これらのメソッドは、それが呼び出される インスタンスの固定バージョンを生成します。- データが固定されているかどうかを返す
Realm.IsFrozen
、RealmObject.IsFrozen
、IRealmCollection<T>.IsFrozen
を追加しました。 RealmConfigurationBase.MaxNumberOfActiveVersions
を追加しました。 これを設定すると、Realm データの多くのバージョンが同時に存在する場合に Realm は例外をスローします。 バージョンが多すぎると、Realm のファイルサイズが大幅に増加する可能性があります。
SynchronizationContext
定義の Realm のサポートを追加しました。 特定のスレッドにバインドされるのではなく、キューで定義された Realm は、同じスレッドで動作するか、別のスレッドで動作するかにかかわらず、SynchronizationContext
にバインドされます。SynchronizationContext.Current
が null(ほとんどの場合Task.Run(...)
)の場合に Realm を起動すると、Realm は、開かれたスレッドに Realm を構成したままになります。- 大規模なバイナリ ブロブを Realm ファイルに保存しても、ファイルが最大ブロブのサイズの少なくとも8 x である必要がなくなりました。
- Realm ファイル内に保存されるトランザクション ログのサイズを縮小し、大規模なトランザクションによるファイル サイズの増加を軽減します。
- string プライマリキーには別のインデックスが不要になるため、検索パフォーマンスを低下させることなく、挿入と削除のパフォーマンスが向上します。
修正済み
- リストを含むオブジェクトを同時に削除する際にオブジェクトをリストに追加すると、
Access to invalidated List object
がスローされる問題を修正しました。 (問題番号1971 ) - ソート句付きの string フィルターが適用されているクエリで
.ElementAt()
を使用すると、誤った結果が返される問題を修正しました。 (PR # 2002 )
互換性
- Realm オブジェクト サーバー: 3.23.1以降。
- Realm Studio: 5.0.0以降。
内部
- 同期5.0.22と Core 6.0.25を使用します。
4.3.0 (2020-02-05)
機能強化
Credentials.CustomRefreshToken
経由で認証情報を作成するときにユーザーのuserId
とisAdmin
を構成する API を公開しました。 以前はこれらの値はJSON web token自体から推論されていましたが、 JSON web tokenペイロードのどのフィールドがuserId
フィールドとisAdmin
フィールドを表すかにサーバー構成を強制する方法がないため、次の消費者に依存します。これらの値を決定します。- Apple プラットフォームでの SSL 問題のログ記録とエラー処理が改善されました。
修正済み
- Realm オブジェクトを
System.Runtime.Serialization.Formatters
とSystem.Xml.Serialization
シリアライザーで正しく直列化できるようになりました。 (問題 番号1913 )クラスのプライベート状態フィールドは 属性と 属性で修飾されているため、早期オプトアウト[NonSerialized]
[XmlIgnore]
シリアライザーは、次を含むRealm
やObjectSchema
などのフィールドの直列化を試行しません。は、管理されていないデータを処理します。 [Required]
がIList<string>
プロパティに適用されている場合にコンパイル エラーが発生する問題を修正しました。 (直接の認証構築)- Realm NuGet パッケージを含むプロジェクトがデバッグされない問題を修正しました。 (PR # 1927 )
- 変更セットの統合に失敗した後、同期クライアントが再接続に失敗する。 このバグにより、クライアントの Realm ファイルがさらに破損します。 ( 3.0.0以降)。
- バックリンク プロパティをクエリするときに、クラス名に
class_
プレフィックスが必要になるために使用される string ベースのクエリ パーサー(results.Filter(...)
)。 これが修正され、公開ObjectSchema
名のみが必要になりました。 たとえば、@links.class_Person.Siblings
は@links.Person.Siblings
になります。 ClientResyncMode.DiscardLocalRealm
がスキーマをリセットしない問題を修正しました。
互換性
- Realm オブジェクト サーバー: 3.23.1以降。
内部
- 同期を4.7.5から4.9.5に、Core を5.23.3から5にアップグレードしました。 23 。 8 。
4.2.0 (2019-10-07)
機能強化
IRealmCollection
インターフェースにint IndexOf(object)
とbool Contains(object)
を追加しました。 (PR # 1893 )- 同期クライアントでセッションのマルチプレフィックスを切り替えることを可能にする API -
SyncConfigurationBase.EnableSessionMultiplexing()
を公開しました。 (PR 1896 ) Realm.GetInstanceAsync
を使用する際の初期ダウンロードの高速化のサポートを追加しました。 ( 1847を発行します)- 進行中のダウンロードのクリーン キャンセルを有効にする
Realm.GetInstanceAsync
に任意のcancellationToken
引数を追加しました。 (PR 1859 ) - サーバーがロールバックされた場合にローカル Realm を自動的に回復する クライアント再同期 のサポートを追加しました。 これにより、完全に同期された Realm の クライアントリセット メカニズムが大幅に置き換えられます。
FullSyncConfiguration.ClientResyncMode
を使用して構成できます。 (PR # 1901 ) Credentials.UsernamePassword
のcreateUser
引数を任意になりました。 指定しない場合、ユーザーがすでに存在する場合は作成またはログインします。 (PR # 1901 )- F body 6.0.0を使用します。これにより、他の Fortune ベースのプロジェクトの新しいバージョンとの互換性の問題の一部が解決されます。 (問題番号1899 )
修正済み
RealmCollectionBase<T>.IndexOf
を呼び出す際の無限再帰を修正しました。 (問題番号1892 )
互換性
- Realm オブジェクト サーバー: 3.23.1以降。
内部
- 同期を4.7.0から4.7.1にアップグレードしました。
- 同期プロキシをバイパスして、クラウド上の同期ワーカーへの直接アクセスを実装しました。Realm のトークン更新応答に同期ワーカーのパス フィールドが含まれている場合、バインディングは同期セッションのURLプレフィックスを上書きします。
4.1.0 (2019-08-06)
重大な変更
Credentials.Nickname
からisAdmin
パラメータを削除しました。 管理名ユーザーのログインはサポートされていないため、新しい ROS バージョンには影響しません。この変更はそれを明示的に示すだけです。 (問題番号1879 )Credentials.Nickname
メソッドを非推奨としてマークしました。接続名認証プロバイダのサポートは ROS では非推奨であり、将来のバージョンで削除される予定です。 (問題番号1879 )false
を渡しても効果がないため、PermissionDeniedException.DeleteRealmInfo
からdeleteRealm
パラメータを削除しました。 メソッドを呼び出す方法は、deleteRealm: true
を使用して呼び出す方法と同等になりました。 (PR # 1890 )
機能強化
- Windows の Realm パスとファイル名に Unicode 文字のサポートを追加しました。 (コアアップグレード)
- 新しい認証情報タイプを追加しました:
Credentials.CustomRefreshToken
。カスタム更新トークンを持つユーザーを作成するために使用できます。 これは、Realm を開くときにアクセス トークンを取得するために、構成されたrefreshTokenValidators
に対して ROS によって検証されます。 このようなユーザーを作成する場合は、アクセス トークンが取得できるように、トークンが有効であり、必要に応じて更新されていることを確認するのが開発者の責任です。 そのために、User.RefreshToken = "my-new-token"
を呼び出してユーザー オブジェクトの更新トークンを設定できるようになりました。 これは、Credentials.CustomRefreshToken
を呼び出して取得されたユーザーと組み合わせて使用する必要があります。 (PR # 1889 )
修正済み
- IncludeDescriptor の構築により不要なテーブル比較が行われていました。 これにより、
includedBacklinks
でクエリベースのサブスクリプション(Subscription.Subscribe
)を作成するとパフォーマンスが低下します。 (コアアップグレード) - テーブルの順序とは異なる順序を持つ LinkList によって制約されたインデックス付き整数列を含むクエリでは、不正確な結果が得られる問題を修正しました。 (コアアップグレード)
- インデックス付き整数列に関係するクエリを複数回実行すると、メモリがリークされる問題が発生していました。 (コアアップグレード)
互換性
- Realm オブジェクト サーバー: 3.23.1以降。
内部
- 同期を4.5.1から4.7.0に、Core 5.20.0から5にアップグレードしました。 23 。 1 。
4.0.1 (2019-06-27)
修正済み
次のエラーが発生し、 iOSアプリがApp Storeに公開されない問題を修正しました。
このバンドルは Payload/.../Frameworks/realm- wrapper. Framework を無効にします。 Index.plist ファイルに必要なキー: CSF BundleVersion がありません。
( 4.0.0から1870を発行します)
iOS アプリの起動時にデバイス上でクラッシュする問題を修正しました。 ( 4.0.0から1871を発行します)
4.0.0 (2019-06-13)
重大な変更
- 次の非推奨のメソッドとクラスが削除されました。
SyncConfiguration
クラスはFullSyncConfiguration
とQueryBasedSyncConfiguration
に分割されました。 これらのクラスのいずれかを使用して、Realm Object Server に接続します。TestingExtensions.SimulateProgress
メソッドは一定時間機能しなかったため削除されました。Property.IsNullable
プロパティが削除されました。 プロパティが null 可能かどうかを確認するには、Property.Type
でPropertyType.Nullable
フラグを確認します。Credentials.Provider
クラスが削除されました。 以前は、主に内部使用を目的とした定数がいくつか含まれていました。User.ConfigurePersistance
メソッドはSyncConfigurationBase.Initialize
によってスーパー秒済みです。User.LogOut
はUser.LogOutAsync
優先されるため、 が削除されました。User.GetManagementRealm
ラッパー API のUser.ApplyPermissionsAsync
セットが優先されるため、 は削除されました。User.GetPermissionRealm
User.GetGrantedPermissions
ラッパー API が優先されるため、 は削除されました。
IQueryable<T>.Subscribe(string name)
拡張メソッドを非推奨にし、代わりにIQueryable<T>.Subscribe(SubscriptionOptions options)
を採用しました。- 権限 API の内部実装を書き換えました。 ほとんどの場合、メソッドシグネチャは変更されていません。または、変更された場所でAPI は元の状態に近いままです(例:
IQueryable<T>
がIEnumerable<T>
に変更されました)。 (発行番号1863 )User.GetGrantedPermissionsAsync
の戻り値の型をIQueryable<PathPermission>
からIEnumerable<PathPermission>
に変更しました。 つまり、コレクションは通常の Realm ベースのコレクションのように監視できなくなります。 このコレクションの変更を通知する必要がある場合は、ポーリングベースのメカニズムを自分で実装する必要があります。PathPermission.MayRead/MayWrite/MayManage
は非推奨となり、代わりにより一貫性の高いAccessLevel
API が採用されました。User.ApplyPermissionsAsync
では、realmUrl
パラメータの名前がrealmPath
に変更されました。User.OfferPermissionsAsync
では、realmUrl
パラメータの名前がrealmPath
に変更されました。PermissionOfferResponse
PermissionChange
クラスと クラスを削除しました。IPermissionObject
インターフェースを削除しました。ManagementObjectStatus
列挙型を削除しました。- メソッドと
User.GetPermissionChanges
User.GetPermissionOfferResponses
メソッドを削除しました。 millisecondTimeout
のUser.GetGrantedPermissionsAsync
引数が削除されました。PermissionException
クラスはHttpException
に置き換えられました。
AuthenticationException
クラスはHttpException
クラスに統合されました。
機能強化
Realm Object Server との同期を一時停止または再開できる
Session.Start()
メソッドとSession.Stop()
メソッドを追加しました。 (発行番号138 )名前、有効期間、既存のサブスクライブを更新するかどうかなど、サブスクライブの追加オプションを設定できる
IQueryable<T>.Subscribe(SubscriptionOptions, params Expression<Func<T, IQueryable>>[] includedBacklinks)
拡張メソッドを追加しました。includedBacklinks
引数を使用すると、クエリベースの同期を行うときに、推移的閉じるに含めるバックリンク プロパティを指定できます。 例:class Dog : RealmObject { public Person Owner { get; set; } } class Person : RealmObject { [Backlink(nameof(Dog.Owner))] public IQueryable<Dog> Dogs { get; } } var options = new SubscriptionOptions { Name = "adults", TimeToLive = TimeSpan.FromDays(1), ShouldUpdate = true }; var people = realm.All<Person>() .Where(p => p.Age > 18) .Subscribe(options, p => p.Dogs); await people.WaitForSynchronzationAsync(); // Dogs that have an owner set to a person that is over 18 // will now be included in the objects synchronized locally. var firstPersonDogs = people.Results.First().Dogs;
登録されたすべてのクエリベースの同期サブスクライブのコレクションを取得できる
Realm.GetAllSubscriptions()
拡張メソッドを追加しました。 (発行番号1838 )現在非推奨となっている
MayRead/MayWrite/MayManage
を置き換えるために、PathPermission
にAccessLevel
プロパティを追加しました。 (発行番号1863 )Realm の所有者が誰を示す
PathPermission
にRealmOwnerId
プロパティを追加しました。 (発行番号1863 )dotnet build
を使用したビルドのサポートを追加しました(以前はmsbuild
コマンドラインのみがサポートされていました)。 ( PR # 1849 )クエリに OR 条件の長い連鎖がある場合、インデックスのないstring列のクエリ パフォーマンスが向上しました。 (コアアップグレード)
ハードウェア最適化された暗号化機能を利用することで、暗号化と復号化のパフォーマンスが大幅に向上しました。 (コアアップグレード)
Realm を暗号化されたファイルに圧縮するには、非常に長い時間がかかる可能性があります。 Realm 内の使用済み領域に関連して書込みバッファのサイズを調整することにより、 プロセスが最適化されるようになりました。 (コアアップグレード)
string ベースのクエリ パーサー(
results.Filter("...")
)が、最初にサポートされていた "@" 区切り文字に加えて「T」区切り文字を持つ読み取り可能なタイムスタンプをサポートするようになりました。 例:startDate > 1981-11-01T23:59:59:1
(Core アップグレード)
修正済み
- LINQ クエリ内で
StringExtensions.Contains(string, string, StringComparison)
拡張メソッドを使用すると、.NET Core 2.1 + または Xamarin.iOS/Android で例外がスローされる問題を修正します。 プロジェクト(発行番号1848 ) - int プライマリキーが「null」である オブジェクトを作成した後にオブジェクトを作成すると、アサーションが失敗します。 (コアアップグレード)
互換性
- Realm オブジェクト サーバー: 3.23.1以降。
内部
- 同期を3.14.11から4.5.1に、Core 5.12.7から5にアップグレードしました。 20 。 0 。
3.4.0 (2019-01-09)
注意すべきこと: Realm Object Server を少なくともバージョン3.11.0にアップグレードするか、Realm Cloud を使用する必要があります。 ROS v 3.10 .x 以前のバージョンに接続しようとすると、 Wrong protocol version in Sync HTTP request, client protocol version = 25, server protocol version = 24
のようなエラーが表示されます。
機能強化
- ローカルの変更がない場合でも、ダウンロードの進行状況がサーバーに報告されるようになりました。 これにより、特にローカル変更をほとんどまたはまったく行わないクライアントが多数ある場合に、サーバーは履歴圧縮をより積極的に実行できます。 ( # 1772 )
- ROS によって送信された同期された変更を統合するときに、メモリ使用量を削減します。
SyncConfigurationBase.CustomLogger
を指定して、Sync によって発行されたログを処理するためのカスタム ログ関数を提供する機能を追加しました。 同期された Realm を開く前に、設定する必要があります。 ( # 1824 )- プロトコル25を使用するクライアントは、ローカル変更を行わない場合でも、ダウンロードの進行状況をサーバーに報告するようになりました。 これにより、特にローカル変更をほとんどまたはまったく行わないクライアントが多数ある場合に、サーバーは履歴圧縮をより積極的に実行できます。 ( # 1772 )
- Realm Object Server に対して行われる HTTP リクエストに ユーザーエージェント ヘッダーを追加します。 デフォルトでは、これには Realm ライブラリのバージョンと .NET プラットフォームに関する情報が含まれています。 同期された Realm を開く前に
SyncConfigurationBase.UserAgent
を設定することで、追加の詳細(アプリケーション名やバージョンなど)が提供される場合があります。 Xamarin アプリを開発している場合は、Xamarin.Essentials プラグインを使用してそれを自動化できます:SyncConfiguration.UserAgent = $"{AppInfo.Name} ({AppInfo.PackageName} {AppInfo.VersionString})"
。
修正済み
Assertion failed: ndx < size() with (ndx, size()) = [742, 742]
などのメッセージが表示され、クラッシュにつながる可能性があるバグを修正しました。SyncConfigurationBase.LogLevel
の設定時に、誤ったLogLevel
が同期に送信されるバグを修正しました。 ( 2.2.0以降では# 1824です)QueryBasedSyncConfiguration
と併用すると、Realm.GetInstanceAsync
が動作しないバグを修正しました。 ( 3.1.0以降では# 1827です)
重大な変更
- このバージョンでは非推奨メソッド
realm.SubscribeToObjectsAsync
が削除されました。 ( # 1772 ) User.ConfigurePersistence
は非推奨となり、代わりにSyncConfigurationBase.Initialize
が採用されました。
互換性
- Realm オブジェクト サーバー: 3.11.0以降。 同期プロトコルのバージョンが バージョン25に引き上げられました。 サーバーはプロトコル バージョン24以下を使用するクライアントと下位互換性がありますが、バージョン25のクライアントはプロトコル バージョン24のサーバーとの下位互換性はありません。 クライアントがアップグレードされる前に、サーバーをアップグレードする必要があります。
内部
- 同期を3.9.2から3.14.11に、Core を5.8.0から5にアップグレードしました。 12 。 7 。
3.3.0 (2018-11-08)
機能強化
SyncConfigurationBase
でOnProgress
プロパティを公開しました。Realm.GetInstanceAsync
を使用してダウンロード進行状況を報告するときに呼び出される進行状況コールバックを指定できます。 ( # 1807 )
修正済み
- バックグラウンド スレッド(
SynchronizationContext
なし)でSubscription.WaitForSynchronizationAsync
を呼び出しようとすると、以前は無期限にハングしていました。 これがサポートされていないこと、およびこのメソッドは同期コンテキストを持つスレッドで呼び出される必要があることを示すために意味のある例外がスローされます。 ( dotnet-private# 130 、 v 3.0.0以降)
互換性
- Realm オブジェクト サーバー: 3.0.0以降。
- API は、 3 .xy シリーズの以前のすべてのリリースとの下位互換性があります。
- ファイル形式: v 9形式で Realm を生成します(以前の形式をすべて読み取りとアップグレードします)
3.2.1 (2018-09-27)
バグ修正
- クエリのサブスクライブ時に、
An unknown error has occurred. State: *some-number-larger than 127*
のようなメッセージとともに例外が通常発生するバグを修正しました。 ( dotnet-private# 128 、3.0.0
以降)
3.2.0 (2018-08-04)
機能強化
RealmObject
継承者は、Realm から削除された後にPropertyChanged
を発生させるようになりました。 イベント引数のプロパティ名はIsValid
になります。- Linux に一般的な認証局をいくつかバンドルすると、SSL 経由で ROS インスタンスに接続できるようになります。 注目すべきのは、Realm Cloud インスタンスではボックスから選択されるようになりました。
バグ修正
- 無効または管理されていない RealmObject(例:
realm.All<Foo>().Where(f => f.Bar == someBar)
)の場合、ぼかした ArgmentNullException ではなく、意味のある例外がスローされるようになります。 - ライブラリの PCL バージョンに
ShouldCompactOnLaunch
を追加しました。 ( dotnet-private# 125 )
3.1.0 (2018-07-04)
機能強化
- コレクションの新しいバージョンで変更されたオブジェクトのインデックスに関する情報を含む
ChangeSet.NewModifiedIndices
コレクションをエクスポートしました(つまり、挿入と削除を考慮した後)。 - Fortune を3.0に更新します。
バグ修正
WriteAsync
は、メイン スレッドで同期Refresh
を実行しなくなりました。 ( # 1729 )- 管理対象の Realm オブジェクトを同じディスク上の Realm の別のインスタンスに追加しようとしても、例外がスローされなくなります。
- Realm コレクションの
IList
コンプライアンスを削除しました。 これにより、Realm コレクションにバインドされた ListView から項目の選択を解除するときにアプリが Android でハングする問題が修正されます。
重大な変更
SyncConfiguration
は非推奨となり、将来のバージョンで削除される予定です。 QueryBasedSyncConfigurationとフル同期構成 の 2 つの新しい構成クラスが公開されました。IsPartial = true
でSyncConfiguration
を使用していた場合は、QueryBasedSyncConfiguration
を使用するようにコードを変更します。 同様に、IsPartial
が設定されていないか、false
に設定されていた場合は、FullSyncConfiguration
を使用します。- Realm コレクションの
IList
コンプライアンスを削除しました。 これにより、UWP プロジェクト内の Realm コレクションにバインドされた ListViews データの自動更新が行われなくなります。
3.0.0 (2018-04-16)
機能強化
- クラスに対応するテーブルの名前を変更するには、クラスに
[MapTo]
を適用できるようにします。 ( # 1712 ) - 部分的に同期された Realm でサブスクリプションを追加するための改善された API を追加しました。
IQueryable<T>.Subscribe
は任意のクエリをサブスクライブするために使用できます。返されたSubscription<T>
オブジェクトはサブスクライブの状態を監視し、最終的にサブスクライブを削除するために使用できます。 詳細については、ドキュメントを参照してください。 ( # 1679 ) - 部分的に同期された Realm で使用するためのきめ細かな権限システムを追加しました。 これにより、個々のオブジェクトまたはクラスのレベルで権限を定義できます。 詳細については、ドキュメントを参照してください。 ( # 1714 )
- 次のようなより高度なクエリ シナリオを可能にするために、string ベースの
IQueryable<T>.Filter(predicate)
メソッドを公開しました。- 次のリンク:
realm.All<Dog>().Filter("Owner.FirstName BEGINSWITH 'J'")
。 - コレクションに対するクエリは次のようになります。
realm.All<Child>().Filter("Parents.FirstName BEGINSWITH 'J'")
- 名前が J またはrealm.All<Child>().Filter("Parents.@avg.Age > 50")
で始まる親を持つすべての子を検索 - 親の平均年数が50を超えるすべての子を検索 - サブクエリ:
realm.All<Person>().Filter("SUBQUERY(Dogs, $dog, $dog.Vaccinated == false).@count > 3")
- 3個以上の未加工の犬を持っているすべての人物を検索します。 - 並べ替え:
realm.All<Dog>().Filter("TRUEPREDICATE SORT(Owner.FirstName ASC, Age DESC)")
- すべての犬を検索し、所有者の名前で昇順に並べ替え、次に犬の月サイズで降順に並べ替えます。 - 区別:
realm.All<Dog>().Filter("TRUEPREDICATE DISTINCT(Age) SORT(Name)")
- すべての犬を検索し、名前で並べ替えて、管理値ごとに 1 つのドキュメントを選択します。 - その他の例については、クエリ言語のリファレンスDocsまたはNPredify チャートを 確認してください。
- 次のリンク:
SyncConfiguration
コンストラクターが相対的 URI を受け入れるようになりました ( # 1720 )- ユーザーのパスワードをリセットし、メールを確認するための次の方法を追加しました
RequestPasswordResetAsync
、CompletePasswordResetAsync
、RequestEmailConfirmationAsync
、ConfirmEmailAsync
。 これらはすべて、Credentials.UsernamePassword
経由で作成され、ユーザー名としてメールを指定したユーザーにのみ適用されます。 ( # 1721 )
バグ修正
- スレッドセーフな参照を解決するときに、Android デバイスでデッドロックが発生する可能性があるバグを修正しました。 ( # 1708 )
重大な変更
- ROS 2 .x と互換性のない Sync 3.0クライアントを使用します。
Permission
は、その目的をより近いものにするために、名前がPathPermission
に変更されました。 さらに、権限を変更する既存のメソッドは、完全な Realm でのみ機能します。 部分的に同期された Realm へのアクセスを構成するために新しいメソッドとクラスが導入されます。RealmConfiguration.DefaultConfiguration
RealmConfigurationBase
のタイプが に変更され、任意のサブクラスをデフォルトで設定できるようになりました。( # 1720 )SyncConfiguration
コンストラクターの引数は任意になりました。user
の値は現在ログインしているユーザーにデフォルト設定され、serverUri
の値はデフォルトでrealm://MY-SERVER-URL/default
になりますMY-SERVER-URL
はユーザーが認証されたホスト)。 ( # 1720 )- 整合性のために、
User.LoginAsync(credentials, serverUrl)
とUser.GetLoggedInUser(identity, serverUrl)
のserverUrl
引数の名前がserverUri
に変更されました。 ( # 1721 )
2.2.0 (2017-03-22)
機能強化
RealmConfigurationBase
にIsDynamic
プロパティを追加し、Realm ファイルを開いてそのスキーマをディスクから読み取れるようになりました。 ( # 1637 )- インメモリ Realm インスタンスを作成できる新しい
InMemoryConfiguration
クラスを追加しました。 ( # 1638 ) - リストの要素を直接設定できるようになりました - 例
foo.Bars[2] = new Bar()
またはfoo.Integers[3] = 5
。 ( # 1641 ) - JSON web token ( JSON web token )認証情報プロバイダーを追加しました。 ( # 1655 )
- 匿名およびネームの認証情報プロバイダーを追加しました。 ( # 1671 )
バグ修正
- 最初のコレクション変更通知がすべてのサブスクライブに配信されない問題を修正しました。 ( # 1696 )
RealmObject.Equals
true
Realm によって管理されなくなったオブジェクトに対して から が返されるという例外的なケースを修正しました。( # 1698 )
重大な変更
SyncConfiguration.SetFeatureToken
は非推奨となり、Linux またはサーバーサイドの機能で Sync を使用するために必要がなくなりました。 ( # 1703 )
2.1.0 (2017-11-13)
機能強化
- クラスまたはアセットに適用できる
[Explicit]
属性を追加しました。 クラスがそれで修飾されている場合、そのクラスは Realm のデフォルト スキーマには含まれません( そのクラスを含む配列にRealmConfiguration.ObjectClasses
を明示的に設定する必要があります)。 同様に、構築に適用される場合は、その構築内のすべてのクラスが明示的と見なされます。 これは、内部クラスがユーザーのスキーマに漏洩するのを避けるために、Realm に依存する3シャード パーティ ライブラリを開発する場合に便利です。 ( # 1602 )
バグ修正
- 関連オブジェクトが null かどうかを確認するクエリの記述を妨げるバグを修正しました。例:
realm.All<Dog>().Where(d => d.Owner == null)
。 ( # 1601 ) - 「Just My Code」が無効になっている場合に、デバッグがスローされた例外を報告する問題に対処しました。 ( # 1603 )
- 同期された Realm で
Realm.DeleteRealm
を呼び出すと、realm.management
フォルダーが適切に削除されるようになりました。 ( # 1621 ) - 動的スキーマ(移行など)で開かれたRealm内のオブジェクトのプリミティブ リスト プロパティにアクセスする際のクラッシュを修正しました。 ( # 1629 )
2.0.0 (2017-10-17)
機能強化
- プリミティブ値のコレクションのサポートを追加しました。 プロパティを
IList<T>
として定義できるようになりました。T
は、別のIList
を除く Realm でサポートされている任意のタイプにすることができます。 その結果、以前はRealmObject
に対する制約を持っていた多くのメソッドが任意の型を受け入れるようになりました、サポートされていない型引数とともに使用すると、実行時例外がスローされる可能性があります。 ( # 1517 ) - ほとんどの Realm 例外にドキュメントの関連セクションを指すように
HelpLink
を追加しました。 ( # 1521 ) - 現在のオブジェクトを参照するすべてのオブジェクトを動的に取得するための
RealmObject.GetBacklinks
API を追加しました。 ( # 1533 ) - メソッドを公開する同期された Realm を操作するときに権限が拒否されたエラーを示すために、新しい例外タイプ
PermissionDeniedException
DeleteRealmUserInfo
追加し、影響を受ける Realm のファイルをすぐに保持または削除する必要があることをバインディングに通知します。 これにより、権限拒否エラーからより確実に回復できます。 ( # 1543 ) - Realm が Apple プラットフォーム上の同期関連メタデータの暗号化のキーを管理するために使用するキーチェーン サービス名が、バンドル識別子に設定されるようになりました。 以前に Realm 固有のキーチェーン サービス内に保存されていたキーは、アプリケーションごとのキーチェーン サービスに透過的に移行されます。 ( # 1522 )
- 新しい例外タイプ -
IncompatibleSyncedFileException
- を追加し、レガシー( 1 .x)からのデータ移行を処理および実行できます Realm ファイルから新しい2 .x 形式。 これはRealm.GetInstance
またはRealm.GetInstanceAsync
を使用するときにスローされる可能性があり、古い Realm ファイルを動的モードで開き、必要なデータを移行できるようにするGetBackupRealmConfig
メソッドを公開します。 ( # 1552 ) - Windows で暗号化を有効にします。 ( # 1570 )
- Windows で Realm 圧縮を有効にします。 ( # 1571 )
UserInfo
が大幅に強化されました。 Realm Object Server に保存されているユーザーに関するメタデータと、そのユーザーに関連付けられているすべてのユーザー アカウント データのリストが含まれるようになりました。 ( # 1573 )- 現在非推奨となっている同期呼び出しを置き換えるために新しいメソッド -
User.LogOutAsync
を導入しました。 ( # 1574 ) - 対 1 または対多の関係で現在のオブジェクトを参照するオブジェクトの数を返す
RealmObject
で公開されるBacklinksCount
プロパティ。 ( # 1578 ) - string プライマリキーが値として
null
をサポートするようになりました。 ( # 1579 ) - 部分的な同期のプレビュー サポートを追加しました。 部分同期を使用すると、同期された Realm を開くことで、ユーザーによってリクエストされたオブジェクトのみがデバイスに同期されます。 これは、
SyncConfiguration
でIsPartial
プロパティを設定し、Realm を開き、対象のオブジェクトのタイプでRealm.SubscribeToObjectsAsync
を呼び出すことで使用できます。これは、サブスクライブするオブジェクトを決定するクエリを含む string です。 、 、および 結果を報告するコールバック。 同期された Realm には必要に応じて多くのサブスクリプションを追加できます。 ( # 1580 ) foreach
ループで反復処理するときに Realm コレクション(IList<T>
、IQueryable<T>
)が変更されていないことを確認します。 ( # 1589 )
バグ修正
Realm.GetInstance
によって Realm が最新バージョンにアップグレードされるため、その後はRefresh
を手動で呼び出す必要がなくなりました。 ( # 1523 )- iOS 共有拡張プロジェクトが動作しなくなる問題を修正しました。 ( # 1535 )
重大な変更
Realm.CreateObject(string className)
に追加のパラメータobject primaryKey
が追加されました。 動的 API を使用して新しいオブジェクトを作成するときに、 を渡す必要があります。 作成しているオブジェクトでプライマリキーが宣言されていない場合は、null
を渡します。 ( # 1381 )AcceptPermissionOfferAsync
は、ユーザーが権限を付与された Realm の絶対 URL ではなく相対 URL を返すようになりました。 ( # 1595 )
1.6.0 (2017-08-14)
機能強化
- Realm ファイルをコピーし、オプションで別のキーで暗号化するための
Realm.WriteCopy
API を公開しました。 ( # 1464 ) - すべての Realm コレクションのランタイム表現(
IQueryable<T>
とIList<T>
)には、UWP アプリケーションのListView
へのデータバインディングに必要なIList
インターフェースが実装されるようになりました。 ( # 1469 ) - 管理者ユーザーが Realm Object Server で他のユーザーの ID を検索できるようにするための
User.RetrieveInfoForUserAsync
API を公開しました。 This can be used, for example, to find a user by knowing their Facebook id. ( # 1486 ) - スキーマの作成時に、オブジェクト名が重複していないことを確認するためのチェックを追加しました。 ( # 1502 )
- 無効な URL スキームを
SyncConfiguration
またはUser.LoginAsync
に渡す際の、より包括的なエラー メッセージを追加しました。 ( # 1501 ) Realm.GetInstanceAsync
によってスローされる例外に、より意味のあるエラー情報を追加しました。 ( # 1503 )- 新しいタイプを追加しました -
RealmInteger<T>
を使用すると、基本整数型に対して Realm 固有の API を公開します。 同期された Realm にカウンター機能を実装するために使用できます。 ( # 1466 ) - 既存ユーザーと新規ユーザーにデフォルト権限を適用するための
PermissionCondition.Default
を追加しました。 ( # 1511 )
バグ修正
- クエリ内で定数以外の文字の値を比較するときに発生する例外を修正しました。 ( # 1471 )
- Fix an exception being thrown when comparing non-constant byte or short value in a query. ( # 1472 )
- Realm の IQueryable 結果で非ジェネリック バージョンの
IQueryProvider.CreateQuery
を呼び出すと例外がスローされるバグを修正します。 ( # 1487 ) - LINQ クエリで
IList
またはIQueryable
プロパティを使用しようとすると、アプリがクラッシュするのではなくNotSupportedException
がスローされるようになりました。 ( # 1505 )
重大な変更
1.5.0 (2017-06-20)
機能強化
- 権限を操作するための
User
クラスの新しい API を公開しました( # 1361 )ApplyPermissionsAsync
、OfferPermissionsAsync
、AcceptPermissionOfferAsync
を使用すると、権限の付与、取り消し、提供、受け入れが可能です。GetPermissionOffers
、GetPermissionOfferResponses
、GetPermissionChanges
を使用すると、上記のメソッドによって追加されたオブジェクトを確認できます。GetGrantedPermissionsAsync
では、現在のユーザーに付与されている権限、または現在のユーザーによって付与されている権限を確認できます。
RealmConfiguration
と併用する場合(すなわち ローカル Realm)、Realm.GetInstanceAsync
は、バックグラウンド スレッドで移行や圧縮を実行するなど、コストのかかる操作を実行する可能性があります。 ( # 1406 )- 管理者ユーザーが他のユーザーのパスワードを変更できるようにするには、
User.ChangePasswordAsync(userId, password)
API を公開します。 ( # 1412 ) - Realm オブジェクト サーバーへの SSL トラフィックを検証するために使用されるカスタム CA を提供できるようにするには、
SyncConfiguration.TrustedCAPath
API を公開します。 ( # 1423 ) Realm.IsInTransaction
API を公開して、その Realm のアクティブなトランザクションがあるかどうかを確認します。 ( # 1452 )
バグ修正
[MapTo]
が適用されているプロパティをクエリする際のクラッシュを修正しました。 ( # 1405 )- 同期された Realm が、Realm が開かれているときにアプリケーションがオフラインになっていたが、その後ネットワーク接続を回復した場合など、特定の状況でリモート サーバーに接続されない問題を修正しました。 ( # 1407 )
- 実際に変更されたプロパティが
Backlink
プロパティを下回る場合に、誤ったプロパティ名がRealmObject.PropertyChanged
サブスクライブに渡される問題を修正します。 ( # 1433 ) - 実際に使用せずに PCL テスト 組み立てで Realm を参照するときにスローされる例外を修正します。 ( # 1434 )
Realm.GetInstanceAsync
に渡されるとSyncConfiguration.EnableSSLValidation
が無視されるバグを修正しました。 ( # 1423 )
重大な変更
PermissionChange
、PermissionOffer
、PermissionOfferResponse
のコンストラクターはプライベートになりました。 新しいUser.ApplyPermissionsAsync
、User.OfferPermissionsAsync
、User.AcceptPermissionOfferAsync
API を使用します。 ( # 1361 )User.GetManagementRealm
とUser.GetPermissionRealm
は非推奨になりました。 同じ結果を得るには、User
で新しい権限関連の API を使用します。 ( # 1361 )User.ChangePassword(password)
はUser.ChangePasswordAsync(password)
に名前が変更されました。 ( # 1412 )- 次の古い 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
は、その Realm のインスタンスがまだ開いているときに呼び出された場合、例外をスローするようになりました。
1.4.0 (2017-05-19)
機能強化
- コンストラクターはオブジェクトが Realm を認識する前に実行されるため、初期化目的で使用できる
RealmObject.OnManaged
仮想メソッドを公開します。 (# 1383 ) - 同期された Realm を非同期に開くには、
Realm.GetInstanceAsync
API を公開します。 バックグラウンド スレッドで操作が開始されたときに利用可能なすべてのリモート コンテンツをダウンロードし、使用可能な Realm を返します。 これは、ユーザーが読み取り権限のみを持つ Realm を開く唯一の方法でもあります。
1.3.0 (2017-05-16)
ユニバーサル Windows プラットフォーム
ユニバーサル Windows プラットフォーム(UWP)用の Realm モバイル データベースの紹介。 UWP サポートにより、Windows 10を搭載した数百万のモバイル、PC、Windows デバイス向けに Realm の オブジェクト データベースを使用してモバイルアプリを構築できるようになりました。 UWP サポートの追加により、.NET 開発者は Windows Desktop(Windows 32 )または UWP を使用してほぼすべての最新の Windows プラットフォーム用のアプリをビルドするだけでなく、Xamarin 経由で iOS および Android 用のアプリをビルドできます。 同期サポートはまだ UWP で利用可能ではないことに注意してください。ただし、同期サポートは現在利用可能であり、すぐに利用可能になる可能性があります。
機能強化
- string プロパティに対する大文字と小文字を区別しないクエリで、新しいインデックスベースの検索が使用されるようになりました。 (# 1380 )
- Realm の「パスワード」認証プロバイダを使用している場合に、現在のユーザーのパスワードを変更するには、
User.ChangePassword
API を追加します。 Realm オブジェクト サーバー1.4.0以降のいずれかのエディションが必要です。 (# 1386 ) SyncConfiguration
にEnableSSLValidation
プロパティ(デフォルトはtrue
)が追加され、サーバーごとに SSL 検証を指定できるようになりました。 (# 1387 )- Realm を構成するときに
RealmConfiguration.ShouldCompactOnLaunch
コールバック プロパティを追加し、返される前に圧縮する必要があるかどうかを判断します。 (# 1389 ) - iOS で正常に実行されないリンクの警告を無視します。 (# 1263 )
- ネットワーク接続が失われた場合に再接続の遅延を最小限に抑えるには、 到達可能性 API を使用します。 (# 1380 )
バグ修正
Session.Reconnect
がすべてのセッションを再接続しないバグを修正しました。 (# 1380 )PropertyChanged
を複数回サブスクライブする際のクラッシュを修正しました。 (# 1380 )- オブジェクトサーバーへの再接続時のクラッシュを修正しました(# 1380 )
- Realm を開くときに一部の Android 7 .x デバイスで発生するクラッシュを修正しました(# 1380 )
1.2.1 (2017-05-01)
バグ修正
- 一部の Android デバイスで
EntryPointNotFoundException
がスローされる問題を修正しました。 (# 1336 )
機能強化
- Realm コレクションが使用可能かどうかを示すには、
IRealmCollection.IsValid
を公開します。 (# 1344 ) - MongoDB Ops Manager を使用したビルドのサポートを追加する Fundy 参照を更新し5 。 (# 1364 )
1.2.0 (2017-04-04)
Realm は .NET 標準1.4ライブラリとして配布されています。これは UWP をサポートするための要件であるためです。 内部的には、これはかなり大きな移動ですが、それを使用するアプリケーションは影響を受けないはずです。 アップグレード後、新しい NuGet 依存関係の数が追加されます。これらは参照アセットで、すでに mscorelib の一部になっているため、アプリケーションのサイズやパフォーマンスには影響しません。 さらに、プロパティを設定するときにトランザクションを自動的に作成することで、双方向データバインディング シナリオを可能にするヘルパー メソッドを含む、プラットフォーム固有の新しい DataBinding パッケージをリリースします。
アップグレード後に問題が発生した場合は、bin
obj
フォルダーと フォルダーをクリアし、Xamarin Studio を再起動することをお勧めします。解決しない場合は、解決策の設定と発生した問題の種類を説明する問題を提出してください。
このバージョンで書き込まれたファイルは、Realm の以前のバージョンでは読み取れません。 このバージョンは、 1.3.0未満のバージョンの Realm オブジェクト サーバーと互換性がありません。
バグ修正
RemoveAll(string)
のオーバーロードが正しく動作するように修正します。 (# 1288 )- 無効なセッションのトークンを更新するとクラッシュにつながる問題を解決しました。 (# 1289 )
session.GetProgressObservable
から返されたIObservable
は、mode: ProgressMode.ForCurrentlyOutstandingWork
で作成すると、OnComplete
を正しく呼び出します。 (# 1292 )- string プロパティにアクセスする際のメモリ リークを修正しました。 (# 1318 )
- 同期された Realm で
EncryptionKey
を使用する際の問題を修正しました。 (# 1322 )
機能強化
- スレッド間でオブジェクトを安全に渡すためのAPIを導入しました。 スレッドセーフな参照を作成するには、それを
ThreadSafeReference.Create
ファクトリー メソッドに渡します。この参照は別のスレッドに安全に渡して、Realm.ResolveReference
の新しい Realm で解決してください。 (# 1300 ) - すべてのセッションの再接続を試行するための API を導入しました。 これを接続プラグインと組み合わせて使用すると、組み込みの再試行メカニズムに依存するのではなく、接続の変更を監視し、積極的に再接続をリクエストできます。 (# 1310 )
- 対 1 の関係でのソートを有効にします。例:
realm.All<Parent>().OrderBy(p => p.Child.Age)
。 (# 1313 ) - 基礎のデータベースエンジンに対する LINQ クエリで使用できる
string.Like
拡張メソッドを導入しました。 (# 1311 ) - ユーザーが Realm Object Server 管理者であるかどうかを示す
User.IsAdmin
プロパティを追加します。 (# 1320 )
重大な変更
DateTimeOffset
設定されていないプロパティは、オブジェクトが に渡された後、 ではなく0001-1-1
1970-1-1
realm.Add
に正しくデフォルト設定されるようになりました。(# 1293 )- 範囲外のインデックスでアイテムを取得しようとすると、すべての
IRealmCollection
実装に対してArgumentOutOfRangeException
が正しくスローされるようになりました。 (# 1295 ) - . ロックの配置 ファイルが変更されたため、異なるプロセスが同時に同じ Realm ファイルに書込みを試みるシナリオに影響する可能性があります。 (# 1296 )
PropertyChanged
通知は、古いメカニズムとは若干異なる動作をする、より信頼性の高い新しいメカニズムを使用します。 通知は、トランザクションがコミットされた後にのみ送信されます(コレクション通知の処理方法と一貫性があります)。 UI がすぐに更新されるようにするには、長時間のトランザクションを回避する必要があります。 (# 1316 )
1.1.1 (2017-03-15)
バグ修正
- Visual Studio で iOS のコンパイルを妨げる問題を解決しました。 (# 1277 )
1.1.0 (2017-03-03)
機能強化
- Azure Active Directory(AzureAD)認証情報プロバイダーを追加しました。 (# 1254 )
重大な変更
これは、UWP サポートを追加するための準備リリースです。 プラットフォーム固有のロジックをすべて Realm のアセットから削除し、代わりにコンパイル時にまとめています。 これはすべての一般的なシナリオでテストされていますが、非常に複雑なプロジェクトグラフでは問題が発生する可能性があります。 iOS プロジェクトでこれらの問題が発生した場合は、次の手順に従います。
- タスクの実行中にコンフィギュレーションに失敗します
WeaveRealmAssemblies
- Realm に初めてアクセスするとアプリがクラッシュします
問題を提出し、解決策の設定を説明してください。
1.0.4 (2017-02-21)
バグ修正
Realm
NuGet パッケージがRealm.Database
の Windows 32ネイティブ バイナリへのパスを接続しなくなりました。 (# 1239 )PropertyChanged
サブスクライブでオブジェクトをガベージコレクションするとクラッシュが発生するバグを修正しました。 (# 1237 )
1.0.3 (2017-02-14)
は、 betaん。
約 1 年と半分のハード作業後、これを1.0リリースと呼ばれることが照会します。 やるべきことはまだありますが、Realm Xamarin は現在、数千の開発者によって使用されており、信頼性が証明されています。
同期
Realm Xamarin が Realm Mobile プラットフォームで動作するようになりました。 つまり、Realm Object Server とシームレスに同期する Xamarin アプリを記述できるため、数行のコードを追加するだけでオフラインから自動的に同期される複雑なアプリを Xamarin と記述できます。 これについては、ドキュメントを参照してください。
Windows デスクトップ
Realm Xamarin は iOS と Android 専用ではなくなりました。 これを使用して、Windows デスクトップ用の .NET プログラムを記述できるようになりました。 NuGet パッケージを通常の .NET プロジェクトに追加し、Realm の使用を開始します。 一部の機能は、Windows ではまだサポートされていません。 最も注目すべきことは、同期はまだ Windows では機能していないこと、プロセス全体の暗号化と通知が欠落していることです。 そのため、サポートは現在構成中で行われています。
重大な変更
IRealmCollection<T>.ObjectSchema
は非推奨となり、ISchemaSource.ObjectSchema
に置き換えられました。 (# 1216 )
バグ修正
[MapTo]
属性はクエリで尊重されるようになりました。 (# 1219 )- Realm インスタンスを無効にするのではなく、ガベージ コレクションを使用すると、クラッシュが発生しなくなります。 (# 1212 )
PropertyChanged
コールバックでRealmObject.PropertyChanged
からのサブスクライブを解除しても、クラッシュが発生しなくなりました。 (# 1207 )WriteAsync
が読み取りトランザクションを転送するため、非同期に行われた変更は元のスレッドですぐに利用できるようになります。 (# 1192 )- バックリンク プロパティに対するクエリで、予期しない結果が得られなくなりました。 (# 1177 )
0.82.1 (2017-01-27)
バグ修正
- Realm インスタンスを取得し、オブジェクトを読み取り、その後同じスレッドで別の インスタンスを取得すると、オブジェクトが無効になり、そのノードのいずれかにアクセスするとアプリケーションがクラッシュする問題に対処しました。
0.82.0 (2017-01-23)
重大な変更
- すべての例外を
Realms.Exceptions
名前空間の下に移動しました。 (# 1075 ) RealmSchema
をRealms.Schema
名前空間に移動しました。 (# 1075 )ErrorEventArgs
コンストラクターを内部化しました。 (# 1075 )ObjectSchema.Builder
とRealmSchema.Builder
を内部化しました。 (# 1075 )IList
プロパティを持つオブジェクトをAdd(obj, update: true)
に渡しても、リストはマージされなくなります。 代わりに、IList
プロパティには オブジェクト内のアイテムのみが含まれます。 (# 1040 )
機能強化
- 現在のオブジェクトに対する変更を通知するためにオーバーライドできる仮想
OnPropertyChanged
メソッドをRealmObject
に追加しました。 (# 1047 ) [Required]
が正しいプロパティ タイプに適用されることを確認するコンパイル時間チェックを追加しました。 (# 1072 )Realm.Add(RealmObject obj)
は、Realm.Add<T>(T obj)
と同様に、 オブジェクトで渡された を返すようになりました。 (# 1162 )StringComparison
引数を受け入れ、クエリで使用できるstring.Contains
の拡張メソッドを追加しました。 クエリを実行する場合、使用できるのはStringComparison.Ordinal
とStringComparison.OrdinalIgnoreCase
のみです。 クエリで使用されない場合、StringComparison
のすべての値が有効です。 (#1141)
バグ修正
- アクセスされたことがない
IList<T>
プロパティを持つスタンドアロン オブジェクトを Realm に追加しても、NullReferenceException
はスローされなくなります。 (# 1040 ) IList<T>
読み取り専用 Realm によって管理されている場合、 プロパティが正しくIsReadOnly = true
を返すようになりました。 (# 1070 )- ウィーバーは、PCL および netstandard アセット内の参照を正しく解決するようになりました。 (# 1117 )
- いくつかの欠落しているメソッドを PCL 参照アセンブルに追加します。 (# 1093 )
- 破棄された Realm は、ノードにアクセスしようとする際に
ObjectDisposedException
をスローしません。 さらに、Realm を無効にしても、同じスレッド上の他の インスタンスが無効になることはありません。 (# 1063 )
0.81.0 (2016-12-14)
重大な変更
- パラメータを受け入れる
IQueryable<T>.ToNotifyCollectionChanged
拡張メソッドは非推奨になりました。 代わりに使用する必要がある新しいパラメーターレス インスタンスがあります。 エラーを処理したい場合は、Realm.OnError
イベントをサブスクライブすることで処理できます。 (# 938 ) RealmResults<T>
はinternal
とマークされ、Realm.All<T>()
は代わりにIQueryable<T>
を返します。 通知のサブスクライブを可能にする新しい拡張メソッドIQueryable<T>.SubscribeForNotifications(NotificationCallbackDelegate<T>)
を追加しました。 (# 942 )Realm.CreateObject<T>
は非推奨となり、次のメジャー リリースで削除される予定です。 (クラスに プライマリキー がある場合、近日同期される Realm を使用すると、リスクのあるデータが失われる可能性があります)。 (# 998 )RealmConfiguration.ReadOnly
はRealmConfiguration.IsReadOnly
に名前が変更され、 フィールドではなくプロパティになりました。 (# 858 )Realm.All
はRealm.GetAll
に名前が変更され、以前のは廃止されました。 (# 858 )Realm.ObjectForPrimaryKey
はRealm.Find
に名前が変更され、以前のは廃止されました。 (# 858 )Realm.Manage
はRealm.Add
に名前が変更され、以前のは廃止されました。 (# 858 )RealmConfiguration.PathToRealm
はRealm.GetPathToRealm
に名前が変更され、以前のは廃止されました。 (# 858 )RealmResults.NotificationCallback
はネストされていないクラスとして抽出され、名前がNotificationCallbackDelegate
に変更されました。 (# 858 )Realm.Close
はRealm.Dispose
の優先順位を操作するために削除されました。 (# 858 )RealmList<T>
はinternal
とマークされるようになりました。 コレクション関係を定義するには、IList<T>
を使用する必要があります。 (# 858 )
機能強化
- データバインディングシナリオでは、書込みトランザクションの外部でバインディングによってセッターが呼び出される場合、暗黙的なものを作成してコミットします。 これにより、長時間のトランザクションを保持することなく、双方向のデータ バインディングが可能になります。 (# 901 )
- Realmスキーマでは、新しい
[Required]
属性を使用して、null 以外の参照型のプロパティをExpressできるようになりました。 (# 349 ) - サブスクライブしてユーザー コード外で発生する例外を通知するために使用できる新しい
Realm.Error
イベントを拡張しました。 (# 938 ) Realm.All
から返されるコレクションのランタイム タイプと、RealmObject
上のIList<T>
プロパティ用に作成されたコレクションのランタイム タイプがINotifyCollectionChanged
で実装されるようになりました、追加のキャストなしでデータバインディングにそれらを渡すことができます。 (# 938 、# 909 )- すべての RealmObject は
INotifyPropertyChanged
を実装します。 これにより、データバインディングでそれらを直接渡すことができます。 - Realm で使用される領域を再利用できる
Realm.Compact
メソッドを追加しました。 (# 968 ) Realm.Add
は追加されたオブジェクトを返します。 (# 931 )- バックリンクのサポート:
LinkingObjects
。 (# 219 ) - コレクション内の要素を並べ替えることができる
IList<T>.Move
拡張メソッドを追加しました。 管理対象リストの場合、ネイティブ メソッドを呼び出すため、アイテムを削除して挿入するよりもわずかに効率的ですが、より重要な点として、NotifyCollectionChangedAction.Move
CollectionChanged
が発生し、これにより優れた移動アニメーションが実現されます。 ListView の再読み込み。 (# 995 )
バグ修正
- RealmObject で
PropertyChanged
をサブスクライブし、別のスレッドで同じオブジェクトのインスタンスを変更すると、 イベントが適切に発生するようになりました。 (# 909 ) Insert
を使用してIList
プロパティの末尾に項目を挿入するようになりましたが、例外がスローされなくなります。 (# 978 )
0.80.0 (2016-10-27)
重大な変更
- このバージョンでは、 ファイル形式を更新します。 古いバージョンでは、このバージョンで作成されたファイルを開くことができません。 (# 846 )
RealmList<T>
は、内部としてマークされています。 どこでも使用していた場合は、IList<T>
に移行する必要があります。 (# 880 )
機能強化
iOS リンクはすべて機能するはずです。
RealmObject
サブクラスのすべての構成要素に [Preserv(保存)] 属性が追加されたため、[Preserve(allMembers=true)]
を手動で追加する必要はなくなりました(# 822 )Realm.Manage
呼び出しがはるかに高速になりました。 いくつかのプロパティのみを設定する場合を除き、残りはデフォルト値のままにする間は、 をRealm.CreateObject
に優先する必要があります。 (# 857 )Realm.Manage
にbool update
引数を追加しました。update: true
が渡されると、Realm は同じプライマリキーを持つ永続化されたオブジェクトを検索して更新しようとします。 同じプライマリキーを持つオブジェクトが見つからない場合は、管理されていないオブジェクトが追加されます。 オブジェクトで渡される場合、プライマリキーがない場合は、追加されます。 関連するオブジェクトは、プライマリキーを持っているかどうかに応じて追加または更新されます。 (# 871 )注: オブジェクト参照が同一でない循環関係は、調整されません。 たとえば、これは期待どおりに動作します。
var person = new Person { Name = "Peter", Id = 1 }; person.Dog = new Dog(); person.Dog.Owner = person;
ただし、これは 結果ではありません 。人のプロパティは、最後に表示されたインスタンスのプロパティに設定されます。
var person = new Person { Name = "Peter", Id = 1 }; person.Dog = new Dog(); person.Dog.Owner = new Person { Id = 1 };
これは、 JSONからデータを逆シリアル化する場合に重要です。この場合、 IDは同じでも、プロパティが異なるオブジェクトの複数のインスタンスが存在する可能性があります。
Realm.Manage
は、管理対象のオブジェクトが渡された場合、例外をスローしなくなります。 代わりに、すぐに返されます。 (# 871 )Realm.Manage
の非ジェネリック バージョンを追加しました。 (# 871 )null 可能な整数プライマリキーのサポートを追加しました。 これで、
null
が有効な一意の値であるlong?
のプライマリキー プロパティが作成できます。 (# 877 )Realm 属性(例: 非永続プロパティの場合、
[Indexed]
または[PrimaryKey]
)を使用します。 (# 882 )LINQ の Realm オブジェクトへの
==
と!=
の比較のサポートを追加しました(# 896 )。例:var peter = realm.All<Person>().FirstOrDefault(d => d.Name == "Peter"); var petersDogs = realm.All<Dog>().Where(d => d.Owner == peter);
LINQ で
StartsWith(string, StringComparison)
、EndsWith(string, StringComparison)
、Equals(string, StringComparison)
フィルタリングのサポートを追加しました。 (# 893 )注: 現在、
Ordinal
とOrdinalIgnoreCase
の比較のみがサポートされています。 別の を渡しようとすると、実行時エラーが発生します。 引数が指定されていない場合は、Ordinal
が使用されます。
0.78.1 (2016-09-15)
バグ修正
Realm.ObjectForPrimaryKey()
は、オブジェクトを見つけられない場合に null を返すようになりました(# 833 )。- 永続的なプロパティ以外のクエリでは、クラッシュが発生するのではなく がスローされるようになりました(# 251と# 723 )
コア1.5.1を使用
0.78.0 (2016-09-09)
重大な変更
- 他の SDK と一致させるために、
ObjectId
という用語がPrimaryKey
に置き換えられました。 これは、プロパティを修飾するために使用される[ObjectId]
属性に影響します。
機能強化
[PrimaryKey]
プロパティが指定されている場合は、Realm.ObjectForPrimaryKey()
を使用して単一のオブジェクトをすばやく取得できます。 (# 402 )- 手動移行がサポートされるようになりました。 データモデルを更新するときに、データを移行する方法を正確に指定できます。 (# 545 )
- 式の反対側の整数型がプロパティの整数型と完全に一致しない場合でも、LINQ 検索では
NotSupportedException
がスローされなくなりました。 - 追加の LINQ メソッドがサポートされるようになりました(# 802 )
- 最後に
- LastOrDefault
- FirstOrDefault
- SingleOrDefault
- ElementAt
- ElementAtOrDefault
バグ修正
- 文字フィールド タイプの検索が機能するようになりました (# 708 )
RealmObject
サブクラス宣言を変更し、SchemaVersion
を増加させていない場合に、RealmMigrationSchemaNetedException がスローされるようになりました(# 518 )- がガベージコレクションされている場合に、 を無効にすると がスローされるバグを修正しました(#
Transaction
ObjectDisposedException
Realm
779) IndexOutOfRangeException
でスローされる例外をArgumentOutOfRangeException
になるように修正しました
コア1.5.1を使用
0.77.2 (2016-08-11)
機能強化
- ビルドの冗長度を
Detailed
またはNormal
に設定すると、すべてのプロパティが折りたたまれたメッセージが表示されるようになりました。これは、Fundy Webhook でエラーが疑われる場合に役立ちます。 - より優れた例外メッセージがEmptySchemaの問題の診断に役立つようになりました(# 739 )
- LINQ 式の部分的な評価により、バイナリ式のオペランドとしてサポートされる式のタイプが増えます(# 755 )
string
、byte[]
、Nullable<T>
プロパティに対してnull
をチェックする LINQ クエリをサポートします。- LINQ クエリの永続化プロパティでの
string.IsNullOrEmpty
のサポート。 - スキーマ構築が効率化され、Realm を開く際のオーバーヘッドが削減されました
- スキーマのバージョン番号が UInt 64ではなく0から始まるようになりました。MaxValue
バグ修正
RealmResults<T>
IQueryable.Provider
を暗黙的に実装する必要があります(# 752 )- 暗黙的に閉じる Realm が他のインスタンスを無効にしなくなりました(# 746 )
コア1.4.2を使用
0.77.1 (2016-07-25)
マイナーな変更
- v 0.77.0でリリースされた純粋な PCL プロジェクトを回避するバグを修正しました (# 715 )
- LINQ で互換性のない引数を使用したことによる例外メッセージに、無効な引数が含まれるようになりました(# 719 )
- ToNotifyCollectionchanged を使用する PCL プロジェクトは、PCL 署名とプラットフォーム ビルド間の不一致が原因でクラッシュした可能性があります。
コア1.4.0を使用
0.77.0 (2016-07-18)
壊れたバージョン- は PCL プロジェクトをビルドしません
重大な変更
- 以前のバージョンでのソート順序の変更が元に戻りました。
主要な変更
- Realm のスキーマを内部検証することができるようになりました。 (# 645 )
- Realmクラスは、ジェネリック パラメータの代わりにstring引数を受け入れる
Realm.CreateObject
とRealm.All
のオーバーロードを受け取り、コンパイル時に正確な型が不明なオブジェクトでdynamic
キーワードを使用できるようになりました。 (# 646 ) - 多くの 関係を、
IList<DestClass>
RealmList<DestClass>
は必要とせず、 で宣言できるようになりました。これはリストがキャッシュされるため、RealmList
を使用するよりも大幅に高速です。 (問題番号287 ) - 関連するオブジェクトのリストを持つスタンドアロン オブジェクトを作成できるようになりました。 このようなオブジェクトを
Realm.Manage
に渡すと、そのオブジェクトのオブジェクト グラフ全体が管理されるようになります。
マイナーな変更
- 有効期間が短い Realm を並行して非常に迅速に作成する際に iOS で発生するクラッシュを修正しました(問題番号653 )
RealmObject.IsValid
は、管理対象のオブジェクトが削除されたかどうかを確認するために呼び出されます- 無効なオブジェクトのプロパティにアクセスすると、セグメント違反でクラッシュするのではなく、例外がスローされるようになりました(# 662 )
- Realm の作成時にスローされる例外によって、リーク ハンドルが残らないようになりました(問題番号503 )
コア1.4.0を使用
0.76.1 (2016-06-15)
マイナーな変更
- 現在の
AppDomain
にアクティブなSystem.Reflection.Emit.AssemblyBuilder
がある場合、Realm
静的コンストラクターはTypeLoadException
をスローしなくなりました。 - iOS デバイスで通知 API を使用する際の
Attempting to JIT compile
例外を修正しました。 (問題番号620 )
重大な変更
API の変更はありませんが、ソート順序は若干変更され、アクセント付き文字がまとめられ、一部の特殊文字は異なる方法でソートされます。 「1/3」が「1/3」よりも先にソートされるようになりました。
これはftp://ftp.unicode.org/public/UTA/last/allkeys.txtのテーブルを使用します。
視覚的に同一に見えますすべての文字をグループ化します。つまり、 、 、 を一緒に配置し、 io, 、整合性の前に配置します。 たとえば、da は デンマーク語 の最後に配置される必要があるため、これは誤りです。 しかし、よりロケールを認識できるようになるまでは、それが最善です。
コア1.1.2を使用
0.76.0 (2016-06-09)
主要な変更
RealmObject
クラスで インターフェースを指定すると、 クラスは暗黙的にINotifyPropertyChanged
を実装するようになります。 この貢献はJoe Blockにあります。
マイナーな変更
long
はクエリでサポートされています(発行番号607 )System.String System.String::Format(System.IFormatProvider,System.String,System.Object)
を検索するリンクのエラーを修正しました(問題番号591 )RealmObject
クラスのRealmObject
および静的プロパティの 2 番目のレベルの子孫により、Weaver がエラーを適切に報告するようになりました(まだサポートしていないため)。 (問題番号603 )- スタンドアロン オブジェクトで
.Equals()
を呼び出しても、スローされなくなりました。 (問題番号587 )
0.75.0 (2016-06-02)
重大な変更
- Realm ファイルのファイル形式が変更されます。 ファイルは自動的にアップグレードされますが、古いバージョンの Realm を使用して Realm ファイルを開くことはできません。 注: 古い形式に指定された Realm ブラウザを使用していた場合は、アップグレードする必要があります。 こちらから最新バージョンを選択してください。
RealmResults<T>
は暗黙的にINotifyCollectionChanged
を実装しなくなりました。 代わりに新しいToNotifyCollectionChanged
メソッドを使用してください。
主要な変更
RealmResults<T>
新しいSubscribeForNotifications
メソッドを介して、粒度の変更を観察できます。Realm
は、書込みトランザクションをバックグラウンド スレッドで実行できるようにするWriteAsync
メソッドを取得しました。- Realm モデルではバイナリ データを保存するために
byte[]
プロパティを使用できるようになりました。 RealmResults<T>
は、MVVM データ バインディングに適したObservableCollection<T>
のようなラッパーを生成する新しいToNotifyCollectionChanged
拡張メソッドを導入しました。
マイナーな修正
- null 可能な
DateTimeOffset
プロパティがサポートされるようになりました。 null
を string プロパティに設定すると、null
が正しく返されるようになりました- Fedty のインストールに失敗すると、"Realms.RealmException: Floyd が正しくインストールされていない場合" のような例外が発生するようになりました。 RDB 2 _with_complete_Realm.Dog は Realm オブジェクトですが、整合性がありません。 代わりに
NullReferenceException
- PCL
RealmConfiguration
に一部のメンバーがありませんでした。 - Fedty ウィーバーは、デフォルト以外の nuget リポジトリ パスで検出できるようになりました。
0.74.1 リリース日( 2016 - 05 - 10 )
マイナーな修正
- Realm が他のスレッドやプロセスで変更された場合に、Android で適切に更新されるようになりました。
- スレッド読み取りと書込みの重い組み合わせによるクラッシュを修正します。
マイナーな変更
Realm
とRealmWeaver
NuGet の 2 つのパッケージが単一のRealm
パッケージに統合されました。String.Contains(String)
、String.StartsWith(String)
、String.EndsWith(String)
メソッドで変数式がサポートされるようになりました。 以前はリテラル文字列のみで動作していました。RealmResults<T>
は、基礎となるテーブルまたはクエリ結果が書込みトランザクションによって変更された場合に、NotifyCollectionChangedAction.Reset
でCollectionChanged
イベントを発生させることでINotifyCollectionChanged
を実装するようになりました。
0.74.0 プライベートbeta (2016-04-02)
主要な変更
- Realm のアベイラビリティーが各ビルド中に匿名の使用状況データを送信するようになりました。これにより、Java、Swift、Objective-C 製品(発行番号182 )と同様に、一意のビルダの統計情報を追跡できます。
Realm.RemoveRange<>()
およびRealm.RemoveAll<>()
メソッドは、Realm からオブジェクトを削除できるように追加されました。Realm.Write()
暗黙的にコミットされたトランザクション内でコードを実行するために追加されたメソッドRealmConfiguration.ObjectClasses
を使用して、特定の Realm で許可されるクラスを制限できるようになりました。- LINQ の改善:
== true
を使用しなくても単純ブール検索は機能します(発行番号362 )- です。演算子は単純なブール値プロパティまたは複雑な式のいずれかを否定するように機能します(発行# 77 )
- カウント、単一、最初の が where 式の後に使用できるようになりました(#369)例:
realm.All<Owner>().Where(p => p.Name == "Dani").First();
およびLambda式によるrealm.All<Owner>().Single( p => p.Name == "Tim");
OrderBy
、OrderByDescending
、ThenBy
、およびThenByDescending
句を使用して並べ替えが提供されるようになりました。 並べ替えは、Where
句からのクエリの結果に適用するか、All<>
の後に適用してクラス全体をソートするために適用できます。String.Contains(String)
、String.StartsWith(String)
、String.EndsWith(String)
メソッドは Write 句で使用できるようになりました。- DateTimeオフセット プロパティはクエリで比較できます。
- 古い ARM V 5および V 6デバイス上の
armeabi
ビルドのサポートが削除されました。
マイナーな変更
- 関連リストに
ToList
を適用できるように、RealmList.CopyTo
を完了してください(発行番号299 ) - NuGet は
$(SolutionDir)packages
を使用する Android ターゲットにlibwrappers.so
を挿入するようになりました。これにより、クロスプラットフォーム( Xamarin )アプリ テンプレートと正常な Android テンプレートの異なる相対パスに対応できます。 Realm.RealmChanged
イベントは、Realm に加えられた変更を通知しますRealm.Refresh()
は、Realm が他のスレッドからの変更で更新されることを確認します。
0.73.0 プライベートbeta (2016-02-26)
主要な変更
RealmConfiguration.EncryptionKey
が追加されたため、ファイルを暗号化し、他の Realm ソースから既存の暗号化されたファイルを開くことができます(キーを持っていることを前提としています)
マイナーな修正
- PCL ユーザーの場合、プラットフォーム固有の dll をリンクせずに
RealmConfiguration.DefaultConfiguration
を使用すると、PlatformNotSupportedException
付きの警告メッセージが表示されるようになります。 以前はTypeInitExepction
をスローしていました。 - Core v 0.96.2と一致する ObjectStore に更新(発行番号393 )
0.72.1 プライベートbeta (2016-02-15)
機能的な変更はありません。 Android 64ビット ターゲットx86_64
とarm64-v8a
のライブラリビルドを追加しました。
0.72.0 プライベートbeta (2016-02-13)
Realm コア0.96.0を使用
主要な変更
- PCL のサポートが追加され、PCL GUI またはビューモデル ライブラリで NuGet を使用できるようになりました。
0.71.1 プライベートbeta (2016-01-29)
マイナーな修正
シミュレーターを対象とするiOSアプリのビルドでは、次のようなエラーが発生することがあります。
Error MT5209: Native linking error...building for iOS simulator,
but linking in object file built for OSX, for architecture i386 (MT5209)
これは、NuGet に含まれる冗長なシミュレーター ライブラリを削除することで修正されました
0.71.0 プライベートbeta (2016-01-25)
Realm コア0.95.6を使用します。
プラットフォームの変更
現在サポート中:
- MacOS 上のXamarin Studio - iOSおよび Android
- Windows - Android 上の Xamarin Studio
- Windows上の Visual Studio - iOSおよび Android
主要な変更
- 上記のとおり Android サポートを追加しました。
- パスやその他の設定を指定する再利用可能な方法を提供するために
RealmConfiguration
を追加しました。 - 等価チェックを提供するために
Realm.Equals
、Realm.GetHashCode
、Realm.IsSameInstance
を追加し、同じスレッドで開かれた Realm が等しい(共有内部インスタンス)ことを確認できます。 - 関連ファイルのクリーンアップを支援するために
Realm.DeleteFiles(RealmConfiguration)
を追加しました。 int?
などの null 可能な基本型を追加しました。- 特定のクラスのすべてのオブジェクトの迅速な数を取得するには、
Realm.All<userclass>().Count()
を最適化しました。 - 関連リストがスタンドアロン オブジェクトでサポートされるようになりました。
LINQ
Count()
(Where()
に実装されています)Any()
(Where()
に実装されています)First( lambda )
とSingle( lambda )
が実装されました。Where()
を適切に遅延させるための大幅な最適化により、すべてのオブジェクトが内部的にインスタンス化されていました。
API 重大な変更
[PrimaryKey]
属性の名前が[ObjectId]
に変更されました。Realm.Attach(object)
Manage(object)
の名前が変更されました。- 関連オブジェクトのリストが
IList<otherClass>
RealmList
ではなく で宣言されるようになりました。
バグ修正
- Windows シミュレーターのリンクエラーを発生させるバグを修正しました(# 375 )
0.70.0 最初のプライベートbeta (2015-12-08)
NuGet のダウンロードのプライベート コピーからのインストールが必要です。
状態
- iOSXamarinStudio のみで をサポートしました。
- 単純な LINQ
Where
検索を使用する基本モデルと読み取り/書込み操作。 - NuGet はプライベート Realm/realm-dotnet リポジトリからのダウンロードとしてホストされます。