4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RealmAdvent Calendar 2016

Day 25

Realm Advent Calendar 2016 25日目 Realm Mobile PlatForm beta Swift3 with 実機

Last updated at Posted at 2016-12-24

こんにちは、iosフリーランスエンジニアの永田大祐と申します。
機械学習の技術を高めて、iosのモバイルに、機械学習を繋げるエンジニアになります。
よろしくお願いします。

本日は、誠に勝手ながら、Realm Advent Calendar の最終日に参加させていただきました。ありがとうございます。

今年のフリーランスリアルライフはRealmで始まりました。
去年の夏頃より、毎日10時間以上ほとんどコーディングを続けてきました。去年は退職金や失業給付金などありましたから、毎日コーディングを続けまして、10本以上のアプリリリースと10本以上の登壇発表、オープンソースも出し続けましたが、さらに続けないと、あまり意味がないと思いますので、これが自分の普通ペースになってきているので、そのままマイペースで続けたいと思います。

そして今年の2月頃に「RainbowAppsの講師の方に勉強するならRealmを勉強するといいよ」とご教授いただき、ひたすらRealmのデータベースを勉強して、実際にコーディングを続けました。

案の定、業務においてもデータベースでRealmを活用している案件は多数ありました。ただ炎上案件なども自分がマネージメントした方が上手くいくと勝手ながら、思っています。理由は5年間は超繁忙店のマネージャーをしていて、数値で結果を出し続けたからです。(上には上がいると思いますし、各々の頑張りはリスペクトしてます。)

RealmはSwift上で実装するディレクトリーでは非常にシンプルに実装できます。またModelやクラス、構造体といった概念も同時に学べ、コーディングを覚えるのにもとても分かりやすいと思います。

今回の取り組みは、
だいたい23日から検討に入り、投稿させていただきました。
前置きが長くなりましたが、今回実施した内容に入ります。

#Realm Mobile PlatForm betaを実機で試す。

#手順
###1 ネット環境を同じにする。**wifi接続なら同じwifi設定が必要です。

###2 Realmサーバーに繋げる。
realmサーバーの手順は公式ホームページを確認願います。

公式サイトからプロジェクトをダウンロードしてきたら、
こちらの画像の箇所Start〜をクリックするとターミナルが立ち上がり、サーバーが自動で起動します。リセットなどもあるので英語ですが、公式サイトをよく読むことをお勧めします。

スクリーンショット 2016-12-24 午後2.04.13.png

ここで適当なメールアドレスとパスワードを入力します。本当のメールアドレスではなくとも大丈夫です。

スクリーンショット 2016-12-24 午後2.03.35.png

###3 プロジェクト内のMacアプリを起動する。

サーバーにログインする際のメールアドレスや、パスワードを入力します。
スクリーンショット 2016-12-24 午後2.06.31.png

今回は、チュートリアルをモデルにさせていただきました。
https://realm.io/docs/tutorials/realmtasks/

こちらはシュミレータ専用で、Macアプリの対応になっています。

#4 実機でビルドする
####チュートリアルのモデルアプリを改造して実機で動かしました。
情報は1件だけヒットしました。
https://stackoverflow.com/questions/40296528/realm-app-working-on-the-simulator-but-not-on-an-actual-device

上記のヒントより対応したソースを展開します。こちらのヒントがないと出来なかったかもしれません。

###ポイントはここです!!***Constants.swiftはチュートリアル動画で紹介されていないプロジェクトファイルです。
スクリーンショット 2016-12-25 午前0.27.19.png
公式ホームページ内の、画像をクリックすると、ダウンロードできます。

Constants.swiftファイル内の

static let syncHost = "Macのipアドレスを入力"

LocalIPAddress.swiftも同様にMacのipアドレスを記載。

###ポイントはここです!!こちらはチュートリアルで紹介されているメソッドの一部です。残りはhttps://realm.io/docs/tutorials/realmtasks/
で確認願います。

ViewController.swift内の
メールアドレスや、パスワードはサーバーログインした際に登録したものです。あとはご自身のMacのipアドレスを設定する必要があります。

func setupUI() {
    title = "My Tasks"
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    navigationItem.leftBarButtonItem = editButtonItem
    navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add))
}
override func tableView(_ tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
    return items.count
}
func setupRealm() {
    // Log in existing user with username and password
    let username = "1111@gmail.com"  // <--- Update this
    let password = "1111"  // <--- Update this
    SyncUser.logIn(with: .usernamePassword(username: username, password: password, register: false), server: URL(string: "http://Macのipアドレス:9080")!) { user, error in
        guard let user = user else {
            fatalError(String(describing: error))
        }

        DispatchQueue.main.async {
            // Open Realm
            let configuration = Realm.Configuration(
                syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://Macのipアドレス:9080/~/realmtasks")!)
            )
            self.realm = try! Realm(configuration: configuration)
            
            // Show initial tasks
            func updateList() {
                if self.items.realm == nil, let list = self.realm.objects(TaskList.self).first {
                    self.items = list.items
                }
                self.tableView.reloadData()
            }
            updateList()
            
            // Notify us when Realm changes
            self.notificationToken = self.realm.addNotificationBlock { _ in
                updateList()
            }
        }
    }
}

deinit {
    notificationToken.stop()
    
}

上記の動作を実施することにより端末と端末でも実施できました。

ちなみにサーバー接続が成功するとコンソールにはこのように出力されます。
<img width=
">

            
                
2016/12/25現在で自分のFaceBookに挙動紹介動画を貼り付けています。よかったら参考にしてみてください。

#最後にオリジナルなお絵描きアプリを作りました。

Movie.gif

#まとめ。
サーバーも作れるようになる必要がある。 Realm Mobile PlatFormはサーバが起動して、アプリケーションが動くからです。本番で実施する際は、サーバーも必要になります。
上記のようなお絵描きアプリの完全版を作成する際は、メモリ管理が重要になると思いました。理由は、 現在のRealm Mobile PlatFormでは、Realmself.notificationToken = self.realm.addNotificationBlockでUIの表示が動作し続けているからです。ここで動画のようなUIをリアルタイムで表現にするには、メモリ管理の設計が重要になると考えました。

本日も貴重なお時間にお読みいただき、誠にありがとうございます。来年も宜しくお願い申し上げます:robot:

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?