2016-10-16 2 views
0

Я храню файлы в iCloud в качестве средства резервного копирования. Загрузка и загрузка файлов, кажется, работает нормально, но если я удалю приложение на устройстве и переустановить приложение на том же устройстве, я больше не буду видеть файлы, которые были загружены в iCloud (даже с этого устройства перед удалением приложения). Значение ubiquityIdentityToken одинаково для всех установок. Я не пытаюсь синхронизировать между устройствами, просто хранить и извлекать. Я могу видеть файлы в \ Настройки \ ICloud \ управления хранением \ но не работает этот код:Файлы iCloud не видны после переустановки приложения swift

func createListOfSQLBaseFilesIniCloudDocumentsDirectory() -> [String]{ 

    let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") 

    var iCloudBackupSQLFiles = [String]() 

    do{ 
     let directoryContents = try FileManager.default.contentsOfDirectory(at: iCloudDocumentsURL!, includingPropertiesForKeys: nil, options: []) 

     for myFile in directoryContents { 
      if myFile.pathExtension == "sqlite" { 

       let fileWithExtension = myFile.lastPathComponent 
       //backupSQLFiles is an array of full file names - including the extension 
       iCloudBackupSQLFiles.append(fileWithExtension) 

      }//if myFile 
     }//for in 

    } catch let error as NSError { 
     print("Unresolved error \(error), \(error.userInfo)") 
    }//do catch 

    return iCloudBackupSQLFiles 

}//createListOfSQLBaseFilesIniCloudDocumentsDirectory 

Любое руководство будет оценено. Swift 3, iOS 10, Xcode 8

ответ

4

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

Суть в том, что iCloud не автоматически синхронизирует файлы облаков с новым устройством. Ваш код должен это сделать. Поэтому, если вы удалите приложение с устройства (но не из iCloud) и переустановите это приложение, приложение не увидит предыдущие файлы iCloud. Вы можете добавить новые и увидеть их с помощью приведенного выше кода, но на самом деле вы просто видите локальную вездесущую копию контейнера. Чтобы увидеть предыдущие элементы, вам нужно выполнить metadataQuery в iCloud, проанализировать имена файлов из интересующих вас из результатов metadataQuery и затем запустить startDownloadingUbiquitousItem (at :) в каждом файле. Например, сделайте массив файлов в iCloud из результатов metadataQuery и поместите этот захват в цикл for-in.

let fileManager = FileManager.default 
let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents", isDirectory: true) 
let iCloudDocumentToCheckURL = iCloudDocumentsURL?.appendingPathComponent(whateverFileName, isDirectory: false) 

do { 
    try fileManager.startDownloadingUbiquitousItem(at: iCloudDocumentToCheckURL!) 
    print("tested file: \(whateverFileName)") 

} catch let error as NSError { 
    print("Unresolved error \(error), \(error.userInfo)") 
}//do catch 
Смежные вопросы