Working with CloudKit
The most impressive people I know spent their time with their head down getting shit down for a long, long time.
- Sam Altman
Let's start with some history. When Steve Jobs unveiled iCloud to complement iOS 5 and OS X Lion at Apple's annual Worldwide Developers Conference (WWDC) in 2011, it gained a lot of attention but came as no surprise. Apps and games could store data on the cloud and have it automatically synchronize between Macs and iOS devices.
But iCloud fell short as a cloud server.
Developers are not allowed to use iCloud to store public data for sharing. It is limited to sharing information between multiple devices that belong to the same user. Take our Food Pin app as an example - you can't use the classic version of iCloud to store your favorite restaurants publicly and make them available for other app users. The data, that you store on iCloud, can only be read by you.
If you wanted to build a social app to share data amongst users at that time, you either came up with your home-brewed backend server (plus server-side APIs for data transfer, user authentication, etc) or relied on other cloud service providers such as Firebase and Parse.
Note: Parse was a very popular cloud service at the time. But Facebook announced the demise of the service on January 28, 2016.
In 2014, the company reimagined iCloud functionality and offered entirely new ways for developers, as well as, users to interact with iCloud. The introduction of CloudKit represents a big improvement over its predecessor and the offering is huge for developers. You can develop a social networking app or add social sharing features easily using CloudKit.
In WWDC 2016, Apple announced the introduction of Shared Database. Not only can you store your data publicly or privately, CloudKit now lets you store and share the data with a group of users.
CloudKit makes developers' lives easier by eliminating the need to develop our own server solutions. With minimal setup and coding, CloudKit empowers your app to store data, including structured data and assets, in the cloud.
Best of all, you can get started with CloudKit for free (with limits). It starts with:
- 10GB for assets (e.g. images)
- 100MB for database
- 2GB for data transfer
As your app becomes more popular, the CloudKit storage grows with you and adds an additional 250MB for every single user. For each developer account, you can scale all the way up to the following limits:
- 1PB assets
- 10TB database
- 200TB data transfer
That's a massive amount of free storage and is sufficient for the vast majority of apps. According to Apple, the storage should be enough for about 10 million free users.
With CloudKit, we were able to focus on building our app and even squeeze in a few extras.
In this chapter, I will walk you through the integration of iCloud using the CloudKit framework. But we will only focus on the Public database. Similar to the web views we discussed in the previous chapter, there is no specific CloudKit components provided by the SwiftUI framework. I will show you how to apply the CloudKit APIs in SwiftUI projects. In particular, you will learn how to retrieve and manage records on the iCloud database. We will enhance the app to let users share their favorite restaurants anonymously and upload it to the public database of iCloud. All users can view others' favorite restaurants in the Discover tab.
There is a catch, however. You have to enroll in the Apple Developer Program (USD99/year). Apple opens up the CloudKit storage for paid developers only. If you're serious about creating your app, it's time to enroll in the program and build some CloudKit-based apps.
To access the full version of the book, please get the full copy here. You will also be able to access the full source code of the project.