Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an API for iCloud disk capacity and usage?

I use NSFileManager to get the current device disk space (total, used, and free) like so...

let systemAttributes = try? NSFileManager.defaultManager().attributesOfFileSystemForPath(NSHomeDirectory() as String)
    let space = (systemAttributes?[NSFileSystemSize] as? NSNumber)?.longLongValue

Is there any way to do something similar for a user's iCloud account? I want to be able to present a user's iCloud disk space statistics within an app.

like image 911
W Dyson Avatar asked Nov 30 '25 02:11

W Dyson


1 Answers

Capacity

iCloud online capacity is determined by Apple. The local cache size is set by the limits on your disk. My earlier answer referenced disk capacity. Your sample should be returning the size of your own device.

FileSize

The answer below has been revised to help you determine the file size of the iCloud container path. There are other methods like enumerating the subpaths which may be what you want. I am presenting the simplest thing that should work works below (I haven't tested it). Let me know if you are looking for something different.

According to Apple docs and the Quick help in Xcode it seems you might want to look at the URLForUbiquityContainerIdentifier

Returns the URL for the iCloud container associated with the specified identifier and establishes access to that container. A URL pointing to the specified ubiquity container, or nil if the container could not be located or if iCloud storage is unavailable for the current user or device.

An important note about using this property:

1

Given that information, something like this may work...Be sure to check the documentation, quick help and header files for any additional caveats.

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), { () -> Void in

    //Note: The container identifier is in your Capabilities > iCloud > Containers
    if let iCloudPath = NSFileManager.defaultManager().URLForUbiquityContainerIdentifier("iCloud.com.yourcompanydomain.app")?.path {

    let pathAttributes = try? NSFileManager.defaultManager().attributesOfItemAtPath(iCloudPath)

    let space = (pathAttributes?[NSFileSize] as? NSNumber)?.unsignedLongLongValue

        dispatch_async(dispatch_get_main_queue()) {
            print ("iCloud disk space: \(space)")
        }
    }
})
like image 195
Tommie C. Avatar answered Dec 02 '25 20:12

Tommie C.



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!