Indonesian (Bahasa Indonesia) translation by Imam Firmansyah (you can also view the original English article)
Kembali pada tahun 2012, Apple memperkenalkan iCloud bersama iOS 5. Pada saat yang sama, perusahaan mengumumkan bahwa pengembang akan memiliki akses ke iCloud melalui sejumlah API. Pada awalnya, pengembang memiliki tiga opsi:
API ini tidak sempurna. Kelemahan utama adalah kurangnya transparansi. Integrasi Core Data, khususnya, telah mengarah ke frustrasi dan kebingunganbahkan diantara pengembang yang paling berpengalaman. Ketika ada yang salah, pengembang tidak tahu apa masalahnya atau siapa pelakunya. Itu bisa menjadi masalah dalam kode mereka atau di Apple.
CloudKit
Pada WWDC 2014, Apple memperkenalkan CloudKit, a kerangka kerja baru yang langsung berinteraksi dengan server iCloud Apple. Kerangka kerja ini sebanding dengan sejumlah solusi PaaS (Platform as a Service), seperti Firebase. Seperti Firebase, Apple menyediakan API fleksibel dan dashboard yang menawarkan pengembang mengintip ke dalam data yang disimpan di server iCloud Apple.
Apa yang paling saya sukai tentang CloudKit adalah komitmen Apple sendiri terhadap kerangka kerja. Menurut perusahaan, iCloud Drive dan iCloud Photo Library dibangun di atas CloudKit. Ini menunjukkan bahwa kerangka kerja CloudKit dan infrastrukturnya kuat dan dapat diandalkan.
Sebagai pengembang, tanda kepercayaan dan komitmen ini penting. Di masa lalu, Apple sesekali merilis API yang diganggu oleh bug atau kurang fitur utama hanya karena perusahaan tidak makan makanan anjing sendiri. Ini tidak berlaku untuk CloudKit. Dan itu menjanjikan.
Haruskan Anda Menggunakan CloudKit?
Penyimpanan key-value dan penyimpanan dokumen memiliki kegunaannya, dan Apple menekankan bahwa CloudKit tidak menggantikan atau menghentikan API iCloud yang sudah ada. Hal yang sama berlaku untuk Data Inti. CloudKit tidak menawarkan penyimpanan lokal, misalnya. Ini berarti bahwa aplikasi yang berjalan di perangkat tanpa koneksi jaringan akan sedikit tidak berguna jika hanya mengandalkan CloudKit.
Apple juga menekankan bahwa penanganan kesalahan sangat penting ketika bekerja dengan CloudKit. Jika operasi penyimpanan gagal, misalnya, dan pengguna tidak diberitahu, maka dia mungkin tidak tahu bahwa datanya tidak disimpan — dan hilang.
CloudKit adalah solusi hebat untuk menyimpan data terstruktur dan tidak terstruktur di Cloud. Jika Anda memerlukan solusi untuk mengakses data di beberapa perangkat, maka CloudKit tentu saja merupakan pilihan untuk dipertimbangkan.
Pada WWDC 2015, Apple melakukan apa yang diharapkan atau diharapkan oleh beberapa pengembang. Ini mengumumkanlayanan web untuk CloudKit.. Ini berarti CloudKit dapat digunakan di hampir semua platform, termasuk Android dan Windows Phone.
Harga Apple juga cukup kompetitif. Memulai CloudKit gratis, dan tetap gratis untuk sebagian besar aplikasi. Sekali lagi, CloudKit tentu layak dipertimbangkan jika Anda berencana untuk menyimpan data di cloud.
Konsep CloudKit
Pengembang berjuang dengan Core Data yang sering tidak terbiasa bangunan block dari framework. Jika Anda tidak meluangkan waktu untuk mempelajari dan memahami tumpukan Core Data, maka Anda pasti akan mengalami masalah. Hal yang sama berlaku untuk CloudKit.
Sebelum kita mulai mengerjakan aplikasi contoh yang menggunakan CloudKit, saya ingin menghabiskan beberapa menit untuk memperkenalkan Anda ke sejumlah konsep utama framework dan infrastruktur CloudKit. Mari mulai dengan container, database, dan sand box.
Privasi dan Penahanan
Apple membuatnya sangat jelas bahwa privasi adalah aspek penting dari CloudKit. Hal pertama yang harus diketahui adalah setiap aplikasi memiliki wadah sendiri di iCloud. Konsep ini sangat mirip dengan bagaimana masing-masing aplikasi iOS memiliki sandbox sendiri. Namun, dimungkinkan untuk berbagi wadah dengan aplikasi lain selama aplikasi tersebut terkait dengan akun pengembang yang sama. Seperti yang Anda bayangkan, ini membuka sejumlah kemungkinan menarik bagi para pengembang.
Container CloudKit berisi beberapa basis data. Setiap kontainer memiliki satu database publik yang dapat digunakan untuk menyimpan data yang dapat diakses oleh setiap pengguna aplikasi Anda. Selain database umum, container juga berisi basis data pribadi untuk setiap pengguna aplikasi Anda. Database pribadi pengguna digunakan untuk menyimpan data yang khusus untuk pengguna tertentu. Segregasi data dan enkapsulasi adalah komponen kunci dari infrastruktur CloudKit dan iCloud.
Meskipun container aplikasi dapat menyimpan banyak database, dari perspektif pengembang, container hanya memiliki dua database: database publik dan database pribadi dari pengguna yang saat ini masuk ke akun iCloud mereka. Pada 2017, Apple memperkenalkan database ketiga, database bersama, menyediakan aplikasi dengan kemampuan untuk membagi subkumpulan records yang dibagikan pada database pribadi pengguna lain, mengundang mereka untuk berkontribusi pada records yang terekspos tersebut.
Saya akan berbicara lebih banyak tentang akun iCloud nanti.
Record dan Zona Record
Database dari sebuah container applikasi yang menyimpan record. Hal ini tidak terlalu berbeda dari sebuah database tradisional. Pada pandangan sekilas, record yang disimpan dalam database CloudKit tampaknya tidak lebih dari bungkus untuk kamus pasangan key-value. Mereka mungkin terlihat seperti kamus yang didambakan, tetapi itu hanya sebagian dari cerita.
Tiap record juga memiliki sebuah tipe record dan sejumlah bidang metadata. sebuah metadata record menjaga jalur ketika record sedang dibuat, dimana user membuat record, kapan record diupdate terakhir kali dan siapa yang meng-update recordnya.
class CKRecord
merepresesntasikan, dan merupakan class yang powerful. Nilai-nilai yang dapat Anda simpan dalam record tidak terbatas pada jenis daftar properti. Anda dapat menyimpan data string, number, dates dan blobs dalam sebuah record, namun class CKRecord
juga memperlakukan data lokasi, CLLocation
, sebagai tipe data class pertama.
Anda bahkan dapat menyimpan array tipe data yang didukung dalam sebuah record. Dengan kata lain, array string atau angka tidak menjadi masalah untuk sebuah contoh CKRecord
.
Record diatur dalam zona record. sebuah grup zona record terhubung. Grup zona record terkait record. Database public dan private masing-masing memiliki sebuah zona record default, namun memungkinkan untuk membuat zona record custome jika diperlukan. Zona record adalah topik lanjutan yang tidak akan kita bahas secara rinci dalam seri ini.
Hubungan
Hubungan antar record dikelola oleh instance dari classCKReference
. Mari kita lihat contoh untuk lebih memahami bagaimana tepatnya relationships bekerja. Aplikasi yang akan kami buat dalam seri ini akan mengelola sejumlah daftar belanja. Setiap daftar dapat memiliki nol atau lebih banyak item di dalamnya. Ini berarti bahwa setiap item harus memiliki referensi ke daftar miliknya.



Penting untuk memahami bahwa item tersebut menyimpan referensi ke daftar. Selama masih mungkin untuk membuat sebuah array dari contoh CKReference
untuk item daftar, akan lebih mudah — dan disarankan — untuk menyimpan foreing key dengan item tersebut, bukan daftarnya. Ini juga yang direkomendasikan oleh Apple.
Cara CloudKit mengelola hubungan cukup mendasar, namun hal itu memberikan opsi untuk secara otomatis menghapus record anakan ketika record induknya dihapus. Kami akan melihat sedikit lebih dekat hubungan dalam serial ini nantinya.
Aset - aset
Saya juga ingin menyebutkan class CKAsset
. Meskipun dimungkinkan untuk menyimpan gumpalan data dalam sebuah record, data tidak terstruktur (seperti gambar, audio, dan video) harus disimpan sebagai instance CKAsset
. Sebuah instance CKAsset
selalu dikaitkan dengan sebuah record, dan ini berhubungan dengan file pada disk. Kita tidak akan bekerja dengan class CKAsset
dalam seri ini.
Autentikasi
Saya yakin Anda setuju bahwa CloudKit terlihat sangat menarik. Namun, ada detail penting yang belum kita bahas: otentikasi. User mengotentikasi sendiri melalui akun iCloud mereka. Pengguna yang tidak masuk ke akun iCloud tidak dapat menulis data ke iCloud.
Meskipun ini berlaku untuk semua API iCloud, perlu diingat bahwa aplikasi yang hanya mengandalkan CloudKit tidak akan berfungsi sangat baik dalam kasus itu. Yang dapat Semua pengguna lakukan adalah mengakses data dalam database publik, jika diizinkan oleh pengembang.
Membaca Data
Pengguna yang tidak masuk ke akun iCloud mereka masih dapat membaca data dari database publik. Tak usah dikatakan bahwa database pribadi tidak dapat diakses karena iCloud tidak tahu siapa yang menggunakan aplikasi ini.
Membaca dan Menulis
Ketika sign in, pengguna dapat membaca dan menulis ke database publik dan private mereka. Saya sudah menyebutkan bahwa Apple sangat memperhatikan privasi. Akibatnya, record yang disimpan dalam database private hanya dapat diakses oleh pengguna. Bahkan Anda, pengembang, tidak dapat melihat data yang disimpan pengguna dalam database private mereka. Ini adalah kelemahan Apple dalam mengelola back end aplikasi Anda, namun ini adalah keuntungan yang pasti bagi pengguna.
Daftar Belanja
Aplikasi yang akan kita bangun akan mengelola daftar belanja Anda. Setiap daftar belanja akan memiliki nama dan nol atau lebih banyak item. Setelah membangun aplikasi daftar belanja, anda harus merasa sangat nyaman menggunakan framework CloudKit di dalam sebuah proyek milik anda sendiri.
Prasayarat
Untuk turtorial ini, saya akan menggunakan Xcode 9 dan Swift 4. Jika Anda menggunakan Xcode versi lama, perlu diingat bahwa Anda menggunakan versi bahasa pemrograman Swift yang berbeda. Ini berarti anda perly memperbarui source code project untuk memuaskan si compiler. Perubahan kebanyakan sedikit(minor), tetapi penting untuk menyadari hal ini.
Karena CloudKit adalah topik lanjutan, saya akan menganggap Anda sudah mengenal Xcode dan bahasa pemrograman Swift. Jika Anda baru dalam pengembangan iOS, maka saya sarankan untuk membaca tutorial pengantar terlebih dahulu atau mengambil salah satu program kami di pengembangan Swift:
- SwiftMembuat Aplikasi iOS dengan SwiftMarkus Mühlberger
- Design PatternSwift Design PatternDerek Jensen
Pastikan untuk mengeceknya jika anda baru dalam pengembangan iOS atau bahasa Swift.
Pengaturan Proyek
Saatnya mulai menulis beberapa kode. Luncurkan Xcode dan buat proyek baru berdasarkan template aplikasi Single View.



Beri nama proyek anda dan sebuah identifier organisasi. Identifier bundle yang dihasilkan akan digunakan untuk membuat ideontifier default container dari aplikasi anda. Identifier itu harus unik di seluruh akun pengembang saat mereka berbagi satu namespace global. Oleh karena itu penting untuk mengikuti saran Apple dan menggunakan notasi nama domain terbalik.



Mengaktifkan iCloud
Langkah selanjutnya adalah mengaktifkan iCloud dan CloudKit. Pilih proyek dalam Project Navigator di sebelah kiri dan pilih target untuk aplikasi Anda dari daftar target. Buka tab General dan tetapkan Team ke team yang benar. Untuk menghindari masalah apa pun pada langkah berikutnya, verifikasi bahwa akun pengembang Anda memiliki izin yang diperlukan untuk membuat ID Aplikasi.



Selanjutnya, buka tab Capabilities di sebelah atas dan atur switch untuk iCloud menjadi aktif. Xcode akan membutuhkan waktu sejenak untuk membuat ID Aplikasi atas nama Anda. Ini juga akan menambah hak yang diperlukan untuk ID Aplikasi. Jika ini tidak berhasil, pastikan team sudah disetel dengan benar dan anda memiliki izin yang diperlukan untuk membuat ID Aplikasi.



Mengaktifkan CloudKit sesederhana memeriksa checkbox berlabel CloudKit. Secara default, aplikasi Anda akan menggunakan penampung default untuk aplikasi Anda. Penampung ini dibuat secara otomatis untuk Anda saat Anda mengaktifkan CloudKit.
Jika aplikasi Anda membutuhkan akses ke sebuah container yang berbeda atau ke multiple container, periksa checkbox berlabel Specify custom containers dan periksa container yang butuh diakses aplikasi Anda.



Anda mungkin telah memperhatikan bahwa Xcode secara otomatis menghubungkan target Anda ke framework CloudKit. Ini berarti Anda siap untuk mulai menggunakan CloudKit di aplikasi Anda.
Mari Kita Mencobanya
Di tutorial berikutnya dalam seri ini, kami akan menambahkan kemampuan untuk add, edit, dan remove daftar belanja. Untuk menyelesaikan tutorial ini, bagaimanapun, saya ingin membuat kaki Anda basah dengan menunjukkan kepada Anda bagaimana berinteraksi dengan CloudKit API. Yang akan kita lakukan adalah mengambil record pengguna yang saat ini sedang masuk (signed-in).
Buka ViewController.swift dan tambahkan code import dibagian atas untuk meng-import framework CloudKit
1 |
import UIKit |
2 |
import CloudKit |
Untuk mengambil catatan pengguna, pertama kita perlu mengambil rekaman pengenal. Mari kita lihat bagaimana ini bekerja. Saya sudah membuat sebuah method pendukung, fetchUserRecordID
, untuk mengangkut logika untuk mengambil record identifier milik pengguna. Kita menggunakan metode ini dalam metode pengontrol tampilan viewDidLoad
.
1 |
override func viewDidLoad() { |
2 |
super.viewDidLoad() |
3 |
|
4 |
// Fetch User Record ID
|
5 |
fetchUserRecordID() |
6 |
}
|
Implementasi dari fetchUserRecordID
sedikit lebih menarik dibandingkan viewDidLoad
. Kita mengambil sebuah referensi ke container default milik aplikasi dengan meminta defaultContainer
pada CKContainer
class. Kemudian kita panggil fetchUserRecordIDWithCompletionHandler(_:)
pada defaultContainer
. Metode ini menerima penutupan sebagai satu-satunya argumennya.
1 |
private func fetchUserRecordID() { |
2 |
// Fetch Default Container
|
3 |
let defaultContainer = CKContainer.default() |
4 |
|
5 |
// Fetch User Record
|
6 |
defaultContainer.fetchUserRecordID { (recordID, error) -> Void in |
7 |
if let responseError = error { |
8 |
print(responseError) |
9 |
|
10 |
} else if let userRecordID = recordID { |
11 |
DispatchQueue.main.sync { |
12 |
self.fetchUserRecord(recordID: userRecordID) |
13 |
}
|
14 |
}
|
15 |
}
|
16 |
}
|
Penutup menerima dua argumen: contoh CKRecordID
opsional dan instance NSError
. Jika error
maka nil
, Kita membuka recordID
dengan aman.
Penting untuk menekankan bahwa penutupan akan dipanggil pada urutan background. ni berarti Anda harus berhati-hati saat memperbarui user interface aplikasi Anda dari dalam penutupan yang diminta oleh CloudKit. Di dalam fetchUserRecordID
, misalnya, saya dengan jelas memanggilfetchUserRecord(_:)
di urutan pertama.
Di dalam fetchUserRecord(_:)
, kami mengambil record pengguna dengan memberi tahu CloudKit record mana yang kami inginkan. Perhatikan bahwa kita memanggil fetchRecordWithID(_:completionHandler:)
pada objek privateDatabase
, sebuah properti dari objek defaultContainer
.
Method tersebut menerima instance CKRecordID
dan sebuah penanganan yang sempurna. Yang terakhir menerima instance CKRecord
opsional dan sebuah instance NSError
. Jika kita berhasil mengambil record pengguna, kita mencetaknya ke console Xcode.
1 |
private func fetchUserRecord(recordID: CKRecordID) { |
2 |
// Fetch Default Container
|
3 |
let defaultContainer = CKContainer.default() |
4 |
|
5 |
// Fetch Private Database
|
6 |
let privateDatabase = defaultContainer.privateCloudDatabase |
7 |
|
8 |
// Fetch User Record
|
9 |
privateDatabase.fetch(withRecordID: recordID) { (record, error) -> Void in |
10 |
if let responseError = error { |
11 |
print(responseError) |
12 |
|
13 |
} else if let userRecord = record { |
14 |
print(userRecord) |
15 |
}
|
16 |
}
|
17 |
}
|
Saat Anda menjalankan aplikasi di Xcode, Anda akan melihat di console sesuatu yang mirip dengan:



Seharusnya ini menjadikan anda mencicipi framework CloudKit. API modernnya intuitif dan mudah digunakan. Dalam tutorial berikutnya, kami akan menggali lebih dalam tentang kemungkinan pada API CloudKit.
Anda dapat mengkloning proyek sampel lengkap, di GitHub (tag #introduction
).
Kesimpulan
Anda sekarang harus memiliki pemahaman yang tepat tentang dasar-dasar framework CloudKit. Sisa dari seri ini akan difokuskan untuk membangun aplikasi daftar belanja. Di tutorial berikutnya, kita akan mulai dengan menambahkan kemampuan untuk menambah, mengedit, dan menghapus daftar belanja.