CocoaPodsでXcodeのRealm導入メモ（まだ記載途中です。）

## この記事の目的
山ほど参考サイトはありますが、自分の環境時にどのようにして導入したのかをメモします。
まだ記載途中です。

## Premise
* Xcode 9.2
* Swift
* Realm
* CocoaPods 1.1.0以降（当方環境1.4.0）
    * `pod --version`で確認可能

## Caution
AlcatrazはXcode8のみ対応なので使ってはいけない
（RealmSwiftの導入記事には記載が多かったため導入してしまい動作不安定になりました）

## Introduction

### CocoaPods

add `Realm.framework` and `RealmSwift.framework`

### RealSwift

1. Download
2. Start Project
3. Build to Mac

### Alcatraz

1. Quit Xcode
2. input below code

```
curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh
sudo gem install -n /usr/local/bin update_xcode_plugins
update_xcode_plugins
update_xcode_plugins --unsign
```
3. Open Xcode
4. Click LoadBundle

ただ、これをしてからXcodeの調子が悪い

### Sample

サンプルは[これ](https://qiita.com/leegun/items/70414223b2339b6052ee)を参考
このままでは動かなかったので下記のように変更

* dynamic var -> @objc dynamic var
* objects(User) -> objects(User.self)
* sorted("id") -> sorted(byKeyPath:"id")

文法参考
* [Grammer](https://realm.io/jp/docs/swift/latest/#section-30)
* [Grammer2](http://blog.ch3cooh.jp/entry/20160203/1454464216)

```RealmTest.swift
import Foundation
import RealmSwift

class User: Object {
    @objc dynamic var id = 0
    @objc dynamic var name = ""
    @objc dynamic var createdAt: Double = 0
}
```

```ViewController.swift
import RealmSwift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        //Realmオブジェクト生成
        let realm = try! Realm()
        
        //作成
        let tanaka = User()
        tanaka.id = 1
        tanaka.name = "田中"
        tanaka.createdAt = NSDate().timeIntervalSince1970
        try! realm.write {
            realm.add(tanaka)
        }
        
        //作成
        let yamada = User()
        yamada.id = 2
        yamada.name = "山田"
        yamada.createdAt = NSDate().timeIntervalSince1970
        try! realm.write {
            realm.add(yamada)
        }
        
        //作成
        let suzuki = User()
        suzuki.id = 3
        suzuki.name = "鈴木"
        suzuki.createdAt = NSDate().timeIntervalSince1970
        try! realm.write {
            realm.add(suzuki)
        }
        
        //参照
        let users = realm.objects(User.self).filter("id != 0").sorted(byKeyPath:"id")
        for user in users {
            print(user.name)
        }
        
        //更新
        let hoge = realm.objects(User.self).last!
        try! realm.write {
            hoge.name = "ほげ"
        }
        
        //参照
        for user in realm.objects(User.self).filter("id != 0").sorted(byKeyPath:"id") {
            print(user.name)
        }
        
        //削除
        let lastUser = realm.objects(User.self).last!
        try! realm.write {
            realm.delete(lastUser)
        }
        
        //参照
        for user in realm.objects(User.self).filter("id != 0").sorted(byKeyPath:"id") {
            print(user.name)
        }
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
```

## サンプルファイル

掲載予定

## Ref
[Xcode9 で Alcatraz を入れる方法](https://qiita.com/YamagishiRyu/items/5667ea8b87beb4792469)


### Ref Official
* [CocoaPods memo](https://realm.io/jp/docs/swift/latest/)
* [Alcatraz memo](https://qiita.com/YamagishiRyu/items/5667ea8b87beb4792469)

### Ref Qiita
* [RealmSwiftをCocoaPodsで導入する](https://qiita.com/rtryoda/items/8de5f8e48a8cfe1d3163)

### Ref:Sample
* [Swift3でRealmSwift（サンプルあり）](https://qiita.com/koji-nishida/items/99efb572ef7d809bb2c1)