Realm Swift có cách nào đó để xóa an toàn và tạo một tệp Realm được mã hóa mới bằng một khóa mới (nhưng cùng tên tệp) không?Realm Swift iOS - xóa và khóa lại một cách an toàn Realm
trường hợp sử dụng của tôi: khi người dùng đăng ra khỏi ứng dụng của tôi, tôi xóa các tập tin .realm mã hóa, vì chìa khóa mã hóa cũng sẽ bị xóa:
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)
}
}
}
(Thật không may, gọi realm.deleteAll()
sẽ không đủ, kể từ khi có một chìa khóa mới)
Nhưng khi một người dùng đăng nhập ngay sau khi đăng xuất và tôi cố gắng để tái intialize một Realm mã hóa DB với một chìa khóa mới, như thế này:
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)
}
tôi nhận được ngoại lệ này:
*** Terminating app due to uncaught exception 'RLMException',
reason: 'Realm at path '****/encrypted.realm' already opened
with different encryption key'
Dường như cũ configuration cache
vẫn đang được sử dụng (kể từ khi tên tập tin là như nhau) dù file lĩnh vực đã bị xóa.
sample encryption app for Realm Swift sử dụng autoreleasepool
để giải quyết vấn đề này, nhưng điều đó dường như không khả thi cho ứng dụng lớn hơn. Hoặc là nó? Tôi có phải bao quanh tất cả các công dụng của lĩnh vực với autoreleasepool
?