Realm Blog

RealmContent: たった5分でリアルタイムアップデート機能を実装できます

概要

RealmContentとRealm Mobile Platformを組み合わせることで、Realm Browserアプリから直接データを編集して、iOS アプリに新しいコンテンツをすぐに追加できるようになります。

RealmContentは必要となるRealmオブジェクトを自動でアプリのスキーマに追加し、前もって設定しておいたView Controllerを使って、利用可能なコンテンツをリストし、コンテンツページをレンダリングします。

このコンポーネントのほとんどは自動で動き、柔軟なカスタマイズが可能です。土台となる部分を実装する時間と手間を省き、アプリのコンテンツを変更するために新しいバージョンのアプリを公開する必要がなくなります。

コンテンツをユーザーベースにプッシュするには、これが一番手軽で、一番早い方法です。

使い方

このダイナミックコンテンツ管理システムをiOSアプリに導入するには5つのステップがあります。

1) RealmContent のインポート

CocoaPodsや、ソースコードを直接プロジェクトに含める形で、 RealmContent を追加します。次に、RealmSwiftRealmContentの両方をViewControllerでimportします。

import RealmSwift
import RealmContent

アプリには Realm Object Server から同期されたオブジェクトのリストがあることを前提とします。 RealmContent をインポートすると、Realmによって2つのモデルが公開されます。Realmが追加する ContentPageContentElement というデフォルトのスキーマです。

複数のRealmファイルを使っている場合は、任意のObject SchemaにContentPageContentElement を追加してください。

2) ContentListDataSource の作成

利用可能なコンテンツのリストを表示するには、RealmContentContentListDataSourceを使います。

let items = ContentListDataSource(style: .sectionsByTag)

プレーンなリストには.plain を使い、tagプロパティで分割されたページを持った、セクションのあるリストには.sectionsByTagを使います。

3) DataSourceの初期化

loadContent(from:)をコールし、コンテンツのソースとして使われるRealmファイルをセットします。

items.loadContent(from: try! Realm())

また、Realm Object Serverでの変更によって、Data SourceがTableView / CollectionViewを自動的に更新させるように設定することも可能です (推奨) 。

items.updating(view: tableView)

4) 通常通り、TableView / CollectionViewのDataSourceのメソッドを実装しますが、ContentListDataSource からデータを取得します。このクラスでは、numberOfSectionsnumberOfItemsIn(section:)titleForSection(section:)itemAt(indexPath:) のようなメソッドを提供しています。

この方法で、独自のTable View DataSource / Collection View DataSourceのメソッドを実装し、必要なUIの設定やその他の処理を実行できます(詳細なサンプルコードは、RealmContentのリポジトリにあるデモアプリをご覧ください。)

5) コンテンツページの表示

ContentViewControllerを画面遷移して、コンテンツを表示します。Table View / Collection Viewのタップデリゲートメソッドや、prepareForSegue(_:)、また任意のコードを用いて遷移させます。

セルをタップしたあとに遷移させるサンプルはこちらです。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  tableView.deselectRow(at: indexPath, animated: true)

  let item = items.itemAt(indexPath: indexPath)
  let vc = ContentViewController(page: item)

  navigationController!.pushViewController(vc, animated: true)
}

画面遷移後のView Controllerは、Table Viewを使用して、指定されたContentPageエレメントからコンテンツを動的に表示します。 コンテンツをリモートで変更すると、その変更は画面上にリアルタイムで反映されます。

動的にコンテンツを追加/編集/削除する

RealmContentを使うことで得られる一番のメリットは、表示されたコンテンツをいつでも変更できることです。すべての変更は、リアルタイムで接続しているすべてのユーザーに同期されます。(もちろん、今接続してない場合は、接続した際に同期されます。)

Realm Browserアプリを使って、新しいページの追加や削除、並び替え、コンテンツブロックの追加でさえ簡単に行うことができます。見出しやリンクのアクセントの色を変更することもできます。

Editing content via Realm Browser

さあ、今すぐRealmContentを試してみよう

このコンポーネントはオープンソースになっていて、ソースコードとデモアプリにはここからアクセスできます。https://github.com/realm-demos/RealmContent.

RealmContentをアプリで試してみるには、CocoaPodsを使って、Podfileにpod 'RealmContent'を加えるのが一番手軽な方法です。

新しい機能のアイディアを思いついたり、バグレポートやフィードバックをしてくださる際には、TwitterやGitHubにIssueを立ててご連絡ください。

このコンポーネントを使って、あなたがダイナミックなアプリを作るのをワクワクしながらお待ちしています!


Marin Todorov

Marin TodorovはiOSコンサルタントで著者でもあります。代表的な著書に「iOS Animations by Tutorials」があり、現在は「iOS Animations by Emails」というニュースレターを配信しています。20年前にApple ][のソフトウェア開発を始めてから現在に至ります。この間、Monster TechnologiesやNative Instrumentsといった、すばらしい企業で働き、4つの国を渡り歩きました。raywenderlich.comの設立メンバーの一人であり、コードだけでなく、ブログや本を書いたり、講演や教育にも関わっています。ときどき、自分の書いたコードをOSSとして公開もしています。現在はサンティエゴに住んでいます。

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