问题
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.
回答1:
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:
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)")
}
}
})
来源:https://stackoverflow.com/questions/32428503/is-there-an-api-for-icloud-disk-capacity-and-usage