Mempelajari Lebih Jauh Tentang CloudKit di iOS Part I – FoodPin Apps

Pagi All, di postingan kali ini kita akan membahas tentang apa itu CloudKit, bagaimana menggunakan CloudKit, dan bagaimana mengintegrasikan iCloud pada aplikasi menggunakan CloudKit, so check this out ..

Implementasi CloudKit di iOS Part I

Ketika Steve Job pertama kali memperkenalkan tentang iOS pada komponen iOS 5 dan OS X Lion pada Worldwide Developers Conference (WWDC) di tahun 2011, tetapi sayangnya tidak begitu banyak fitur yang memukau di tahun tersebut. Contohnya saja iCloud yang di perkenalkan hanya sebatas penyimpanan data secara synchroize untuk semua device Apple, ya hanya itu.

Developer belum diperbolehkan menggunakan iCloud untuk berbagi data dengan public user. Mari kita contohkan pada aplikasi FoodPin kita, jadi aplikasi kita ini dapat membagikan info restaurant kesukaan yang kita tambahkan kepada orang lain, data tersimpan di iCloud dan hanya kita yang bisa membacanya.

Pada tahun itu untuk membuat fitur sharing data terjadi, kita harus membuat backend server sendiri (seperti API, Data-transfer, user-authentication, dsb) atau kita bisa menggunakan layanan backend yang ada seperti Parse.

Menyimpan data ke cloud

Nah tahun ini Apple telah memperbaharui fungsi dari iCloud, sehingga developer dapat memanfaatkannya dalam pengembangan aplikasi sehingga user dapat berinteraksi dengan iCloud secara bersama. Kita bisa membuat aplikasi seperti facebook, line, dsb dengan menggunakan CloudKit ini.

CloudKit sangat mempermudah developer, karena tidak perlu lagi membuat backend server sendiri yang tentunya menghemat waktu dan biaya.

Berikut daftar fitur yang kita dapatkan selama menggunakan CloudKit:

  • 5GB untuk assests (misalnya gambar)
  • 50MB untuk database
  • 25MB/hari untuk transfer asset
  • 250KB/hari untuk transfer database

Nah di postingan kali ini kita akan membahas tentang bagaimana mengintegrasikan iCloud pada aplikasi menggunakan CloudKit framework. Untuk membuat pembahasan lebih jelas, kita akan mempraktekkannya pada aplikasi FoodPin yang telah kita buat sebelumnya.

Jika Anda serius untuk membuat aplikasi di Apps Store dan menjadi iOS Developer, sudah saatnya Anda untuk mendaftarkan diri pada iOS Developer Program seperti yang telah dibahas di postingan sebelumnya.


Memahami Framework CloudKit

CloudKit tidak hanya tentang media penyimpanan, Apple memperkenalkan CloudKit kepada developer agar developer dapat mengintegrasikan aplikasi dengan iCloud. Framework CloudKit bertugas untuk mengatur transfer data dari/atau ke server iCloud.

Oya satu lagi, iCloud tidak ikut bertanggung jawab untuk mengatur penyimpanan data local yang ada di aplikasi yang telah terinstal pada device, contohnya cache. Jika aplikasi kita memanfaatkan fitur caching, maka kita harus membuatnya sendiri pada aplikasi.

Container dan Database adalah elemen penting yang ada di framework CloudKit. Setiap aplikasi memiliki container-nya sendiri untuk mengatur konten aplikasi. Biasanya untuk satu aplikasi berkomunikasi dengan satu containerContainer tersebut dikenal dengan class CKContainer.

Didalam sebuah container, terdapat public database dan private database untuk mengirimkan data. Dimana public database dapat di akses oleh semua user yang menggunakan aplikasi, sedangkan private database hanya dapat digunakan/dilihat oleh satu user. Nah Apple memperbolehkan developer untuk memilih mana database yang cocok di implementasikan pada aplikasi kita.

Contohnya jika membuat aplikasi sejenis Instagram kita akan menggunakan public database, dan ketika membuat aplikasi sejenis To-do List kita akan menggunakan private database. Perbedaanya terlihat ketika kita mengguanakan public databse, kita tidak perlu mengaktifkan akun iCloud untuk menggunakannya, sebaliknya ketikan menggunakan private database. Berikut contoh gambarannya:

Gambaran Container dan Database
Gambaran Container dan Database

Hirarki selanjutnya dinamakan dengan Record Zone, dimana ini memperbolehkan kita untuk mempertisi data kita kedalam zona yang berbeda. Gampangnya kita menyimpan record yang terkait dalam satu daerah. Didalam framework yang kita gunakan, Record Zone ini dikenal dengan class CKRecordZone seperti yang terlihat pada gambar dibawah ini.

Record Zone
Record Zone

Nah diasumsikan kita telah memahami ide dasar tentang framework CloudKit, selanjutnya mari kita membuat Feed Tab. Dengan mengintegrasikan aplikasi menggunakan CloudKit, kita akan mempelajari beberapa point berikut:

  • Bagaimana mengaktfikan fitur CloudKit pada aplikasi
  • Bagaimana menggunakan Dashboard CloudKit untuk membuat record pada cloud.
  • Bagaimana mengambil record secara asynchronous dari iCloud menggunakan API convenience
  • Bagaimana mengambil record dari server iCloud menggunakan API operational
  • Bagimana meningkatkan performa aplikasi menggunakan lazy loading
  • Bagimana mengimplementasikan cache image menggunakan NSCache
  • Bagaimana menyimpan data di server iCloud.

Mengaktifkan Fitur CloudKit pada Aplikasi 

Diasumsikan Anda telah mengikuti program iOS Developer Program, tugas pertama yang akan kita lakukan adalah mendaftarkan akun kita di project Xcode. Di project navigator, pilih project FoodPin dan pilih FoodPin. Dibawah tab General, jika kita menemukan pesan yang mengatakan bahwa akun kita belum diidentifikasi, maka yang perlu dilakukan adalah meng-klik tombol Fix-issue seperti yang terlihat pada gambar dibawah ini.

Membuat akun developer untuk project Xcode
Membuat akun developer untuk project Xcode

Dalam kasus ini kita telah mengisi identifiernya dengan com.appcoda.FoodPin atau Anda bisa menggantinya sesuai yang diinginkan. Nah selanjutnya CloudKit akan membuatkan container berdasarkan identifier yang telah kita isi ini.

Setelah kita melalui langkah diatas, kita akan berpindah ke tab Capabilities. Untuk mengaktfikan fitur CloudKit, yang perlu kita lakukan adalah menggeser tombol iCloud menjadi On dan pilih service yang digunakan sebagai iCloud. Untuk containernya, pasang default aja seperti yang terlihat pada gambar dibawah ini:

Mengaktifkan fitur CloudKit pada aplikasi

Mengatur Record di Dashboard CloudKit

Pertama buka Dashboard CloudKit untuk membuka dashboard di website seperti yang terlihat digambar dibawah ini. Dengan dashboard ini kita bisa mengatur wadah penyimpanan dan melakukan beberapa operasi seperti menambahkan record atau menghapus record. Sebelum aplikasi kita dapat menyimpan restaurant di iCloud, pertama kali yang harus kita lakukan adalah mendefinisikan tipe record-nya. Sama seperti yang telah kita lakukan pada postingan tentang Core Data sebelumnya.

Dashboard CloudKit
Dashboard CloudKit

Di bagian kiri pane dari dashboard, pilih Record Type dan klik icon untuk membuat tipe record yang baru. Beri nama record tersebut dengan Restaurant. Pada tipe record tersebut, isi attribute dan namanya. CloudKit mendukung beberapa tipe attribute seperti String, Data/Time,  Double dan Location. Jika kita ingin menyimpan data dalam bentuk binary data seperti gambar, kita bisa menggunakan tipe Assets. Nah sekarang tambahkan tipe berikut kedalam dashboard CloudKit aplikasi:

  • name dengan tipe String
  • type dengan tipe String
  • location dengan tipe String
  • image dengan tipe Assets
Membuat tipe record Restaurant
Membuat tipe record Restaurant

Setelah kita mengkongfigurasikan tipenya, sekarang kita telah siap untuk menyimpan record restaurant di iCloud. Selain itu kita juga sebenarnya bisa menambahkan record melalui code. Dibagian kiri dari pane, kita akan menemukan Default Zone dibawah Public Data. Itu merupakan zona record default dari public database kita. Biasanya zone ini tidak memiliki record apapun, kita bisa mengklik icon + atau tombol New Record untuk membuat record baru. Isi form name, type, location, dan lokasi gambar lalu simpan. Ulangi prosedur tersebut 10x untuk membuat sepuluh record seperti yang terlihat pada gambar dibawah ini.

Menambahkan Record baru pada CloudKit
Menambahkan Record baru pada CloudKit

Mengambil Data dari Database menggunakan API Convenience

Framework CloudKit memperkenalkan dua API kepada developer untuk berinteraksi dengan iCloud yang dinamakan dengan API Convenience dan API Operational. Kedua API tersebut memperbolehkan kita untu menyimpan dan mengambil data dari iCloud secara asynchronousDengan kata lain, operasi transfer data dilakukan dibelakang aplikasi. Nah pertama kali kita akan menggunakan API Convenience untuk mengimplementasikan tab Feed.

Sesuai dengan namanya API Convenience, API ini sangat mudah digunakan dan memperbolehkan kita untuk berinteraksi dengan iCloud menggunakan beberapa baris code. Berikut contoh code untuk mengambil record Restaurant dari iCloud:

Code diatas sangatlah dasar, dimana pertama kali kita mendapatkan container default dari CloudKit yang ada di aplikasi dan juga public database-nya. Untuk mendapatkan records Restaurant dari public database, kita buat object CKQuery dengan tipe recordnya adalah “Restaurant”. iOS SDK memperkenalkan class yang dinamakan dengan NSPredicate kepada developer untuk menspesifikasikan bagaimana data dapat disaring. Jika Anda pernah berkecimpung dengan database, mungkin cara kerja hampir sama dengan WHERE di SQL.

Terakhir kita memanggil method performQuery yang di CKDatabase. Kemudian CloudKit akan mencari dan mengembalikan hasilnya setelah menemukan kriteria yang telah ditentukan di cloud. Nah pencarian dan pengiriman data ini dilakukan secara background transfer. Ya seperti itulah gambaran implementasi CloudKit, mudah kan ?

Nah sekarang mari kita kembali ke project FoodPin dan implementasikan tab Feed untuk menampilkan record Restaurant dari iCloud.

Pertama kali buat class FeedTableViewController untuk table view controller. Di Project Navigator,  klik kanan folder FoodPin dan pilih “New Files ..” lalu beri nama classnya dengan FeedTableViewController dan pasang subclassnya dengan UITableViewController.

Setelah selesai, pergi ke dashboard. Lalu pilih table view controller dari tab Feed dan set custom class nya dengan FeedTableViewController pada identity inspector. Disini kita menggunakan default style dari cell table view, jadi pasang identifier dari prototype cell nya dengan Cell, seperti yang terlihat pada gambar dibawah ini:

Memasang class custom dari Feed Table View Controller
Memasang class custom dari Feed Table View Controller

Nah sekarang kita telah siap untuk mengimplementasikan FeedTableViewController dan mengambil record dari cloud.

Untuk menggunakan CloudKit, pertama kali kita harus meng-import framework CloudKit. Tambahkana code dibawah ini diawal baris pada file FeedTabelViewController.swift:

import CloudKit

Selanjutnya deklarasikan variabel restaurant dalam bentuk array dari object CKRecord. Biarkan array tersebut kosong, yang nantinya akan kita gunakan untuk mengirimkan record yang diambil menggunakan CloudKit.

var restaurants:[CKRecord] = []

Ketika tab Feed di panggil, aplikasi akan memulai mengambil record menggunakan CloudKit. Pada method viewDidLoad tambahkan code berikut:

self.getRecordsFromCloud()

Selanjutnya, tambahkan getRecordsFromCloud di class FeedTableViewController seperti berikut:

Code diatas hampir sama dengan code sebelumnya yang pernah kita bahas. Di handlernya, kita tambahkan logika yang menangani jika terdapat error. Jika error tidak ditemukan berarti itu mengindikasikan query telah berhasil. Kita mendapatkan hasil dari array CKRecord lalu menyimpannya.

Nah sekarang kita sudah mendapatkan records-nya. Selanjutnya yang perlu kita lakukan adalam menerapkan beberapa method dari protocol UITableViewDataSource untuk menampilkan record pada table view. Berikut method untuk menambahkan/mengupdate:

Mari kita fokus ke method terakhir, dimana kita telah mendapatkan CKRecord dari Restaurant. Seperti yang telah disebutkan sebelumnya, sebuah object CKRecord adalah kunci dari hasil/nilai yang dikembalikan. Kita menggunakan method objectForKey untuk menampung nilai dari field record (seperti nama restaurant). Ketika membuat tipe object Restaurant di dashboard CloudKit, kita menggunakan Assets sebagai tipe dari filed image, sehingga object yang dikeluarkan adalah object CKAssets.

Ketika mendownload record yang berupa assets, CloudKit menyimpan data di local file system  dan kemudian kita bisa mengambilnya dengan URL di property fileURL. Oleh karena itu untuk mengambil gambar kita harus mengakses fileURL dari imageAssets-nya.

cell.imageView.image = UIImage(data: NSData(contentsOfURL: imageAsset.fileURL)!)

Tab Feed
Tab Feed

Nah akhirnya beres nih, sebelum melakukan testing aplikasi kita harus mengatur iCloud nya. Di simulator, klik command-shift-H untuk kembali ke halaman utama simulator. Pilih Setting>iCloud dan sign in dengan Apple ID. Nah sekarang kita sudah siap untuk menjalankan aplikasi. Pilih tab Feed, dan aplikasi akan me-load data restaurant dari iCloud. Mungkin selama load data akan memakan waktu yang lama untuk ditampilkan, di postingan selanjutnya kita akan membahasnya.

Oya, biasanya akan muncul pesan error seperti dibawah ini. Ini menandakan bahwa aplikasi terlalu lama untuk mengambil data dari iCloud. Tapi tetap tenang, coba stop aplikasi dan jalankan kembali. Seharusnya akan terlihat seperti gambar disamping.

Well kita lanjutkan Mempelajari Lebih Jauh Tentang CloudKit di iOS Part II ya Guys ..

Iklan

Good People write good comments ..

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s