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-mobiledata(v1) 代碼
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 轉到應用程序目錄。
單擊 Boilerplates 下的 Mobile Cloud 。
單擊 Create Application 。
選擇一個空格並為您的應用程序選擇一個名稱,填入到 “Finish Adding Mobile Cloud” 面板中。然後單擊 Create 。
創建應用程序後,它將顯示在您的儀表板中。單擊您的新應用程序轉到它的 Overview 頁面。
第 2 步. 安裝和配置 SDK
備注:如果選擇使用 CocoaPods 方法安裝 SDK Framework 文件,您可跳過第 1 - 6 步。依據前提條件中的 CocoaPod 操作說明,這將涉及到運行示例中包含的 Podfile。
您將看到新應用程序的 Overview 頁面。然後單擊 Download SDKs 。 備注:在以後的操作中將需要這個 Application ID。
您將看到介紹如何構建一個移動應用程序的文檔。在這裡,單擊 iOS SDK 。
在 Finder 中,找到 IBMBluemix 框架 (
勾選 “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,轉到您的儀表板,然後單擊想要的應用程序。)
備注 :使用 XCode 創建一個新 iOS 應用程序時,必須將 -ObjC 和 -lsqlite3鏈接器標記添加到構建設置中。為此,選擇應用程序的目標並單擊 Build Settings。從這裡,您可搜索 “Other Linker Flags”。如果未看到結果,請確保您選擇了 “All” 設置,而不是 “Basic”。我們已為您將標記添加到示例項目中。
第 3 步. 修改代碼以利用 Data 服務
打開 IBM_Item.h。檢查當前代碼。
#import @interface IBM_Item : NSObject @property(nonatomic, copy) NSString *name; @end
將超類更改為 IBMDataObject ,讓 IBM_Item 遵守IBMDataObjectSpecialization 協議。通過遵守IBMDataObjectSpecialization 協議,將告訴編譯器,您將在 IBM_Item 內中實現 IBMDataObjectSpecialization 方法。
#import #import @interface IBM_Item : IBMDataObject @property(nonatomic, copy) NSString *name; @end
實現 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 服務鏈接到應用程序代理中
首先,從之前編輯的 plist 文件讀取應用程序 ID。
#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 文件的語句之後。
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 服務中。
- (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 設備中運行代碼。
向列表中添加兩個列表項。
現在挑選一項,單擊它以對它進行編輯。
保存剛編輯的項。它現在應已在列表視圖中修改。
重新啟動應用程序。
可以注意到,您的數據項已持久化。現在您已將數據持久化到雲中!
第 7 步. 在雲中查看數據
登錄到 Bluemix。
在 Dashboard 視圖中單擊您的應用程序。
單擊 MobileData Service。
在 Manage Data 選項卡上,可以看到存儲在雲中的 Data Classes,以及持久化的每個 Data Class 實例。
在 Analytics 選項卡上,您可看到您應用程序的各種分析數據,包括不同設備的 API 調用總數、不同類型的 API 調用,以及使用的存儲容量。
使用 Bluemix 中的 MobileData 服務開發這個應用程序,您應該已經了解到通過移動雲服務來使用和集成移動數據功能有多容易!
(來源:developerworks)