Realm Swift ha un modo per eliminare e creare un nuovo file di Reame crittografato con una nuova chiave (ma con lo stesso nome file)?Realm Swift iOS - cancellazione e reinserimento sicuro di un dominio crittografato
mio caso d'uso: quando un utente accede dalla mia app, ho eliminare il file crittografato .realm, dal momento che la chiave di cifratura verrà eliminato anche:
static func deleteRealm() {
let configuration = Realm.Configuration()
let path = NSURL.fileURLWithPath(configuration.path!)
.URLByDeletingLastPathComponent?
.URLByAppendingPathComponent("encrypted.realm")
.path!
if NSFileManager.defaultManager().fileExistsAtPath(path) {
// Delete realm
try! NSFileManager.defaultManager().removeItemAtPath(path)
}
}
}
(Purtroppo, chiamando realm.deleteAll()
non sarà sufficiente, dal momento che c'è una nuova chiave)
Ma quando un altro utente si collega subito dopo il log out e ho tentano di ri-inizializzare un regno crittografato DB con una nuova chiave, in questo modo:
static func intializeRealm() -> Realm! {
let realmKey = generateSecureRealmKey()
var configuration = Realm.Configuration()
configuration.path = RealmDB.getRealmPath()
configuration.encryptionKey = NSData(bytes: realmKey, length: realmKey.count)
return try! Realm(configuration: configuration)
}
ottengo questa eccezione:
*** Terminating app due to uncaught exception 'RLMException',
reason: 'Realm at path '****/encrypted.realm' already opened
with different encryption key'
Sembra che il vecchio configuration cache
è ancora in uso (dal momento che il nome del file è lo stesso), anche se il file regno è stato eliminato.
Il sample encryption app for Realm Swift utilizza autoreleasepool
per aggirare questo problema, ma ciò non sembra fattibile per un'app più grande. O è? Dovrei circondare tutti gli usi del regno con autoreleasepool
?