.realm файл, автоматично архивиран от iCloud

приложението ми беше отхвърлено поради размера на съдържанието, което качва в iCloud. Единственият файл в папката с документи на приложението ми е файлът с база данни default.realm. Мисля, че това е файлът, който iCloud качва. Как мога да попреча на iCloud да качи базата данни в iCloud?

Благодаря.


person bitsoverflow    schedule 22.07.2015    source източник


Отговори (2)


Според Раздел с най-добри практики за архивиране на приложения в ръководството за програмиране на приложения за iOS, <Application_Data>/Library/Caches или <Application_Data>/tmp няма да архивират в iCloud. Като цяло можете да използвате директория <Application_Data>/Library/Caches, за да запазите вашите данни, които няма да архивирате в iCloud.

За да промените пътя на файла на Realm, можете да подадете параметъра path, когато създавате екземпляр на Realm, както по-долу:

let realmPath = NSSearchPathForDirectoriesInDomains(.CachesDirectory, .UserDomainMask, true)[0] as! String
let realm = Realm(path: realmPath.stringByAppendingPathComponent("data.realm"))

В противен случай можете да използвате свойството на файловата система NSURLIsExcludedFromBackupKey, за да изключите файлове и директории от резервни копия (вижте Технически въпроси и отговори QA1719). Ако искате да използвате пътя по подразбиране, има единственият начин да изключите Realm файла от резервните копия.

let realm = Realm()
if let realmPathURL = NSURL(fileURLWithPath: realm.path) {
    realmPathURL.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey, error: nil)
}
person kishikawa katsumi    schedule 22.07.2015
comment
Благодаря ти много! Накрая направих това, което казахте, като зададох defaultPath на ‹Application_Data›/Library/Caches според връзка - person bitsoverflow; 22.07.2015
comment
kishikawa-san Това ще каже на icloud да не архивира data.realm. Какво ще кажете за други файлове като default.realm.lock, default.realm.management/, default.realm.note? Трябва ли да зададем стойността на ресурса и там? - person nacho4d; 23.10.2017
comment
@nacho4d Обикновено задавайте атрибута на директория, която включва области и спомагателни файлове. Но атрибутът е зададен true по подразбиране във v2.10.1. Не е необходимо да го правите сами. github.com/realm/realm-cocoa/pull/5270 - person kishikawa katsumi; 23.10.2017

Изглежда, че API за URL адреси се е променил след публикуването на предишния отговор. Ето как можете да деактивирате архивирането сега:

let realm = try! Realm()
guard var url = realm.configuration.fileURL else {
    return
}
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
try? url.setResourceValues(resourceValues)
person Armands L.    schedule 20.07.2020