How one can use iCloud drive paperwork?

iCloud drive mission setup tutorial

Let’s begin by creating a brand new mission for iOS. You may choose the only view software template, don’t fret an excessive amount of about doc primarily based apps, as a result of on this tutorial we’re not going to the touch the UIDocument class in any respect. πŸ€·β€β™‚οΈ

Step one is to allow iCloud capabilities, which is able to generate a brand new entitlements file for you. Additionally you may should allow the iCloud software service for the app id on the Apple developer portal. You also needs to assign the iCloud container that is going for use to retailer knowledge. Just some clicks, however you must do that manually. πŸ’©

You want a sound Apple Developer Program membership to be able to set superior app capabilities like iCloud assist. So you must pay $99/yr. #greed πŸ€‘

So I consider that now you’ve gotten a correct iOS app identifier with iCloud capabilities and software companies enabled. One final step is forward, you must add these few strains to your Data.plist file to be able to outline the iCloud drive container (folder identify) that you will use. Notice that you would be able to have a number of containers for one app.


Lastly we’re prepared to maneuver ahead with some precise coding. πŸ’»

Information inside iCloud drive containers

Working with iCloud recordsdata utilizing Swift is comparatively straightforward. Principally you simply should get the bottom url of your iCloud drive container, and you are able to do no matter you need. πŸ€” Nevertheless I will present you some finest practices & methods.

See also  Constructing and loading dynamic libraries at runtime in Swift

First you must examine in case your container folder already exists, if not you need to create it by hand utilizing the FileManager class. I’ve additionally made a “shortcut” variable for the container base url, so I haven’t got to jot down all these lengthy phrases once more. πŸ˜…

var containerUrl: URL? {
    return FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Paperwork")

if let url = self.containerUrl, !FileManager.default.fileExists(atPath: url.path, isDirectory: nil) {
    do {
        attempt FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)
    catch {

Working with paths contained in the iCloud drive container is easy, you’ll be able to append path parts to the bottom url and use that actual location url as you need.

let myDocumentUrl = self.containerUrl?

Choosing current recordsdata can be fairly simple. You need to use the built-in doc picker class from UIKit. There are solely two catches right here. πŸ€¦β€β™‚οΈ

First one is that it is advisable to present the kind of the paperwork that you simply’d prefer to entry. Have you ever ever heard about UTI‘s? No? Perhaps sure…? The factor is that you must discover the right uniform kind identifier for each file kind, as an alternative of offering an extension or mime-type or one thing generally used factor. Sensible one, huh? 🧠

let picker = UIDocumentPickerViewController(documentTypes: ["public.json"], in: .open)
picker.delegate = self
picker.modalPresentationStyle = .fullScreen
self.current(picker, animated: true, completion: nil)

See also  10 little UIKit ideas you must know

The second catch is that you must “unlock” the picked file earlier than you begin studying it. That may be executed by calling the startAccessingSecurityScopedResource methodology. Remember to name the stopAccessingSecurityScopedResource methodology, or issues are going to be out of steadiness. You don’t need that, belief me! #snap 🧀

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
        controller.documentPickerMode == .open,
        let url = urls.first,
    else {
    defer {

All the pieces else works as you’d count on. It can save you recordsdata instantly into the container by way of file APIs or through the use of the UIDocumentPickerViewController occasion. Listed below are a number of the commonest api calls, that you need to use to control recordsdata.

attempt string.write(to: url, atomically: true, encoding: .utf8)
attempt String(contentsOf: url)

attempt knowledge.write(to: url, choices: [.atomic])
attempt Knowledge(contentsOf: url)

FileManager.default.copyItem(at: native, to: url)
FileManager.default.removeItem(at: url)

You may learn and write any sort of string, knowledge. Through the use of the FileManager you’ll be able to copy, transfer, delete objects or change file attributes. All of your paperwork saved inside iCloud drive shall be magically obtainable on each gadget. Clearly you must be logged in together with your iCloud account, and have sufficient free storage. πŸ’°


If you happen to alter one thing in your settings you may need to increment your construct quantity as nicely to be able to notify the working system concerning the modifications. πŸ’‘

See also  Presenting {a partially} seen backside sheet in SwiftUI on iOS 16

On the mac all of the iCloud drive recordsdata / containers are situated below the person’s Library folder contained in the Cell Paperwork listing. You may merely use the Terminal or Finder to go there and listing all of the recordsdata. Professional tip: search for hidden ones as nicely! πŸ˜‰

cd ~/Library/Cell Paperwork
ls -la

You too can monitor the exercise of the CloudDocs daemon, through the use of this command:

brctl log --wait --shorten

The output will inform you what’s truly occurring throughout the sync.

I encourage you to examine the handbook entry for the brctl command, as a result of there are a number of extra flags that may make troubleshooting simpler. 🀐

This text was closely impressed by Marcin Krzyzanowski‘s actually outdated weblog publish. 🍺

Leave a Reply