Документы icloud drive не синхронизируются мгновенно между устройствами - PullRequest
1 голос
/ 28 апреля 2020

Я реализовал привод icloud с помощью swift. код выглядит хорошо, как указано в официальном документе, и отлично загружает / скачивает файлы с одного устройства. Теперь при загрузке файла на другое устройство с тем же пользователем облака. невозможно найти файл на этом устройстве. теперь через некоторое время я отключил / включил icloud из настроек облака устройства, затем попытался снова, и он заработал (теперь нашел файл на этом устройстве).

, поэтому здесь возникает несколько вопросов, касающихся этого ниже.

  • isloud не синхронизирует c файлы мгновенно между устройствами (если нет, то как мы можем синхронизировать c файлы между устройствами мгновенно)
  • есть ли способ уведомить устройство о синхронизации c новые созданные файлы в облаке?
  • в настоящее время скопированные файлы в облачный документ, отсутствующий на cloud.com. Итак, как мы можем показать / скрыть скопированные файлы на icloud?

вот код для загрузки / скачивания файлов:

копирование файла в облако

if let cloudURL =  FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") {
  let file = cloudURL.appendingPathComponent("file.txt")
  if (FileManager.default.fileExists(atPath: file.path, isDirectory: nil)) {
    do{
      try FileManager.default.removeItem(at: file)
    }catch let error as NSError {
      print("error",error)
    }
  }

  let localDocumentsURL = DocumentsDirectory.localDocumentsURL.appendingPathComponent("file.txt")
  do {
    try FileManager.default.copyItem(at: localDocumentsURL, to: file)

  } catch let error as NSError{
    print("can not copy file",error)
  }
}

скачать файл из облачного каталога

let fileManager = FileManager.default
    if let cloudURL = fileManager.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents") {
      let file = cloudURL.appendingPathComponent("file.txt")
      do{
        var downloded = false
        try fileManager.startDownloadingUbiquitousItem(at: file)
        while(!downloded){
          if(fileManager.fileExists(atPath: file.path, isDirectory: nil)){
            downloded = true
          }
        }
        let filePath = DocumentsDirectory.localDocumentsURL.appendingPathComponent("file.txt")
        try fileManager.copyItem(at: file, to: filePath)
      }catch let error as NSError {
        print("error",error)
      }
    }
...