前回はニフティクラウド mobile backendのアカウントを取得してアプリを作成するまでを解説しました。今回はiOS向けにXcodeの設定と簡単にストレージ機能を試用するまでを解説したいと思います。なお、はじめる前にニフティクラウド mobile backendのアカウントと、アプリのアプリケーションキー、クライアントキーを取得しておいてください(手順は前回の記事をご覧ください)。
SDKのダウンロード
まずニフティクラウドmobile backendのSDKをダウンロードしましょう。iOS用SDKはこちらからダウンロードできます。なおこの記事を書いている時点での最新バージョンは1.2.5になります。
ダウンロードした後、解凍するとframeworkファイルが確認できます。
Xcodeで新規プロジェクト作成
まずは試用ということでXcodeで新しいプロジェクトを作成します。Single View Applicationとして作成しています。
フレームワークの追加
次に必要なフレームワークを追加します。
- SystemConfiguration.framework
- MobileCoreServices.framework
- AudioToolbox.framework
- CoreLocation.framework(位置情報を扱う場合のみ)
32bitへの修正
現在のSDKは64bitに対応していません。そのためコンパイル時の修正をします。 Build Settings
の Architectures
を $(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ファイルを実行します。
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の管理画面で確認してみましょう。データストアのタブで確認できます。
次に上記の処理にもあるように test という値を作成してみましょう。管理画面上で新しいレコードを追加します。
2014-04-08 18:18:42.643 NiftyMB-Test[13997:60b] [FIND] test
オフラインの場合
ちなみにネットワークに繋がっていない場合は次のように表示されます。
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に公開してありますのでご覧ください。