Đồng bộ với iCloud
iCloud là dịch vụ điện toán đám mây được Apple đưa vào hoạt động từ tháng 10 năm 2011. Cho tới tháng 7 năm 2013, dịch vụ đã có hơn 320 triệu người sử dụng (wiki). Dịch vụ cho phép sao lưu không dây (wireless) dữ liệu và cấu hình của các thiết bị iOS thay vì phải sử dụng iTunes trên Mac hay ...
iCloud là dịch vụ điện toán đám mây được Apple đưa vào hoạt động từ tháng 10 năm 2011. Cho tới tháng 7 năm 2013, dịch vụ đã có hơn 320 triệu người sử dụng (wiki).
Dịch vụ cho phép sao lưu không dây (wireless) dữ liệu và cấu hình của các thiết bị iOS thay vì phải sử dụng iTunes trên Mac hay Windows. Các dữ liệu cho phép sao lưu bao gồm ảnh và video trong Camera Roll, các cấu hình, dữ liệu của ứng dụng, tin nhắn văn bản và đa phương tiện, nhạc chuông, thư thoại…
Việc sao lưu được thực hiện tự động hàng ngày khi thiết bị trong trạng thái khóa, đang kết nối với internet thông qua wifi và đang được cắm sạc. Khi có vấn đề gì về dữ liệu, người dùng có thể dùng iCloud để khôi phục.
Với iCloud, lập trình viên có thể đồng bộ database Core Data giữa các thiết bị chạy iOS. Trong khuôn khổ bài viết, tôi sẽ trình bày các bước cần thiết để tạo một ứng dụng sử dụng iCloud để đồng bộ dữ liệu.
2.1. Tạo project CloudDemo
Tạo mới 1 ứng dụng dùng ngôn ngữ Swift với template Master-Detail Application, tích chọn Use Core Data như hình dưới đây:
2.2. Tạo App ID và Provisioning Profiles
Chú ý: bạn cấn phải mua tài khoản developer của Apple ($99/năm) để thực hiện các bước dưới đây
Tạo App ID:
Đăng nhập vào địa chỉ developer.apple.com
Vào mục Member Center > Certificates, Identiiers & Profiles > Identifiers và tạo App ID mới theo Product name và Bundle Identifier tương ứng với project của bạn. Tích chọn service iCloud ở mục App Services
Sau khi tạo thành công ta sẽ có App ID tương tự như sau:
Tạo Provisioning Profiles:
Vào mục Member Center > Certificates, Identiiers & Profiles > Provisioning Profiles và tạo mới profile sử dụng App ID đã tạo ở trên. Ta sẽ có kết quả tương tự như trong hình:
Import profile vào Xcode:
Đăng nhập tài khoản develop
Download và click đúp vào file provisioning vừa tải về
2.3. Chọn Entitlements cho project
Bước tiếp theo bạn cần cấp cho chương trình khả năng vào quyền sử dụng iCloud storagestorage.
Vào trang Capabilities trong phần cấu hình project và turn on iCloud
2.4. Import MagicalRecord
Import MagicalRecord vào dự án (đơn giản nhất là thông qua cocoa pod)
Có thể bạn phải sửa lại hàm setupCoreDataStackWithiCloudContainer trong file MagicalRecord+iCloud.h như sau (để fix lỗi AppID có dấu . )
+ (void) setupCoreDataStackWithiCloudContainer:(NSString *)icloudBucket localStoreNamed:(NSString *)localStore;
{
NSMutableString * contentNameKey =[[NSMutableString alloc] initWithString: [[[NSBundle mainBundle] infoDictionary] objectForKey:(id)kCFBundleIdentifierKey]];
// Munge the key: NSPersistentStoreUbiquitousContentNameKey should not contain periods
[contentNameKey replaceOccurrencesOfString:@"." withString:@"~" options:NSLiteralSearch range:NSMakeRange(0, [contentNameKey length])];
[self setupCoreDataStackWithiCloudContainer:icloudBucket
contentNameKey:contentNameKey
localStoreNamed:localStore
cloudStorePathComponent:nil];
}
2.5. Cấu hình Magical Record
Tại file AppDelegate.swift:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
MagicalRecord.setupCoreDataStackWithiCloudContainer("iCloud.truong.tuan.CloudDemo", localStoreNamed: "CloudDemo_local")
return true
}
func applicationWillTerminate(application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
// Saves changes in the application's managed object context before the application terminates.
MagicalRecord.cleanUp()
}
2.6. Đăng ký Notification để cập nhật giao diện khi dữ liệu hoàn thành đồng bộ
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("iCloudUpdate"), name: kMagicalRecordPSCDidCompleteiCloudSetupNotification, object: nil)
2.7. Chạy thử chương trình
Chạy thử chương trình, nhập dữ liệu sau đó xoá chương trình đi và thử chạy lại, bạn sẽ thấy dữ liệu được phục hồi như cũ (có thể bạn cần phải nhấn nút refresh - 1 vấn đề liên quan tới việc gửi notification không chính xác)
3. Kết luận
Như vậy chúng ta đã hoàn thành việc tìm hiểu sơ bộ về iCloud và cách đồng bộ dữ liệu Core Data. Trong thực tế, các bạn có thể phải giải quyết thêm bài toán đồng bộ dữ liệu khác như ảnh, nhạc, video … và bài toán database migration.
Cảm ơn đã theo dõi.
Source Code