以前デモアプリを試して、サーバーと同期が取れている事を試してみました。 今回は実際にiOSアプリに組み込んでみたいと思います。
プロジェクト作成
今回はXcode8でプロジェクトを作成していきます。
Create a new Xcode project
> iOS
> Application
> Single View Application
を選択。Product Name
やOrganization Name
等はお好みで。Languegeは
Swift
、DevicesはiPhone
を選択します。
Keychainを使用する為、
※「Capabilities」タブにあります
Keychain Sharing
をONにします。※「Capabilities」タブにあります
次に「General」タブの
「ios」>「swift-3.0」にある「Realm.framework」と「RealmSwift.framework」を
ドラッグ&ドロップします。
Embedded Binaries
に前回ダウンロードしたrealm-mobile-platform
フォルダ内の「SDKs」>「realm_cocoa_XXX」> 「ios」>「swift-3.0」にある「Realm.framework」と「RealmSwift.framework」を
ドラッグ&ドロップします。
その際に「Copy Items if Needed」にチェックを入れます。
コピー後
モデルの作成
次に簡単なモデルを作成します。
ViewController.swift
に以下を追加します。import RealmSwift
final class Item : Object {
dynamic var id = 0
dynamic var name = ""
}
モデルの作成は
メンバは
Object
クラスを継承したクラスを作成し、メンバは
dynamic var
で宣言します。ユーザーログイン
アプリ起動時にサーバーにログインする処理を追加します。
var realm: Realm!
func login() {
// サーバーURLを指定
let url = URL(string: "http://localhost:9080")
// 登録済みのユーザーで認証します
let credential = Credential.usernamePassword(
username: "user@example.com", password: "xxxxxx", actions: [.useExistingAccount])
User.authenticate(with: credential, server: url!, onCompletion: {user, error in
if let _ = user {
// ログイン成功時
// sample/database : DBで言うスキーマみたいなもの
let realmURL = URL(string: "realm://localhost:9080/sample/database")!
let configuration = Realm.Configuration(syncConfiguration: (user!, realmURL))
Realm.Configuration.defaultConfiguration = configuration
// realmオブジェクトを取得
self.realm = try! Realm()
} else if let _ = error {
// ログイン失敗
print("login error \(error)")
}
})
}
override func viewDidLoad() {
super.viewDidLoad()
login()
}
ログイン成功時に取得した
Realm
オブジェクトを使って処理を行います。アイテム追加
ストーリーボードで
Button
とTextField
を追加します。
Button押下時のアクションを
イベント追加します。また、
onPushAdd
としてViewController.swift
にイベント追加します。また、
TextField
もnameField
として追加します。
追加した
onPushAdd
を以下のように修正します。var count: Int = 0
@IBAction func onPushAdd(_ sender: AnyObject) {
// TextFieldから現在入力されているテキストを取得
let name = self.nameField.text
try! self.realm?.write {
// RealmオブジェクトにてItemを追加
count = count + 1
let item = Item()
item.id = count
item.name = name!
self.realm.add(item)
}
}
ここまで出来たらサーバー側で反映されているか確認します。
Realm Object Server
を起動し、Realm Browser.app
を立ち上げます。
サーバー接続後、Openできるスキーマが増えているかと思います。
ログイン時に設定したスキーマになります。
※スキーマという名前であってるか分かりませんが、便宜上そう読んでます。
※スキーマという名前であってるか分かりませんが、便宜上そう読んでます。
接続後に起動したアプリ上で
データが追加されてればOKです。
TextField
に文字列を入力しAdd
を押すとデータが追加されてればOKです。
今回修正した
ViewController.swift
はここで見れます。
0 件のコメント:
コメントを投稿