第 24 章
探索 CloudKit

The most impressive people I know spent their time with their head down getting shit down for a long, long time.

- Sam Altman

我們回顧一下歷史,當史蒂夫.賈伯斯(Steve Jobs )在 2011 年蘋果年度世界開發者大會(Worldwide Developers Conference,簡稱WWDC),公布了 iCloud 作為 iOS5 與 OS X Lion 的輔助功能時,獲得了很大的關注,但是結果卻不令人驚豔。App 與遊戲可以將資料儲存在雲端,並且會自動在 Mac 與 iOS 裝置間做同步。

但是iCloud 作為雲端伺服器卻大打折扣。

開發者並不被允許為了分享而使用 iCloud 來儲存公共資料。對於同一位使用者來說, 在多個裝置間分享資訊是受限的。以 FoodPin App 為例,你不能使用 iCloud 的經典版公共儲存你最喜愛的餐廳,並將其分享給其他的 App 使用者。儲存在 iCloud 上的資料,只有你能夠閱讀。

當你想建立一個社群 App,以便在某時分享資料給其他使用者,則不是只能用自己的後台伺服器(加上伺服端 API 作為資料傳輸用、使用者認證等),就是依賴其他如 Firebase 或 Parse 的雲端伺服器供應商所提供的服務。

Note: Parse 在那時期非常受到歡迎。但是 Facebook 在 2016年1月 28 號宣布要終止其服務。

在 2014 年,蘋果公司重新規劃 iCloud 的功能,並提供全新的方式給開發者,以及讓使用者能夠與 iCloud 互動。 CloudKit 的推出相對於其前身是很大的改善,而且對開發者有巨大的貢獻。你可以輕鬆使用 CloudKit 開發社群網路App,或加上一些社群分享功能。

當你有一個網頁 App,並想和你的 iOS App 一樣在 iCloud 存取相同的資料呢? Apple 為 CloudKit 進一步導入了CloudKit 網頁服務或 JavaScript 函式庫的 CloudKit JS,跟你的 App 一樣,你可以使用這個新的函式庫來開發一個可以存取 iCloud 上相同資料的網頁 App,如圖 24-1 所示。

圖 24-1. 儲存你的資料至雲端
圖 24-1. 儲存你的資料至雲端

在 2016 WWDC,Apple 宣布導入共享資料庫。除了可以選擇儲存你的資料為公共或私有,CloudKit 現在可以讓你與一群使用者共同儲存或者共享資料。

CloudKit 使開發者的生活更輕鬆寫意了,因為已不需要開發自己的伺服器方案。只需要簡單的設定與少量的程式碼,CloudKit 便能使你的 App 能夠儲存資料至雲端,包括結構式資料與素材。

最棒的是,你可以免費馬上使用CloudKit(有一些限制)。一開始你可以使用:

  • 10GB 的素材空間(例如:圖片)。
  • 100MB 的資料庫空間。
  • 2GB 的流量。

當你的 App 變得更受歡迎了,CloudKit 的儲存量會和你一起成長,並為每一個使用者多加 250MB。每一個開發者帳號可以此方式不斷增大,直到達到下列的使用限制:

  • 1PB 的素材空間。
  • 10TB 的資料庫空間。
  • 200TB 的流量。

這是巨量的免費儲存空間,已經足夠應付多數的 App。根據 Apple 的 iCloud 計算器 的統計,這樣的儲存量大約可滿足1000 萬的免費使用者。

有了CloudKit,我們將能夠專注在我們的App,甚至可以多做幾個。

- Hipstamatic

在本章中,我將逐步讓你了解如何使用 CloudKit 框架來整合 iCloud。不過我們只會將重點放在公共資料庫。

如前所述,你將透過實作 FoodPin App 的功能來學習這個 API。我們會加強這個 App, 讓使用者匿名分享其最喜愛的餐廳,所有的使用者都可以在 Discover 標籤檢視其他人的最愛,這會變得更加有趣。

不過要注意的是,你必須申請 Apple 開發者計畫(每年美金99 元),然後 Apple 會開啟一個 CloudKit 儲存空間。如果你很認真地建立你的 App,是時候要申請計畫來建構一些以 CloudKit 為基礎的 App。

了解 CloudKit 框架

CloudKit 不僅可儲存而已。Apple 提供 CloudKit 框架給開發者與 iCloud 互動。CloudKit 框架從 iCloud 伺服器提供處理資料傳遞的服務,是一種可以讓你的使用者的 App 資料從裝置傳輸到雲端的機制。

重要的是,CloudKit 並不會提供任何本地端永久保存,只提供最小的離線快取支援。當你需要做快取來將資料持久保留在本地端,你需要自行開發你自己的解決方案。

容器與資料庫是 CloudKit 框架最基礎的元素。每個 App 有自己的容器來處理自己的內容。預設上,一個 App 對應一個容器,容器是以 CKContainer 類別來表示。

在容器內,包含了公共資料庫(Public Database )、共享資料庫(Shared Database )與私有資料庫(Private Database )的資料儲存形式。很顯然的,公共資料庫允許所有的 App 使用者存取,並且設計為儲存可共享的資料。若是資料儲存在私有資料庫,只能讓單一使用者檢視。而資料儲存在共享資料庫(iOS 10 導入),則可以讓一群使用者一起共享,如圖 24-2 所示。

Apple 讓你按照 App 的需求選擇資料庫形式,例如:你正開發一個類似 Instagram 的 App,你可以使用公共資料庫儲存使用者所上傳的照片,而當你想做一個待辦事項(to-do )App,則你可能想要使用私有資料庫儲存每個使用者的待辦事項。公共資料庫不需要使用者啟動 iCloud 帳戶,除非你需要將資料寫進公共資料庫。使用者在存取它的私有資料庫前則須先登入 iCloud。 在CloudKit 框架,資料庫是以 CKDatabase 類別表示。

圖 24-2. 容器與資料庫間的示意圖
圖 24-2. 容器與資料庫間的示意圖

再往下一層瀏覽是記錄區(Record Zone )。CloudKit 並非以鬆散方式儲存資料,相反的,資料記錄被劃分在不同記錄區。根據資料庫的類型,它支援不同類型的記錄區。私有資料庫與公共資料庫都有一個預設區,足夠應付大多數的運用。也就是說,有需要的話也可以建立客製區(Custom Zone )。記錄區是以框架的 CKRecordZone 類別來表示,如圖 24-3 所示。

資料交換的核心就是記錄(Record ),以 CKRecord 類別表示。記錄基本上是一個鍵值(key-value )配對的字典。鍵代表記錄欄位,鍵所關聯的值則是特定記錄欄位的值。每一個記錄有一個記錄型態,記錄型態是由開發者在 CloudKit 儀表板中所定義。此刻,你應該會對這些名詞感到困惑,但不必擔心,透過一些範例的介紹後,你便會明白我的意思了。

本文摘自《iOS 13 App程式設計實戰心法》一書,博碩授權轉載。如果你想更深入學習Swift程式設計和下載完整程式碼,你可以從AppCoda網站購買完整電子版。

results matching ""

    No results matching ""