Чтобы уточнить, это вопрос о резервном копировании отдельного файла Realm непосредственно на iCloud Drive, чтобы он отображался в приложении iCloud Drive. Не синхронизировать содержимое файла с хранилищем CloudKit.
Если вы оставите файл Realm в каталоге Documents, то если пользователь выполнит резервное копирование iCloud или iTunes, файл будет скопирован. Все это означает, что если пользователь решает перейти на новое устройство и выполнить восстановление с использованием резервного образа старого устройства, тогда будет восстановлен файл Realm. Если пользователь удалит приложение с вашего старого устройства до этого, резервная копия iCloud также будет удалена.
Если вы хотите экспортировать свой файл Realm, чтобы его можно было сохранить и получить в iCloud Drive, вы можете экспортировать копию файла Realm в iCloud ubiquity container вашего приложения. Это в основном просто другая папка, такая как папка разделяемой группы, но она управляется iCloud. Эта папка ведет себя как Dropbox в том, что все, что вы вставляете, автоматически синхронизируется.
Код будет выглядеть примерно так:
let containerURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)
let realmArchiveURL = containerURL.appendPathComponent("MyArchivedRealm.realm")
let realm = try! Realm()
try! realm.writeCopy(toFile: realmArchiveURL)
Это действительно простой пример. Документация Apple рекомендует делать это в фоновом потоке, так как настройка папки iCloud в первый раз может создать некоторое время.
Обновление не произойдет автоматически. Вам нужно будет экспортировать новую копию Королевства каждый раз, когда пользователь хочет выполнить резервное копирование.
Хорошо, я делаю копию в контейнере ubiquity, но если пользователь удалит мое приложение и переустановит его ... Могу ли я показать список резервных копий, сохраненных на его iCloud Drive, и решить восстановить, или iCloud автоматически повторит синхронизацию эта папка не спрашивает пользователя никому? –
Я лично сам не пробовал, поэтому не могу сказать точно, но да, я бы ожидал, что данные будут сохраняться в контейнере ubiquity, даже если приложение будет удалено на исходном устройстве. – TiM