IBM Mobile Data for Bluemix サービスを利用して iOS アプリを作成する

2014年 10月 02日
PDF (922 KB)
 
author photo - kevan holdaway

Kevan Holdaway

Software Engineer, IBM Mobile Cloud Services

Find me on LinkedIn

author photo - belinda johnson

Belinda Johnson

Software Engineer, IBM Mobile Cloud Services

@BeeMarieJohnson

author photo - nick gibson

Nick Gibson

Software Engineer, IBM Mobile Cloud Services

@ndgibs on Twitter
Follow me on Google+

IBM Bluemix™ にサインアップ
無償のサービス、ランタイム、インフラを含むクラウド・プラットフォームが、新たなモバイルやウェブ・アプリのクイックな構築とデプロイを実現します。

皆さんは既に Bluemix を使用するメリットをいくつかご存知のことでしょう。Bluemix は、モバイル・アプリケーションと Web アプリケーションを開発、デプロイするための IBM のオープン・プラットフォームです。Bluemix には、あらかじめビルドされたサービスが数多く用意されていて、開発者が簡単にアプリケーションの作成や機能強化を行えるようになっています。このチュートリアルでは、そのようなサービスの 1 つとして用意されている IBM Mobile Data for Bluemix サービスを利用して iOS アプリケーションを作成する手順を説明します。

皆さんは、奥様または旦那様にあの素晴らしいスフレを作ってもらうために食料品店に行ったところ、レシピに必要な材料を正確に思い出せなかったことはありませんか?あるいは、次の日のお弁当にデザートを入れて欲しいと子供たちにリクエストされたことはありませんか?そんなとき、家族で共有している食料品リストに、奥様や旦那様あるいは子供たちが自分たちのリクエストを入力すると、リストが更新されたことを知らせるプッシュ通知を受信できるとしたらどうでしょう?

そこで登場するのが、BlueList アプリケーションです。BlueList アプリケーションは単純な iOS アプリケーションであり、このアプリケーションのオブジェクトをクラウド上に保管して、そのオブジェクトに対して削除、更新、クエリーを実行できるように、アプリケーションに IBM Mobile Data for Bluemix サービスを追加します。今後のチュートリアルでは IBM Push for Bluemix サービスと IBM Cloud Code for Bluemix サービスを追加する方法を説明します。これらのサービスを追加すれば、食料品リストが更新されると通知を受けられるようにすることや (IBM Push for Bluemix サービス)、いずれかの端末によってリストが何らかの方法で更新されると、すべての端末上でリストが更新されるようにすること (IBM Cloud Code for Bluemix サービス) が可能になります。

このシンプルなアプリケーションでは Bluemix サービスを利用して、独自の (より複雑な) アプリケーションを瞬く間に作成できるようになっています。

bluelist-base (v0) コードは、BlueList アプリケーションの基本バージョンです。本チュートリアルでは、この基本バージョンに IBM Mobile Data for Bluemix サービスを追加する方法を説明します。サービスを追加した後のコードは bluelist-mobiledata (v1) コードと同様のコードになります。bluelist-base (v0) を出発点として手順に従っていくことも、直接 bluelist-mobiledata (v1) をダウンロードすることもできます。BlueList アプリケーションの bluelist-mobiledata (v1) バージョンには、IBM Mobile Data for Bluemix サービスが組み込まれています。

アプリケーションを作成するために必要となるもの

 
  • iOS 開発の基礎知識。Apple Developer のチュートリアル「Start Developing iOS Apps Today」に Xcode のインストール方法と基本的なアプリケーションの作成方法が説明されています。
  • bluelist-base (v0) コード。上記のボタンをクリックし、ご使用の開発環境に bluelist-base-iOS コードをインポートして組み込んでください。このコードをエミュレーターで実行してください。アプリケーションを再起動すると、リストの項目が維持されていないことがわかります。このチュートリアルの手順に従ってアプリケーションに IBM Mobile Data for Bluemix サービスを追加すると、リストの項目が維持されるようになります。
  • Bluemix の ID。IBM Mobile Data for Bluemix サービスを入手するために必要です。
  • オプション: CocoaPods の知識。CocoaPods フレームワークは、Xcode のプロジェクトに対するライブラリーの依存関係を管理します。このフレームワークを使用すると、BlueList アプリケーションに必要な依存関係が自動的にインポートされます。プロジェクトのルート・ディレクトリーには、依存関係を指定する Podfile が生成されます。CocoaPods をインストールして使用するための命令を理解してください。

ステップ 1: Bluemix 上で Mobile Cloud アプリケーションを作成する

 
  1. Bluemix にログインします。
  2. 「Create an Application (アプリケーションを作成)」をクリックして、カタログにアクセスします。 「Create an Application (アプリケーションを作成)」ボタンのスクリーン・ショット
  3. ボイラープレートの下にある「Mobile Cloud」をクリックします。 「Mobile Cloud」ボイラープレートのスクリーン・ショット
  4. 「Create Application (アプリケーションの作成)」をクリックします。 「Create Application (アプリケーションの作成)」ボタンがある Mobile Cloud アプリケーションのスクリーン・ショット
  5. 「Finish adding Mobile Cloud (Mobile Cloud の追加の完了)」パネルで、「Space (スペース)」を選択し、アプリケーションの名前を指定して、「CREATE (作成)」をクリックします。 「Create an Application (アプリケーションを作成)」ボタンのスクリーン・ショット
  6. アプリケーションを作成すると、ダッシュボードにそのアプリケーションが表示されます。新しいアプリケーションをクリックして、このアプリケーションの「OVERVIEW (概要)」ページを表示します。 「Create an Application (アプリケーションを作成)」ボタンのスクリーン・ショット

ステップ 2. SDK をインストールして構成する

 

: CocoaPods を使用した方法で SDK フレームワークのファイルをインストールする場合は、ステップ 1 からステップ 6 までをスキップして構いません。その場合、前提条件で触れた CocoaPod の命令に従って、サンプルに付属の Podfile を実行することになるはずです。

  1. 新しいアプリケーションの「OVERVIEW (概要)」ページが表示されたら、「Download SDKs (SDK のダウンロード)」をクリックします。
    「Download SDKs (SDK のダウンロード)」ボタンのスクリーン・ショット

    注: このチュートリアルに記載する手順では、後ほど上記アプリケーション ID が必要になります。

  2. モバイル・アプリケーションを作成するためのドキュメントが表示されます。ここでは、「iOS SDK」をクリックします。 「Download SDKs (SDK のダウンロード)」ボタンのスクリーン・ショット

    クリックして大きなイメージを見る

  3. Finder で IBMBluemix フレームワーク (<unzipped_location>/IBMBluemix.framework) を探します。このフレームワークを Frameworks フォルダー配下の BlueList Xcode プロジェクトにドラッグします。 このプロジェクトに追加するフレームワーク・ファイルのスクリーン・ショット
  4. 「Copy items into destination group's folder (if needed) (コピー先グループのフォルダーに項目をコピー (必要な場合))」にチェックを入れます。
  5. Finder でデータ IBMData SDK フレームワークを探します。IBMBluemix フレームワークの場合と同じように、このフレームワークを Frameworks フォルダー配下の BlueList Xcode プロジェクトにドラッグします。
  6. アプリケーションの「OVERVIEW (概要)」ページ上で applicationId、applicationSecret、および applicationRoute の値を含むように bluelist.plist ファイルに変更を加えます。(「OVERVIEW (概要)」ページにアクセスするには、Bluemix にログインして「DASHBOARD (ダッシュボード)」に進んで必要なアプリケーションをクリックすることで、「Download SDKs (SDK のダウンロード)」ページへと進みます。) 「Catalog (カタログ)」内のアプリケーションのスクリーン・ショット
  7. 注: Xcode を使用して新しい iOS アプリケーションを作成する場合、ビルド設定に -ObjC リンカー・フラグと -lsqlite3 リンカー・フラグを追加する必要があります。そのためには、アプリケーションのターゲットを選択し、「Build Settings (ビルド設定)」をクリックします。ここで「Other Linker Flags (他のリンカー・フラグ)」を探します。これが表示されない場合には、設定に「Basic (基本)」ではなく「All (すべて)」を選択してあることを確認します。このサンプル・プロジェクトには、これらのフラグをあらかじめ追加してあります。 このプロジェクトの Xcode ビルド設定のスクリーン・ショット

    クリックして大きなイメージを見る

ステップ 3. データ・サービスを利用するようにコードを変更する

 
  1. IBM_Item.h を開き、現在のコードを確認します。
    #import <Foundation/Foundation.h>
    
    @interface IBM_Item : NSObject
    
    @property(nonatomic, copy) NSString *name;
    
    @end
  2. スーパークラスを IBMDataObject に変更し、IBM_ItemIBMDataObjectSpecialization プロトコルに準拠させます。IBMDataObjectSpecialization プロトコルに準拠することにより、IBM_Item クラス内に IBMDataObjectSpecialization メソッドを実装することをコンパイラーに指示します。
    #import <Foundation/Foundation.h>
    #import <IBMData/IBMData.h>
    
    @interface IBM_Item : IBMDataObject <IBMDataObjectSpecialization>
    
    @property(nonatomic, copy) NSString *name;
    
    @end
  3. dataClassName メソッドを実装し、タイトル・プロパティーを dynamic とマーキングします。また、クラス・メソッドの初期化で特殊化を登録します。こうすることで、Objective-C クラス IBM_Item と、クラウドに保持される JSON クラス Item とのマッピングが作成されます。
    #import "IBM_Item.h"
    
    @implementation IBM_Item
    
    @dynamic name;
    
    +(void) initialize
    {
       [self registerSpecialization];
    }
    
    +(NSString*) dataClassName
    {
       return @"Item";
     }
    
    @end

ステップ 4. アプリケーション・デリゲートに Bluemix iOS SDK と IBM Mobile Data for Bluemix サービスをフックする

 
  1. 最初に、先ほど編集した plist ファイルからアプリケーション ID を読み取ります。

    リスティングを見るにはここをクリック

    #import <IBMBluemix/IBMBluemix.h>
    #import <IBMData/IBMData.h>
    #import "IBM_AppDelegate.h"
    
    @implementation IBM_AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        
        NSString *applicationId = nil;
        NSString *applicationSecret = nil;
        NSString *applicationRoute = nil;
        
        BOOL hasValidConfiguration = YES;
        NSString *errorMessage = @"";
        
        // Read the applicationId from the bluelist.plist.
        NSString *configurationPath = [[NSBundle mainBundle] pathForResource:@"bluelist" ofType:@"plist"];
        if(configurationPath){
            NSDictionary *configuration = [[NSDictionary alloc] initWithContentsOfFile:configurationPath];
            applicationId = [configuration objectForKey:@"applicationId"];
            if(!applicationId || [applicationId isEqualToString:@""]){
                hasValidConfiguration = NO;
                errorMessage = @"Open the bluelist.plist and set the applicationId to the Bluemix applicationId";
            }
            applicationSecret = [configuration objectForKey:@"applicationSecret"];
            if(!applicationSecret || [applicationSecret isEqualToString:@""]){
                hasValidConfiguration = NO;
                errorMessage = @"Open the bluelist.plist and set the applicationSecret with your Bluemix application's secret";
            }
            applicationRoute = [configuration objectForKey:@"applicationRoute"];
            if(!applicationRoute || [applicationRoute isEqualToString:@""]){
                hasValidConfiguration = NO;
                errorMessage = @"Open the bluelist.plist and set the applicationRoute to the Bluemix application's route";
            }
        }
  2. Bluemix iOS SDK と IBMData サービスを初期化するためのリクエストを送信します。この処理を IBM_AppDelegate.m 内で bluelist.plist ファイルから読み取りを行った直後に追加します。

    リスティングを見るにはここをクリック

        if(hasValidConfiguration){
            // Initialize the SDK and Bluemix services
    		[IBMBluemix initializeWithApplicationId:applicationId  andApplicationSecret:applicationSecret andApplicationRoute:applicationRoute];
            [IBMData initializeService];
        }else{
            [NSException raise:@"InvalidApplicationConfiguration" format: @"%@", errorMessage];
        }
        return YES;
    }
    
    @end

ステップ 5. MBaaS Data サービスのデータをリストアップして保持するように IBM_ListViewController クラスを変更する

 
  1. listItems メソッド、createItem メソッド、updateItem メソッド、deleteItem メソッド (IBM_ListViewController.m) を変更し、項目の変更が MBaaS Data サービスに保持されるようにします。
    - (void)listItems: (void(^)(void)) cb
    {
    	IBMQuery *qry = [IBM_Item query];
        [[qry find] continueWithBlock:^id(BFTask *task) {
            if(task.error) {
                NSLog(@"listItems failed with error: %@", task.error);
            } else {
                self.itemList = [NSMutableArray arrayWithArray: task.result];
                [self reloadLocalTableData];
                if(cb){
                    cb();
                }
    
            }
            return nil;
            
        }];
    }
    
    - (void) createItem: (IBM_Item*) item
    {
        [self.itemList addObject: item];
        [self reloadLocalTableData];
        
        [[item save] continueWithBlock:^id(BFTask *task) {
            if(task.error) {
                NSLog(@"createItem failed with error: %@", task.error);
            }
            return nil;
        }];
        
    }
    
    - (void) updateItem: (IBM_Item*) item
    {
        self.editedCell.textLabel.text = item.name;
        [[item save] continueWithBlock:^id(BFTask *task) {
            if(task.error) {
                 NSLog(@"updateItem failed with error: %@", task.error);
            }
            return nil;
        }];
    
    }
    
    -(void) deleteItem: (IBM_Item*) item
    {
        [self.itemList removeObject: item];
        [self reloadLocalTableData];
        [[item delete] continueWithBlock:^id(BFTask *task) {
            if(task.error){
                 NSLog(@"deleteItem failed with error: %@", task.error);
            } else {
                [self listItems: nil];
            }
            return nil;
        }];
        
        // Exit edit mode to avoid need to click Done button
        [self.tableView setEditing:NO animated:YES];
    }

ステップ 6. アプリケーションを実行する

 
  1. これでコードの変更をすべて終えたので、このコードはバージョン 1 と等価なはずであり、リストの項目は維持されるはずです。
  2. このコードを iOS シミュレーターまたは皆さんの iOS 端末で実行します。 BlueList アプリケーションの最初のページのスクリーン・ショット
  3. リストに項目をいくつか追加します。

    リストに項目を追加する場合のスクリーン・ショット
  4. 今度は項目を 1 つ選択し、クリックして編集します。

    項目を編集する場合のスクリーン・ショット
  5. 編集した項目を保存します。すると、リスト・ビューでは編集した項目が変更されているはずです。
  6. アプリケーションを再起動します。
  7. データ項目が維持されていることに注目してください。これでクラウドにデータが保持されるようになりました。

ステップ 7. クラウド上のデータを表示する

 
  1. Bluemix にログインします。
  2. 「DASHBOARD (ダッシュボード)」ビューでアプリケーションをクリックします。
  3. Mobile Data サービスをクリックします。
  4. 「Manage Data (データの管理)」タブには、クラウドに保管されているデータ・クラスと、現在保持されている各データ・クラスのインスタンスが表示されます。 データ・ビューアーのスクリーン・ショット
  5. 「Analytics (アナリティクス)」タブには、アプリケーションの各種アナリティクス・データが表示されます。そこには、端末別の API 呼び出しの合計、端末の種類別の API 呼び出し数、現在使用中のストレージ容量が含まれています。 アナリティクス統計のスクリーン・ショット

    クリックして大きなイメージを見る

まとめ

 

Bluemix で提供している Mobile Data サービスを利用してアプリケーションを作成すると、モバイル・クラウド・サービスを利用してモバイル・データ機能を使用したり、統合したりすることがいかに容易であるかの感覚をつかめるはずです。


関連トピック:Mobile Data クラウド・サービスを利用して Android アプリを作成する

コメントの追加

注意: HTML コードは、コメント内ではサポートされません。


残り 1000 文字

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Mobile development, Cloud computing
ArticleID=967694
ArticleTitle=IBM Mobile Data for Bluemix サービスを利用して iOS アプリを作成する
publish-date=10022014