使用 IBM Mobile Data for Bluemix 服务构建一个 iOS 应用程序

2014 年 12 月 24 日
 
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+

作者照片 - kevan holdaway

Kevan Holdaway

软件工程师,IBM Mobile Cloud Services

在 LinkedIn 上找到我

作者照片 - belinda johnson

Belinda Johnson

软件工程师,IBM Mobile Cloud Services

@BeeMarieJohnson

作者照片 - nick gibson

Nick Gibson

软件工程师,IBM Mobile Cloud Services

在 Twitter 上通过 @ndgibs 关注我
在 Google+ 上关注我

注册使用 IBM Bluemix
这个云平台提供了许多免费的服务、运行时和基础架构,可以帮助您快速构建和部署下一个移动或 Web 应用程序。

您可能已经知道 Bluemix 的一些优势,这是 IBM 用于开发和部署移动和 Web 应用程序的开放平台。Bluemix 中许多已有的服务,使开发人员能轻松地构建和增强应用程序。在本教程中,我们将展示如何使用 IBM Mobile Data for Bluemix 服务构建一个 iOS 应用程序。

您是否曾经去了杂货店,却忘记了您的配偶制作美味甜点所需的原料是什么?或者忘记了孩子们请求第二天吃的饭后甜点是什么?如果他们可将其请求输入一个共享的杂货列表中,您可收到推送通知提醒您更新,那该多好?

输入 BlueList 应用程序。这是一个简单的 iOS 应用程序,我们将向它添加 IBM Mobile Data for Bluemix 服务来在云中存储、删除、更新和查询存储的对象。未来的教程将展示如何添加 Push 和 CloudCode 服务,以便您在列表更新时获得通知(Push 服务),在一个设备以某种方式更新列表时,所有设备上的列表都会刷新(CloudCode 服务)。

这个简单的应用程序使用了 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 开发者教程 “立即开始开发 iOS 应用程序” 描述了如何安装 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. 单击 Add an application 转到应用程序目录。 Create an Application 按钮的屏幕截图
  3. 单击 Boilerplates 下的 Mobile CloudMobile Cloud 样板程序的屏幕截图
  4. 单击 Create Application包含 create application 按钮的 Mobile Cloud 应用程序的屏幕截图
  5. 选择一个空格并为您的应用程序选择一个名称,填入到 “Finish Adding Mobile Cloud” 面板中。然后单击 CreateCreate an Application 按钮的屏幕截图
  6. 创建应用程序后,它将显示在您的仪表板中。单击您的新应用程序转到它的 Overview 页面。 Create an Application 按钮的屏幕截图

第 2 步. 安装和配置 SDK

 

备注:如果选择使用 CocoaPods 方法安装 SDK Framework 文件,您可跳过第 1 - 6 步。依据 前提条件 中的 CocoaPod 操作说明,这将涉及到运行示例中包含的 Podfile。

  1. 您将看到新应用程序的 Overview 页面。然后单击 Download SDKs
    Download SDKs 按钮的屏幕截图

    备注:在以后的操作中将需要这个 Application ID。

  2. 您将看到介绍如何构建一个移动应用程序的文档。在这里,单击 iOS SDKDownload SDKs 按钮的屏幕截图

    点击查看大图

  3. 在 Finder 中,找到 IBMBluemix 框架 (<unzipped_location>/IBMBluemix.framework)。将此框架拖入到 BlueList Xcode 项目中的 Frameworks 文件夹下。 放入项目中的框架文件的屏幕截图
  4. 勾选 “Copy items into destination group's folder (if needed)”。
  5. 在 Finder 中,找到 IBMData SDK Framework。将此框架拖入到 BlueList Xcode 项目中的 Frameworks 文件夹下,就像 IBMBluemix 框架一样。
  6. 修改 bluelist.plist 文件,使它包含应用程序 Overview 页面上的 applicationId、applicationSecret 和 applicationRoute 值。(要打开 Overview 页面,可转到 Download SDKs 页面,方法是登录到 Bluemix,转到您的仪表板,然后单击想要的应用程序。) 目录中的应用程序的屏幕截图
  7. 备注:使用 XCode 创建一个新 iOS 应用程序时,必须将 -ObjC-lsqlite3 链接器标记添加到构建设置中。为此,选择应用程序的目标并单击 Build Settings。从这里,您可搜索 “Other Linker Flags”。如果未看到结果,请确保您选择了 “All” 设置,而不是 “Basic”。我们已为您将标记添加到示例项目中。 项目的 Xcode 构建设置的屏幕截图。

    点击查看大图

第 3 步. 修改代码以利用 Data 服务

 
  1. 打开 IBM_Item.h。检查当前代码。
    #import <Foundation/Foundation.h>
    
    @interface IBM_Item : NSObject
    
    @property(nonatomic, copy) NSString *name;
    
    @end
  2. 将超类更改为 IBMDataObject,让 IBM_Item 遵守 IBMDataObjectSpecialization 协议。通过遵守 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 方法,将 title 属性标记为 dynamic。另外在类方法 initialize 中注册特殊化类。这将在 IBM_Item Objective-C 类与云中持久化的 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. 发出一个请求来初始化 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 步. 修改 IBM_ListViewController 类,以列出并持久化来自 MBaaS Data 服务的数据

 
  1. 修改 listItemscreateItemupdateItemdeleteItem 方法 (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. 现在挑选一项,单击它以对它进行编辑。

    编辑一项时的屏幕截图
  5. 保存刚编辑的项。它现在应已在列表视图中修改。
  6. 重新启动应用程序。
  7. 可以注意到,您的数据项已持久化。现在您已将数据持久化到云中!

第 7 步. 在云中查看数据

 
  1. 登录到 Bluemix。
  2. 在 Dashboard 视图中单击您的应用程序。
  3. 单击 MobileData Service。
  4. 在 Manage Data 选项卡上,可以看到存储在云中的 Data Classes,以及持久化的每个 Data Class 实例。 数据查看器的屏幕截图
  5. 在 Analytics 选项卡上,您可看到您应用程序的各种分析数据,包括不同设备的 API 调用总数、不同类型的 API 调用,以及使用的存储容量。 分析统计数据和图表的屏幕截图

    点击查看大图

结束语

 

使用 Bluemix 中的 MobileData 服务开发这个应用程序,您应该已经了解到通过移动云服务来使用和集成移动数据功能有多容易!


相关主题:IBM Mobile Data for Bluemix 服务(Android 应用程序)

添加评论

注意:评论中不支持 HTML 语法


剩余 1000 字符

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=移动开发, Cloud computing
ArticleID=971924
ArticleTitle=使用 IBM Mobile Data for Bluemix 服务构建一个 iOS 应用程序
publish-date=12242014