Realm Blog

Realm ObjC & Swift 2.5: クエリの改善とSwift 3.1の対応、不具合の修正

このバージョン(2.5)で読み書きを行ったRealmファイルは自動的にフォーマットがアップグレードされ、以前のバージョンで開くことができなくなります。既存アプリケーションに対して更新を適用する場合は特に注意してください。

Realm Objective‑CおよびRealm Swift 2.5をリリースしました。 このバージョンには新機能としてダイアクリティカルマークを無視した検索、ネストしたオブジェクトに対するNULLの比較、不具合の修正を含みます。詳しくは下記をご覧ください。

Swift 3.0、3.0.1、3.0.2、3.1のバイナリが含まれます。

同期されたRealmを利用する場合は、Realm Object Server 1.3.0以上が必要になります。

ダイアクリティカルマークを無視して検索する

文字列比較のオプションに[d]を指定してダイアクリティカルマークの違いを無視して検索することができます。このオプションは大文字・小文字を区別せずに検索するオプション([c])と同時に使用することができます。

例:

  • ==[d] 'u'üと一致します。
  • BEGINSWITH[d] 'e'étoileと一致します。
  • CONTAINS[d] 'n'Piñataと一致します。
  • ENDSWITH[d] 's'diaçrïtičşと一致します。
  • ENDSWITH[cd] 'É'caféと一致します。

注意: LIKE検索にはこのオプションは使用できません。

ネストしたオブジェクトについてNULL比較が可能に

複数階層のオブジェクトについてNULLかどうかの比較ができるようになりました。 例:

class CircleObject: Object {
  dynamic var data = ""
  dynamic var next: CircleObject?
}
let realm = try Realm()
realm.objects(CircleObject.self).filter("next.next != nil AND next.next.next = nil")

その他の改善

  • RLMRealmを直接インスタンス化することは許されていないので、[[RLMRealm alloc] init]unavailableにし、利用するとコンパイルエラーになるようにしました。
  • プライマリキーに指定できない型をプライマリキーに指定している際のエラーメッセージにクラス名を含めるようにしました。

Bug Fixes

  • 同期によってスキーマがマージされた際に、不正なカラムのアサーションエラーが発生していた問題を修正しました。
  • 同期されたRealmを開く際に何もしないトランザクションが使われていたのを修正しました。
  • 同期されたRealmにおいて暗号化をサポートしました。
  • 16MBに近いサイズのデータを{NS}Data型のプロパティに格納した際にクラッシュする問題を修正しました。
  • {NS}Data型のプロパティにアクセスした際に、誤ってnilを返す問題を修正しました。
  • トランザクションを開始した際にRealmのバージョンが固定されることにより、ファイルサイズが肥大するのを修正しました。
  • 非常に大きなサイズのRLMArray/List型のプロパティを保存しようとした際にアサーションエラーが発生するのを修正しました。
  • 同期されたRealmに不正な差分データが同期され、BadTransactLog例外が発生するのを修正しました。
  • RLMArray/Listに通知を設定している場合、削除後に変更するとアサーションエラーが発生するのを修正しました。

Xcode 8.3を使う場合の注意

通常のリリースではObjective‑Cのバイナリは最新のXcodeを利用してビルドしていました。現在の最新版はXcode 8.3です。しかし、Xcode 8.3が生成するバイナリには非常に大きなビットコードが含まれ、以前のバージョンと比べて4倍以上のサイズになってしまいました(rdar://31302382)。そのためiOS版のRealm Objective-Cフレームワークは通常の55MBほどのサイズから158MBになってしまいました。そのためObjective-Cフレームワークは引き続きXcode 8.2を利用してビルドすることにしました。Xcode 8.3でビルドしたフレームワークを利用するにはソースコードからビルドしてください。App Storeから配信される際にビットコードは削除されるので、エンドユーザーにはバイナリサイズによる影響はありません。


お読みいただきありがとうございます。 Realmで素晴らしいアプリケーションを作りましょう!お困りの際はStack Overflow(日本語)Slack(日本語)Twitter(日本語)GitHub(英語)でご相談ください。


Realm Team

At Realm, our mission is to help developers build better apps faster. We provide a unique set of tools and platform technologies designed to make it easy for developers to build apps with sophisticated, powerful features — things like realtime collaboration, augmented reality, live data synchronization, offline experiences, messaging, and more.

Everything we build is developed with an eye toward enabling developers for what we believe the mobile internet evolves into — an open network of billions of users and trillions of devices, and realtime interactivity across them all.

記事の更新情報を受け取る