18.4 C
New York
Monday, March 10, 2025

Easy methods to use iCloud drive paperwork?


Discover ways to sync recordsdata and knowledge by a shared iCloud drive folder utilizing the most recent model of Swift programming language.

iCloud drive challenge setup tutorial

Let’s begin by creating a brand new challenge for iOS. You may choose the only view utility template, don’t fear an excessive amount of about doc based mostly apps, as a result of on this tutorial we’re not going to the touch the UIDocument class in any respect. 🤷‍♂️

Easy methods to use iCloud drive paperwork?

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

NOTE: You want a legitimate Apple Developer Program membership to be able to set superior app capabilities like iCloud assist. So you must pay $99/12 months. #greed 🤑

iCloud

So I consider that now you’ve gotten a correct iOS app identifier with iCloud capabilities and utility providers enabled. One final step is forward, you must add these few traces to your Information.plist file to be able to outline the iCloud drive container (folder title) that you just’re going to make use of. Be aware that you would be able to have a number of containers for one app.

NSUbiquitousContainers

    iCloud.com.tiborbodecs.teszt
    
        NSUbiquitousContainerIsDocumentScopePublic
        
        NSUbiquitousContainerName
        Teszt
        NSUbiquitousContainerSupportedFolderLevels
        Any
    

Lastly we’re prepared to maneuver ahead with some precise coding. 💻

Recordsdata inside iCloud drive containers

Working with iCloud recordsdata utilizing Swift is comparatively straightforward. Mainly you simply should get the bottom URL of your iCloud drive container, and you are able to do no matter you need. 🤔 Nonetheless I’ll present you some finest practices & tips.

First you must examine in case your container folder already exists, if not it is best to create it by hand utilizing the FileManager class. I’ve additionally made a “shortcut” variable for the container base URL, so I don’t have to jot down all these lengthy phrases once more. 😅

var containerUrl: URL? {
    FileManager.default.url(
        forUbiquityContainerIdentifier: nil
    )?.appendingPathComponent("Paperwork")
}
// examine for container existence
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 {
        print(error.localizedDescription)
    }
}

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 precise location URL as you need.

let myDocumentUrl = self.containerUrl?
    .appendingPathComponent(subDirectory)
    .appendingPathComponent(fileName)
    .appendingPathExtension(fileExtension)

Selecting current recordsdata can be fairly easy. You need to use the built-in doc picker class from UIKit. There are solely two catches right here. 🤦‍♂️

First one is that it’s essential to present the kind of the paperwork that you just’d wish to entry. Have you ever ever heard about UTI’s? No? Possibly sure…? The factor is that you must discover the right uniform kind identifier for each file kind, as a substitute of offering an extension or mime-type or one thing generally used factor. Good one, huh? 🧠

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

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. Don’t neglect 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]
) {
    guard
        controller.documentPickerMode == .open,
        let url = urls.first,
        url.startAccessingSecurityScopedResource()
    else {
        return
    }
    defer {
        url.stopAccessingSecurityScopedResource()
    }
    // do some work with the url
}

Every part else works as you’d anticipate. It can save you recordsdata instantly into the container by file APIs or by utilizing the UIDocumentPickerViewController occasion. Listed below are a number of the commonest api calls, that you need to use to control recordsdata.

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

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

// file supervisor
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 will probably be magically obtainable on each machine. Clearly you must be logged in along with your iCloud account, and have sufficient free storage. 💰

Debugging

In case you alter one thing in your settings you would possibly need to increment your construct quantity as nicely to be able to notify the working system concerning the modifications. 💡

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

cd ~/Library/Cellular Paperwork
ls -la
# ls -la|grep tiborbodecs

You can even monitor the exercise of the CloudDocs daemon, by utilizing this command:

# man brctl
brctl log --wait --shorten

The output will let you know what’s truly taking place through the sync.

Debug

I encourage you to examine the handbook entry for the brctl command, as a result of there are a couple of extra flags that may make troubleshooting less difficult. 🤐

This text was closely impressed by Marcin Krzyzanowski’s actually previous weblog publish. 🍺

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles