Существует ли API для емкости и использования диска iCloud?

Я использую NSFileManager для получения текущего дискового пространства устройства (всего, используемого и свободного), например...

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

Есть ли способ сделать что-то подобное для учетной записи пользователя iCloud? Я хочу, чтобы предоставить пользователю iCloud статистику дискового пространства в приложении.

Ответ 1

Производительность

iCloud онлайн-емкость определяется Apple. Размер локального кеша устанавливается ограничениями на вашем диске. Мой предыдущий ответ указывал емкость диска. Ваш образец должен возвращать размер вашего собственного устройства.

FileSize

Ниже приведен ответ, который поможет вам определить размер файла контейнера контейнера iCloud. Существуют и другие методы, такие как перечисление подпапок, которые могут быть тем, что вы хотите. Я представляю простейшую вещь, которая должна работать works ниже (я ее не тестировал). Дайте мне знать, если вы ищете что-то другое.

Согласно Apple docs и Быстрая справка в Xcode, похоже, вы можете посмотреть URLForUbiquityContainerIdentifier

Возвращает URL-адрес контейнера iCloud, связанного с указанным идентификатор и устанавливает доступ к этому контейнеру. URL, указывающий на указанный контейнер для вездесущности, или nil, если контейнер не может быть или если хранилище iCloud недоступно для текущего пользователя или устройство.

Важное примечание об использовании этого свойства:

1

Учитывая эту информацию, что-то вроде этого может работать... Обязательно проверьте документацию, оперативную справку и файлы заголовков для любых дополнительных оговорок.

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)")
        }
    }
})