RealmContent: たった5分でリアルタイムアップデート機能を実装できます
概要
RealmContentとRealm Mobile Platformを組み合わせることで、Realm Browserアプリから直接データを編集して、iOS アプリに新しいコンテンツをすぐに追加できるようになります。
RealmContentは必要となるRealmオブジェクトを自動でアプリのスキーマに追加し、前もって設定しておいたView Controllerを使って、利用可能なコンテンツをリストし、コンテンツページをレンダリングします。
このコンポーネントのほとんどは自動で動き、柔軟なカスタマイズが可能です。土台となる部分を実装する時間と手間を省き、アプリのコンテンツを変更するために新しいバージョンのアプリを公開する必要がなくなります。
コンテンツをユーザーベースにプッシュするには、これが一番手軽で、一番早い方法です。
使い方
このダイナミックコンテンツ管理システムをiOSアプリに導入するには5つのステップがあります。
1) RealmContent
のインポート
CocoaPodsや、ソースコードを直接プロジェクトに含める形で、 RealmContent を追加します。次に、RealmSwift
とRealmContent
の両方をViewControllerでimportします。
import RealmSwift
import RealmContent
アプリには Realm Object Server から同期されたオブジェクトのリストがあることを前提とします。 RealmContent
をインポートすると、Realmによって2つのモデルが公開されます。Realmが追加する ContentPage
とContentElement
というデフォルトのスキーマです。
複数のRealmファイルを使っている場合は、任意のObject SchemaにContentPage
と ContentElement
を追加してください。
2) ContentListDataSource
の作成
利用可能なコンテンツのリストを表示するには、RealmContent
のContentListDataSource
を使います。
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
からデータを取得します。このクラスでは、numberOfSections
、numberOfItemsIn(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アプリを使って、新しいページの追加や削除、並び替え、コンテンツブロックの追加でさえ簡単に行うことができます。見出しやリンクのアクセントの色を変更することもできます。
さあ、今すぐRealmContentを試してみよう
このコンポーネントはオープンソースになっていて、ソースコードとデモアプリにはここからアクセスできます。https://github.com/realm-demos/RealmContent.
RealmContentをアプリで試してみるには、CocoaPodsを使って、Podfileにpod 'RealmContent'
を加えるのが一番手軽な方法です。
新しい機能のアイディアを思いついたり、バグレポートやフィードバックをしてくださる際には、TwitterやGitHubにIssueを立ててご連絡ください。
このコンポーネントを使って、あなたがダイナミックなアプリを作るのをワクワクしながらお待ちしています!