Swift2.0でCouchbase Liteを動かす


## 概要
[Couchbase Lite](http://www.couchbase.com/nosql-databases/couchbase-mobile)はモバイル用のNoSQLデーターベースです。
[iOS版](https://github.com/couchbase/couchbase-lite-ios)はObjective-Cで記述されたライブラリですが、Swiftアプリケーションからも利用出来ます。

Swift2.0でCouchbase Liteを動かす手順を書きます。


## 動作環境

- Xcode 7.2
- OS X El Capitan (10.11.2)

CocoaPodsがインストールされている事が前提です。

## プロジェクトの作成
Xcodeのメニューから [File] > [New] > [Project] を選択
今回はシンプルな Single View Application を選択します。

![cb1.png](https://qiita-image-store.s3.amazonaws.com/0/105258/c9071b22-c659-6335-137a-3cafc0ad9df8.png "cb1.png")

Language に Swift を選択します。

![cb2.png](https://qiita-image-store.s3.amazonaws.com/0/105258/abf25fcc-970a-463d-31fc-d7b833a42330.png "cb2.png")

プロジェクトを作成したら一度 Xcode を終了します。

## Couchbase Liteのインストール
[CocoaPods](https://cocoapods.org/?q=on%3Aios%20couchbase)経由でインストールするのが簡単です。



ターミナルから、先ほど作成したプロジェクトディレクトリに移動してPodfileを作成します。

```Bash
$ cd /path/to/your/app
$ pod init
```

Podfileをエディタで開いて `couchbase-lite-ios` を追加します。
バージョンは[CocoaPods](https://cocoapods.org/?q=on%3Aios%20couchbase)のサイトで確認出来ます。クリップボードアイコンをクリックするとコマンドをコピー出来ます。

```Podfile
target 'Sample' do
  pod 'couchbase-lite-ios', '~> 1.1'
end
```

ターミナルから下記コマンドを実行してCouchbase Lite をインストールします。

```Bash
$ pod install
```

Podsディレクトリとワークスペースファイル(*.xcworkspace)が生成されます。

![cb3.png](https://qiita-image-store.s3.amazonaws.com/0/105258/f63533ec-99f0-2a3e-672d-a08edfa96559.png "cb3.png")

## Xcodeの設定
生成されたワークスペースファイルをダブルクリックしてXcodeを起動します。

### ビルド確認
実機の場合、Couchbase Liteのバージョンによっては、下記のようなエラーが出る場合があります。
シミュレータの場合は関係ありません。

>ld: 'CouchbaseLite' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target.

その場合は [Build Settings] > [Build Options] > [Enable Bitcode] を NO にしてください。

![cb4.png](https://qiita-image-store.s3.amazonaws.com/0/105258/aa567458-f8df-f09d-363f-6d678a3bb777.png "cb4.png")

[Re-release 1.1.1 built with Xcode 7, for bitcode support](https://github.com/couchbase/couchbase-lite-ios/issues/916)

### ブリッジヘッダーの作成
SwiftからObjectiveCのコードを参照するには、ブリッジヘッダーを用意する必要があります。
[Build Settings] > [Swift Compiler - Code Generation] > [Objective-C Bridging Header] でブリッジヘッダーを指定しますが、簡単な方法があります。

Xcodeのメニューから [File] > [New] > [File] を選択
Objective-C File を選択します。

![cb5.png](https://qiita-image-store.s3.amazonaws.com/0/105258/a919ae93-ada4-444d-3dc8-04b2205bc300.png "cb5.png")

ファイル名は後で削除するので適当で構いません。

![cb6.png](https://qiita-image-store.s3.amazonaws.com/0/105258/7f97197e-4a05-bafc-d1b3-3d3e0743fee9.png "cb6.png")

[Create Bridging Header]を選択します。

![cb7.png](https://qiita-image-store.s3.amazonaws.com/0/105258/5999feba-d75c-22f3-0763-9dda23dee039.png "cb7.png")

プロジェクトにブリッジヘッダーが追加され設定も反映してくれます。
作成したObjective-Cファイルは削除します。

ブリッジヘッダーにCouchbase Lite のヘッダーをインポートします。

```Sample-Bridging-Header.h
//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import <CouchbaseLite/CouchbaseLite.h>
```

以上でCouchbase Lite が使える準備が整いました。

## テストコード
実際に使えるかどうか、簡単なテストコードを書いてみます。
Swift2.0の記述なのでご注意ください。

```ViewController.swift
import UIKit

class ViewController: UIViewController {

    var database: CBLDatabase?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        do {
            try test()
        } catch let error {
            print("\(error)")
        }
    }

    func test() throws {
        let manager = CBLManager.sharedInstance()
        try self.database = manager.databaseNamed("test")
        
        let properties = [
            "name": "taro",
            "age": 30
        ]
        let doc = self.database?.createDocument()
        
        let ret = try doc?.putProperties(properties)
        print("ドキュメントID=\(ret!.document!.documentID)")
        
        let count = self.database?.documentCount
        print("ドキュメント件数=\(count!)")
    }
}
```

ビルドして実行してみます。
デバッグコンソールに登録したドキュメントIDとデータベース内のドキュメント件数が表示されます。
アプリを終了して再実行すると、ドキュメント件数が増えているのが確認出来るはずです。

## 最後に
2015年12月、Swiftがオープンソースとして公開されました。
今後ますますSwiftコードで書かれたアプリケーションが増えていくでしょう。

[Couchbase Mobile Develop](http://developer.couchbase.com/documentation/mobile/1.1.0/develop/guides/couchbase-lite/index.html)サイトには、Swiftコードのサンプルが豊富にあります。
参考にしてみてください。