＜CocoaPods＞SwiftでmBaaSを始めよう！(use_framewoks!を有効にした方法)

__【お知らせ】Swift3に対応しました！（2017/02/23更新）__

# 概要
* この記事はSwiftアプリに[ニフクラ mobile backend ](http://mb.cloud.nifty.com/)(mBaaS)を導入する方法について書いた記事『[＜CocoaPods＞SwiftでmBaaSを始めよう！](http://qiita.com/natsumo/items/b2d18d87d57300c8d81c)』のリニューアル版です！！
* さらに簡単にmBaaSが導入できましたのでその方法をご紹介します('▼'*！！！

# 準備するもの
* Mac
 * OS X 10.10(Yosemite)で動作確認しています
* Xcode7, **Xcode8**
 * Ver. 7.2.1, **Ver.8.2.1** で動作確認しています
* [ニフクラ mobile backend ](http://mb.cloud.nifty.com/)の登録とアプリの新規作成


※使用した環境を記載しています
※上記環境以上でないと動作しない可能性があります。古い環境の場合は、[＜CocoaPods＞SwiftでmBaaSを始めよう！](http://qiita.com/drafts/b2d18d87d57300c8d81c)（use_framewoks!を使用しない導入方法）をお試しください！

# 手順
## 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プロジェクト名を記入してください

```rb:Podfile
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
# Uncomment this line if you're using Swift
use_frameworks!

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

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


## 3. インストールしたSDKを読み込む
* `AppDelegate.swift`ファイルの`import UIKit`の下に、下記の内容を追記します

```swift:共通_AppDelegate.swift
import NCMB
```
※**【注意】ViewController.swiftなど他のファイルでSDKを使用する場合は、その対象ファイルにも上記を追記する必要があります！**

## 4. `AppDelegate.swift`を編集する
* [ニフクラ mobile backend ](http://mb.cloud.nifty.com/)を使うために必要なAPIキーの設定とSDKの初期化処理は`AppDelegate.swift`ここに書いておきます

* 下記のコードを`AppDelegate.swift`に貼り付けてください
* そのとき、２つのAPIキーを[ニフクラ mobile backend ](http://mb.cloud.nifty.com/)のダッシュボード上からコピーして書き換えてください(※アプリケーションキーとクライアントキーをそれぞれ「`YOUR_NCMB_APPLICATIONKEY`」と「`YOUR_NCMB_CLIENTKEY`」の部分に書きます)

```swift:Swift3_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: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        //********** SDKの初期化 **********
        NCMB.setApplicationKey(applicationkey, clientKey: clientkey)
        //▼▼▼起動時に処理される▼▼▼

        //▲▲▲起動時に処理される▲▲▲
        return true
    }
}
```

```swift:Swift2_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 {
        //********** SDKの初期化 **********
        NCMB.setApplicationKey(applicationkey, clientKey: clientkey)
        //▼▼▼起動時に処理される▼▼▼

        //▲▲▲起動時に処理される▲▲▲
        return true
    }
}
```

## 5. mBaaSのコードを試してみよう！
* `//▼▼▼起動時に処理される▼▼▼`と`//▲▲▲起動時に処理される▲▲▲`の間に[ニフクラ mobile backend ](http://mb.cloud.nifty.com/)のコードを書いてみましょう。didFinishLaunchingWithOptionsは起動時に実行されるメソッドなので、アプリを実行すると動作確認が可能です。
* 下記のサンプルはデータストアにデータを上げるサンプルコードです。実際に書いて（コピペして）実行してみましょう！

```swift:Swift3_AppDelegate.swift
//********** データストアにデータを保存 **********
let obj = NCMBObject(className: "TestClass")
obj?.setObject("Hello, NCMB!", forKey: "message")
obj?.saveInBackground({ (error) in
    if error != nil {
        // 保存に失敗した場合の処理
    }else{
        // 保存に成功した場合の処理
    }
})
```

```swift:Swift2_AppDelegate.swift
//********** データストアにデータを保存 **********
let obj = NCMBObject(className: "TestClass")
obj.setObject("Hello, NCMB!", forKey: "message")
obj.saveInBackgroundWithBlock { (error: NSError!) -> Void in
    if error != nil {
        // 保存に失敗した場合の処理
    }else{
        // 保存に成功した場合の処理
    }
}
```

* 実行し、[ニフクラ mobile backend ](http://mb.cloud.nifty.com/)のダッシュボードからデータストアを見ると、データが保存されたことが確認できます♪♪