＜CocoaPods＞SwiftでmBaaSを始めよう！

【お知らせ】こちらのドキュメントは古くなっています。最新版をご覧ください▼
[__＜CocoaPods＞SwiftでmBaaSを始めよう！(use_framewoks!を有効にした方法)__](http://qiita.com/natsumo/items/57d3a4d9be16b0490965)

# 【Swift×mBaaS】シリーズ概要
* Swiftで[ニフティクラウドmobile backend](http://mb.cloud.nifty.com/)(通称：mBaaS)を使ってSwiftで開発を始めたい人向けのドキュメントです。
* [ニフティクラウドmobile backendのiOS(Objectiv-C SDK)用ドキュメント](http://mb.cloud.nifty.com/doc/current/index.html)を__Swift__用に書き換えて動かしてみたものをまとめました。
* 初心者でもわかりやすいよう心掛けて作っていますが、わかりにくい部分がありましたらコメントをいただければ訂正しますのでお気軽にご意見をお願いします^^*
* 今回は__＜CocoaPods＞mBaaSを始めるためのSwift版クイックスタート編__です！
 * 注：＜framework形式＞での方法もありますが、Facebook連携などご利用予定がある場合は、[＜CocoaPods＞SwiftでmBaaSを始めよう！](http://qiita.com/natsumo/items/b2d18d87d57300c8d81c)での導入をおすすめします！
* 事前に[ニフティクラウドmobil backend](http://mb.cloud.nifty.com/)の登録とアプリの新規作成をしておいてください。

**★★★【NEW】もっと簡単に導入できるようになりました！★★★**
▼詳しくはこちら▼
[＜CocoaPods＞SwiftでmBaaSを始めよう！(use_framewoks!を有効にした方法)](http://qiita.com/natsumo/items/57d3a4d9be16b0490965)

# 手順
## 1. XcodeでSwiftのプロジェクトを作成する
* 既存のプロジェクトを使う場合はとばして下さい。
* 作成方法はさまざまなサイトや本に書いてあるかと思いますが、一応簡単なプロジェクトの作成方法を載せておきます。
 * Xcodeを開き、「File」→「New」→「Project...」を選択します。
 * iOS下の「Application」→「Singl View Application」選択し、「Next」を選択します。
 * 「Product Name」を記入し、「Language」は「Swift」を選択してください。
 * できたら「Next」を選択すると、保存先選択画面が出るので適当な場所に保存をしてください。

## 2. CocoaPodsでiOS用SDKをインストールする
* ターミナルを起動します
 * ターミナルはアプリケーション一覧の「その他」の中にあります
 * 以下の操作でコマンドを入力します。`XXX :~ YYY $`のあとに続けて、指定のコマンドの`$`以降を入力してください。※`XXX`と`YYY`はユーザー名なのでそれぞれ異なります。ディレクトリを移動すると`~`の部分が変わります。

![スクリーンショット 2016-02-09 9.18.30.png](https://qiita-image-store.s3.amazonaws.com/0/112032/661396e2-e1c1-b22a-912f-54a4186d65bd.png)

* 1.で作成した新規あるいは既存のプロジェクト内の「プロジェクト名.xcodeproj」と同じディレクトリにターミナル上で移動します。（※__大事！__これをやっておかないと失敗します！！）
 * 次のコマンドを入力：`$ cd [指定ディレクトリ]`
* CocoaPodsを「__はじめて使う場合__」→ CocoaPodsを__インストール__する。
 * 次のコマンドを入力：`$ sudo gem install cocoapods`
* CocoaPodsを「__既にインストールしている場合__」→CocoaPodsの__バージョンアップ__をする。
 * 次のコマンドを入力：`$ sudo gem update --system`
* インストールが初めての場合あるいは、アップグレードして最初の起動の場合はセットアップをする。
 * 次のコマンドを入力：`$ pod setup`
* バージョン確認をします。
 * 次のコマンドを入力：`$ pod --version`
* バージョンが表示されればOK！
* Podfile（インストールするライブラリを指定するファイル）を作成します。
 * 次のコマンドを入力：`$ pod init`

 ![スクリーンショット 2016-02-09 9.36.14.png](https://qiita-image-store.s3.amazonaws.com/0/112032/6fddb9e2-ea71-3eb1-ac66-edab3dfc7893.png)

* 作成したPodfileを開いて、以下の内容を記述します。
 * 「__プロジェクト名__」の部分は、作成しているXcodeプロジェクトでSDKを利用するプロジェクト名を記入してください。

```lang:Podfile
platform :ios,'8.0'

target "プロジェクト名" do
   pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git'
end
```

* workspaceを作成します。
 * 次のコマンドを入力：`$ pod install --no-repo-update`
* 作成された「プロジェクト名.xcworkspace」をダブルクリックしてXcodeを開きます。

## 3.ヘッダファイルを作成する
* CocoaPodsでインストールしたSDKをSwiftから利用できるようにするためにはヘッダーファイルを作成する必要があります。
* 先ほど開いたXcode左側のファイル一覧から、`AppDelegate.swift`ファイルと同じディレクトリに`XXXXXXX-Bridging-Header.h`を作成してください。※XXXXXXXのところは任意です。プロジェクト名とかを入れておくといいです。
 * `AppDelegate.swift`上で右クリックし→「New File...」を選択→iOS下の「Source」を選択→「Header File」を選択→「Next」をクリックするとファイル名を入力する画面が出ますので、「Save As:」の欄に「XXXXXXX-Bridging-Header」を記入「Create」をクリックするとファイルが作成されます。

* 作成したファイルの中に下記の内容を追記してください。

```lang:XXXXXXX-Bridging-Header.h
#import <NCMB/NCMB.h>
```
## 4.`XXXXXXX-Bridging-Header.h`ファイルをプロジェクトに読み込む
* 「Build Settings」をクリックしてください。
* 「Objective-C Bridging Header」をダブルクリックすると入力用のふきだしが出てくるので、`XXXXXXX-Bridging-Header.h`をドラッグ＆ドロップしてください。
* `XXXXXXX-Bridging-Header.h`のディレクトリが入力されたことを確認してください。
 * 例）`User/*****/Documents/**user**/pushTest/pushTest/XXXXXXX-Bridging-Header.h`

![032.png](https://qiita-image-store.s3.amazonaws.com/0/112032/8cb80a89-8841-3ed8-a7b9-f76a98936f59.png)

_(2016/06/23更新)_



## 5. `AppDelegate.swift`を編集する
* [ニフティクラウドmobil backend](http://mb.cloud.nifty.com/)を使うために必要なAPIキーの設定とSDKの初期化処理は`AppDelegate.swift`ここに書いておきます。
* またデータストアにデータを上げるサンプルコードもここに書くことで起動時にデータを保存できます。
* 下記のコードを`AppDelegate.swift`に貼り付けてください。
* そのとき、２つのAPIキーを[ニフティクラウドmobil backend](http://mb.cloud.nifty.com/)のダッシュボード上からコピーして書き換えてください。(※アプリケーションキーとクライアントキーをそれぞれ「YOUR_NCMB_APPLICATIONKEY」と「YOUR_NCMB_CLIENTKEY」の部分に書きます。)

```swift:AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    //********** APIキーの設定 **********
    let applicationkey = "YOUR_NCMB_APPLICATIONKEY"
    let clientkey      = "YOUR_NCMB_CLIENTKEY"
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        //********** SDKの初期化 **********
        NCMB.setApplicationKey(applicationkey, clientKey: clientkey)
    
        //********** データストアにデータを保存 **********
        let query = NCMBQuery(className: "TestClass")
        query.whereKey("message", equalTo: "Hello, NCMB!")
        query.findObjectsInBackgroundWithBlock{(NSArray objects, NSError error) in
            if error == nil {
                if objects.count > 0 {
                    let message = objects[0].objectForKey("message") as! NSString
                    print("[FIND] \(message)")
                } else {
                    var saveError: NSError?
                    let obj = NCMBObject(className: "TestClass")
                    obj.setObject("Hello, NCMB!", forKey: "message")
                    obj.save(&saveError)
                    if(saveError == nil) {
                        print("[SAVE] Done.")
                    } else {
                        print("[SAVE ERROR] \(saveError)")
                    }             
                }
            } else {
                print(error.localizedDescription)
            }
        }
        return true
    }
}
```
* 実行し、[ニフティクラウドmobil backend](http://mb.cloud.nifty.com/)のダッシュボードからデータストアを見ると、データが保存されたことが確認できます。


### 参考
####ターミナルでよく使うコマンド

```lang:ターミナル
# 現在のフォルダ内のファイル表示
$ ls
# 現在のディレクトリの表示
$ PWD
# 指定ディレクトリに移動
$ cd [指定ディレクトリ]
```

####参考にしたサイト
* SDKのインストール
 * http://www.atmarkit.co.jp/ait/articles/1403/08/news008.html
 * https://ideacloud.co.jp/dev/cocoapods_install.html
* Objectiv-CをSwiftに書き換える部分
 * http://qiita.com/VirgomanBros/items/294c456de28ccd311644
* frameworkの読み込み
 * http://qiita.com/skatata/items/1facd024d239b9545031