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

IBM Bluemix 是一个基于Cloud Foundry的PaaS产品,这个云平台提供了许多免费的服务、运行时和基础架构,可以帮助您快速构建和部署下一个移动或 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 应用程序

登录到 Bluemix 。

单击 Add an application 转到应用程序目录。

BbYfIn.png

单击 Boilerplates 下的 Mobile Cloud 。

INRbue.png

单击 Create Application 。

Bzeuye7.png

选择一个空格并为您的应用程序选择一个名称,填入到 “Finish Adding Mobile Cloud” 面板中。然后单击 Create 。

创建应用程序后,它将显示在您的仪表板中。单击您的新应用程序转到它的 Overview 页面。

第 2 步. 安装和配置 SDK

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

您将看到新应用程序的 Overview 页面。然后单击 Download SDKs 。 备注:在以后的操作中将需要这个 Application ID。

qIBfiy.png

您将看到介绍如何构建一个移动应用程序的文档。在这里,单击 iOS SDK 。

RrAFJzq.png

在 Finder 中,找到 IBMBluemix 框架 (/IBMBluemix.framework)。将此框架拖入到 BlueList Xcode 项目中的 Frameworks 文件夹下。

aUzyei.png

勾选 “Copy items into destination group's folder (if needed)”。

在 Finder 中,找到 IBMData SDK Framework。将此框架拖入到 BlueList Xcode 项目中的 Frameworks 文件夹下,就像 IBMBluemix 框架一样。

修改 bluelist.plist 文件,使它包含应用程序 Overview 页面上的 applicationId、applicationSecret 和 applicationRoute 值。(要打开 Overview 页面,可转到 Download SDKs 页面,方法是登录到 Bluemix,转到您的仪表板,然后单击想要的应用程序。)

jUrAjqv.png

备注 :使用 XCode 创建一个新 iOS 应用程序时,必须将 -ObjC 和 -lsqlite3链接器标记添加到构建设置中。为此,选择应用程序的目标并单击 Build Settings。从这里,您可搜索 “Other Linker Flags”。如果未看到结果,请确保您选择了 “All” 设置,而不是 “Basic”。我们已为您将标记添加到示例项目中。

3yaEvm.png

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

打开 IBM_Item.h。检查当前代码。

1
2
3
4
5
#import @interface IBM_Item : NSObject
 
@property(nonatomic, copy) NSString *name;
 
@end

将超类更改为 IBMDataObject ,让 IBM_Item 遵守IBMDataObjectSpecialization 协议。通过遵守IBMDataObjectSpecialization 协议,将告诉编译器,您将在 IBM_Item 内中实现 IBMDataObjectSpecialization 方法。

1
2
3
#import #import @interface IBM_Item : IBMDataObject @property(nonatomic, copy) NSString *name;
 
@end

实现 dataClassName 方法,将 title 属性标记为 dynamic。另外在类方法initialize 中注册特殊化类。这将在 IBM_Item Objective-C 类与云中持久化的 JSON 类 “ Item ” 之间建立一个映射。

1
2
3
4
5
6
7
#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 服务链接到应用程序代理中

首先,从之前编辑的 plist 文件读取应用程序 ID。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#import #import #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" ;
     }
   }

发出一个请求来初始化 SDK 和 IBMData 服务。将这个请求添加到 IBM_AppDelegate.m 中紧挨读取 bluelist.plist 文件的语句之后。

1
2
3
4
5
6
7
8
9
10
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 服务的数据

修改 listItems 、 createItem 、 updateItem 和 deleteItem 方法 (IBM_ListViewController.m) 以将各项的更改持久化到 MBaaS Data 服务中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
- (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 版等同,而且您的列表项应已持久化!

在 iOS 模拟器或您的 iOS 设备中运行代码。

zqaiQve.jpg

向列表中添加两个列表项。

U7bUJnr.jpg

现在挑选一项,单击它以对它进行编辑。

uIf63e.jpg

保存刚编辑的项。它现在应已在列表视图中修改。

重新启动应用程序。

可以注意到,您的数据项已持久化。现在您已将数据持久化到云中!

第 7 步. 在云中查看数据

登录到 Bluemix。

在 Dashboard 视图中单击您的应用程序。

单击 MobileData Service。

在 Manage Data 选项卡上,可以看到存储在云中的 Data Classes,以及持久化的每个 Data Class 实例。

NFnE3i.png

在 Analytics 选项卡上,您可看到您应用程序的各种分析数据,包括不同设备的 API 调用总数、不同类型的 API 调用,以及使用的存储容量。

u2UzumY.png

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值