Parseを利用したiOSアプリケーションの試作（第一回）


## はじめに
MBaaS(MobileBackend as a Service)である"[Parse](https://parse.com/)"を利用してiOSアプリケーションを作成してみます。
私は、少し前から独学でプログラミングをはじめた初心者です。記事を作成するにあたり、誤った記載などがあるかもしれません。もしそのような内容を見つけられた場合には、コメントなどでご指摘いただけると幸いです。

当記事は、以下のような人を対象として記載しています。

- [ドットインストール](http://dotinstall.com/)の[iPhoneアプリ開発入門 (全13回)](http://dotinstall.com/lessons/basic_iphoneapp_v2)を見終えて、これから何か作ろうとしている人
- 初心者向けのiPhoneアプリケーション作成の本を読み終えて、簡単なクライアントアプリは作れる人

上述のような人を対象としているため、全くXcodeを触ったことがない人が読むと、StoryBoardの使い方などがわからず、アプリ制作が嫌になってしまう恐れがあります。初心者向けの本を一冊やるか、ドットインストールなどのサービスで一通り学習してみてください。

オススメは、以下の本です。書籍後半にはゲームを作れるSpriteKitについての記載もあり、楽しく学習できると思います。

- [Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&amp;Xcode 6対応】](http://www.amazon.co.jp/gp/product/4839953538/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=4839953538&amp;linkCode=as2&amp;tag=moco3-22])

## Parseとは
Parseは、2013年にFacebookに買収されたことでも注目を浴びた、世界最大級のMBaaSです。簡単に言うと、ParseのSDKを用いることで、サーバにデータを保存するために書かなきゃいけない"あれやこれや"をサクッと書けるようにしてくれるサービスです。Parse以外には、以下のようなMBaaSがあるようです。

- [Firebase](https://www.firebase.com/)
- [Mobile Apps](http://azure.microsoft.com/ja-jp/services/app-service/mobile/)
- [NIFTY Cloud](http://cloud.nifty.com/)

MBaaSについて詳しくまとめてくださっている方がいらっしゃるので、こちらをご参照ください。

- [個人のスマホアプリ開発者がParseを使うべき15の理由](http://qiita.com/koyopro/items/b9891aa7bb596b958d7e)
- [mBaaSまとめてみた](http://qiita.com/osamu1203/items/d7d2206cc079092d07c4)

## これから作るもの
これから3回に分けて、以下のような機能をもったアプリケーションを作成したいと思います。

- Emailによるログイン機能
- 文字や画像を投稿し、それらを閲覧できる機能

第一回の目標は、Xcodeを利用してParseのライブラリをインポートし、サーバに接続できることを確認します。

## Parseの登録
Parseを利用するためには、まずParseのサービスに登録する必要があります。登録は、[Parse](https://www.parse.com/)の画面右上の"Sign up for Free"から簡単に登録できます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/8f3d57d8-9cd0-31e0-969b-97ed5f9c3c14.png" width="640" />

登録が完了すると、アプリケーションが作成できるようになっていると思います。メニューの"+Create App"から新規アプリケーションを作成します。アプリケーションの名前は、"ParseSample01"にしています。

<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/785f1df8-f2e7-23ba-1649-8b6857025da7.png" width="320" />

作成が完了すると、Parseに接続するためのキーなどが表示されます。"Quickstart Guide"をクリックし、ご自分の環境に合わせて画面を進めてください。

<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/03c0fd77-ee25-cac5-1912-e45e8cd38496.png" width="320" />


- Data  
<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/cd15e726-75ba-7c73-339a-2283cf343a45.png" width="500" />

- Mobile  
<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/fb97bd37-e5eb-8082-0185-5c4b7ef77935.png" width="500" />


- iOS  
<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/65a2d780-1cac-41db-c29d-ebbbb9207945.png" width="500" />

- Swift  
<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/3765dae9-7d84-23f6-4b70-0df991187c13.png" width="500" />

- Existing project  
<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/2c8c86ff-ef5b-7968-c076-e0499c0c0df3.png" width="500" />

選択し終えると、以下のような画面が表示されていると思います。今回は、Parse社にて用意されている"Download the blank Xcode Project(parse-starter-project)"は使用せず、Xcodeから新規にプロジェクトを作成し、Parseへの接続を行います。
<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/833f7ff0-aeb5-e7eb-4d77-ac8223188e89.png" width="640" />


## Parse Liberaryの導入
プロジェクト作成前に、下記リンクから最新のParseSDKをダウンロードしておきます。
[Parse - Parse Library(最新)](https://www.parse.com/downloads/ios/parse-library/latest)

ダウンロードが完了したらXcodeを立ち上げ、新規プロジェクト(Single View Application)を作成し、プロジェクトにParseのフレームワークを追加していきます。まず、以下のようにプロジェクトを作成しました。

<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/99f8393a-bdf2-83f0-2c8d-9f27899be86e.png" width="640" />

フレームワークは以下のようにドラッグで追加するか、"Linked Frameworks and Libraries"の"Add other"から追加してください。

<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/c23dc894-3bb6-e731-bfa9-d1be377f2cb0.png" width="640" />


Libraryは、プロジェクトにコピーしておくと良いでしょう。

<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/d9676548-24e0-05aa-7c0f-88ea8b60cc69.png" width="640" />

※Frameworksフォルダを作成するには、プロジェクト名を右クリックし、"New Group"をクリックして下さい。

<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/defaa2ba-23cc-2861-32ee-9a30c0eafdea.png" width="320" />

合わせて、Parseが使用するiOS標準のフレームワークも追加します。

- AudioToolbox.framework
- CFNetwork.framework
- CoreGraphics.framework
- CoreLocation.framework
- QuartzCore.framework
- MobileCoreServices.framework
- Security.framework
- StoreKit.framework
- SystemConfiguration.framework
- libz.dylib
- libsqlite3.dylib

これでフレームワークの追加は完了です。

## Parseへの接続確認
ここでは、Parseで用意されているテスト機能を利用して接続が行えているか確認します。
Parseでアプリケーションを作成後に表示される"Install the SDK"の下部に表示されている"Test"機能を用います。
<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/6e4ee382-d2f6-a65b-4456-a9b02f0c60b0.png" width="640" />

当該のテストは、作成したアプリケーションからParseに接続し、PFObjectが保存できるかどうかを試すものです。"Test the SDK"にあるとおり、"AppDelegate"にアプリケーションのキーを設定し、ViewControllerにParseへオブジェクトを保存する処理を記述します。"import Parse"を忘れると"Use of unresolved identifier 'PFObject'"と怒られてしまうので、注意してください。
以下がテストを行うためのコードです。（※キーの部分はご自身の環境に合わせて書き換えてください）

### AppDelegate.swift
<pre><code>
import UIKit
import Parse

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -&gt; Bool {

    Parse.setApplicationId("Your-Application-ID",
    clientKey: "Client-Key")

    return true
  }

  func applicationWillResignActive(application: UIApplication) {
  }
  func applicationDidEnterBackground(application: UIApplication) {
  }
  func applicationWillEnterForeground(application: UIApplication) {
  }
  func applicationDidBecomeActive(application: UIApplication) {
  }
  func applicationWillTerminate(application: UIApplication) {
  }
}
</code></pre>
### ViewController.swift
<pre><code>
import UIKit
import Parse

class ViewController: UIViewController {

override func viewDidLoad() {
  super.viewDidLoad()

  let testObject = PFObject(className: "TestObject")

  testObject["name"] = "moco"
  testObject["age"] = 27

  testObject.saveInBackgroundWithBlock { (success: Bool, error: NSError?) -&gt; Void in
  println("Object has been saved.")
  }
}

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }
}
</code></pre>
実行後、Parseの"Test"ボタンをクリックすると、以下のように表示されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/70446/6a79363f-0d06-5831-605e-319b3ae17948.png" width="640" />

これでテストはクリアです。

Parseの管理画面では、保存されたデータが確認ができたり、メール認証機能があったりするので、時間のあるときにを眺めてみてください。
次回は、ちょっとしたデータを保存できるようにしてみたいと思います。

## GitHub
[https://github.com/kazuyatamakoshi/ParseSample01](https://github.com/kazuyatamakoshi/ParseSample01)

## 参考
- [Parse](https://parse.com/)
- [Parse - iOSガイド](https://parse.com/docs/jp/ios/guide)
- [Parse - Parse Library(最新)](https://www.parse.com/downloads/ios/parse-library/latest)
- [個人のスマホアプリ開発者がParseを使うべき15の理由](http://qiita.com/koyopro/items/b9891aa7bb596b958d7e)
- [mBaaSまとめてみた](http://qiita.com/osamu1203/items/d7d2206cc079092d07c4)