ニフクラmBaaSお役立ちブログ

スマホアプリ開発にニフクラmBaaS。アプリ開発に役立つ情報をおとどけ!

ニフティクラウドmobile backendに触れてみよう!(iOS準備&データストアデモ)

前回ニフティクラウド mobile backendのアカウントを取得してアプリを作成するまでを解説しました。今回はiOS向けにXcodeの設定と簡単にストレージ機能を試用するまでを解説したいと思います。なお、はじめる前にニフティクラウド mobile backendのアカウントと、アプリのアプリケーションキー、クライアントキーを取得しておいてください(手順は前回の記事をご覧ください)。

SDKのダウンロード

まずニフティクラウドmobile backendのSDKをダウンロードしましょう。iOS用SDKはこちらからダウンロードできます。なおこの記事を書いている時点での最新バージョンは1.2.5になります。

ダウンロードした後、解凍するとframeworkファイルが確認できます。

ファイルを解凍
ファイルを解凍

Xcodeで新規プロジェクト作成

まずは試用ということでXcodeで新しいプロジェクトを作成します。Single View Applicationとして作成しています。

新規プロジェクト作成
新規プロジェクト作成
新しいプロジェクトに、先ほど解凍したframeworkをコピーします。

frameworkをコピー
frameworkをコピー

フレームワークの追加

次に必要なフレームワークを追加します。

フレームワークの追加
フレームワークの追加
必要なフレームワークは以下の4つです。

  • SystemConfiguration.framework
  • MobileCoreServices.framework
  • AudioToolbox.framework
  • CoreLocation.framework(位置情報を扱う場合のみ)

32bitへの修正

現在のSDKは64bitに対応していません。そのためコンパイル時の修正をします。 Build SettingsArchitectures$(ARCHS_STANDARD_32_BIT) とします。

アーキテクチャの修正
アーキテクチャの修正

CocoaPodsの導入

さらに依存しているライブラリのJSONKitおよびFacebook iOS SDKを追加します。なお、JSONKitはCocoaPodsに対応していないので次のようなファイルを JSONKit.podspec として作成します。

Pod::Spec.new do |s|
  s.name     = 'JSONKit'
  s.version  = '1.5'
  s.license  = 'BSD / Apache License, Version 2.0'
  s.summary  = 'A Very High Performance Objective-C JSON Library.'
  s.homepage = 'https://github.com/heroims/JSONKit'
  s.author   = 'John Engelhart'
  s.source   = { :git => 'https://github.com/johnezang/JSONKit' }
  s.source_files   = 'JSONKit.*'
end

後はプロジェクトルートにPodfileを作成します。

post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['CLANG_WARN_DIRECT_OBJC_ISA_USAGE'] = 'YES'
        end
    end
end
platform :ios, '7.0'

pod 'JSONKit', podspec: './JSONKit.podspec'
pod 'Facebook-iOS-SDK'

上半分はJSONKitが foo->isa といった記述を行っているためにエラーを回避するための記述です。

これらを記述したら、 pod install を実行します。

$ pod install
Analyzing dependencies

Downloading dependencies
Installing Facebook-iOS-SDK (3.13.1)
Using JSONKit (1.5)
Generating Pods project
Integrating client project

これで準備は完了です。結果として以下のようなファイル構成になります。

ファイル構成
ファイル構成

Xcode起動

CocoaPodsを使っていますので、*.xcworkspaceファイルを実行します。

Xcodeの画面
Xcodeの画面
立ち上がったら、 AppDelegate.m を修正します。まず、フレームワークをインポートします。

#import <NCMB/NCMB.h>

次に didFinishLaunchingWithOptions を修正します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    [NCMB setApplicationKey:@"your_application_key" clientKey:@"your_client_key"];

    NCMBQuery *query = [NCMBQuery queryWithClassName:@"TestClass"];
    [query whereKey:@"message" equalTo:@"test"];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (error == nil) {
            if ([objects count] > 0) {
                NSLog(@"[FIND] %@", [[objects objectAtIndex:0] objectForKey:@"message"]);
            } else {
                NSError *saveError = nil;
                NCMBObject *obj = [NCMBObject objectWithClassName:@"TestClass"];
                [obj setObject:@"Hello, NCMB!" forKey:@"message"];
                [obj save:&saveError];
                if (saveError == nil) {
                    NSLog(@"[SAVE] Done");
                } else {
                    NSLog(@"[SAVE-ERROR] %@", saveError);
                }
            }
    } else {
            NSLog(@"[ERROR] %@", error);
    }
    }];
    return YES;
}

これで準備は終わりです。

修正後
修正後

実行してみる

では実際にビルドしてみましょう。まず初回の実行時には次のように表示されるはずです。

2014-04-08 18:09:36.207 NiftyMB-Test[13863:60b] [SAVE] Done

つまりこれは下記のコードの部分になります。

      :
    [query whereKey:@"message" equalTo:@"test"];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (error == nil) {
            if ([objects count] > 0) {
                NSLog(@"[FIND] %@", [[objects objectAtIndex:0] objectForKey:@"message"]);
            } else {
                NSError *saveError = nil;
                NCMBObject *obj = [NCMBObject objectWithClassName:@"TestClass"];
                [obj setObject:@"Hello, NCMB!" forKey:@"message"];
                [obj save:&saveError];
                if (saveError == nil) {
                    NSLog(@"[SAVE] Done");
      :

キーがmessageのカラムをtestという値で検索し、その結果がエラーではなかったけれど、オブジェクトがなかったのでそのまま Hello NCMB! という値で保存処理を実行しています。

では実際にニフティ mobile backendの管理画面で確認してみましょう。データストアのタブで確認できます。

管理画面
管理画面
確かに Hello NCMB! というメッセージが確認できました。

次に上記の処理にもあるように test という値を作成してみましょう。管理画面上で新しいレコードを追加します。

空のデータ
空のデータ
追加されたら message の値をダブルクリックすると編集できるようになります。

編集中
編集中
ここでは文字列ですが、他にも数字、配列、緯度経度、オブジェクトなどが扱えるようになっています。

編集完了
編集完了
レコードの追加が終わったら、改めてビルドしてみましょう。

2014-04-08 18:18:42.643 NiftyMB-Test[13997:60b] [FIND] test

実行後
実行後
ログにFINDと出ればデータが見つかったということです。

オフラインの場合

ちなみにネットワークに繋がっていない場合は次のように表示されます。

2014-04-08 18:20:38.642 NiftyMB-Test[14045:60b] [ERROR] Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo=0xa84ffb0 {NSErrorFailingURLStringKey=https://mb.api.cloud.nifty.com/2013-09-01/classes/TestClass?where=%7B%22message%22:%22test%22%7D, NSErrorFailingURLKey=https://mb.api.cloud.nifty.com/2013-09-01/classes/TestClass?where=%7B%22message%22:%22test%22%7D, NSLocalizedDescription=The Internet connection appears to be offline., NSUnderlyingError=0xa84f4a0 "The Internet connection appears to be offline."}

このエラーメッセージを見て、メッセージを出せば良さそうです。


いかがでしょうか。CocoaPodsを使えば簡単にセットアップできます。さらに実際の利用についてもクラウドであることを殆ど意識せずにできてしまいます。 無料ではじめられます ので、ぜひ触ってみてください!なお、今回のコードはGitHubに公開してありますのでご覧ください。