Realm Swift是否有一些方法可以安全地刪除並使用新密鑰(但文件名相同)創建新的加密Realm文件?Realm Swift iOS - 安全地刪除並重新加密加密的Realm
我的使用案例:當用戶登錄了我的應用程序,我刪除加密.realm文件,因爲加密密鑰也將被刪除:
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)
}
}
}
(不幸的是,呼籲realm.deleteAll()
是不夠的,因爲有一個新的密鑰)
但是,當另一個用戶登錄立即登錄後了,我試圖重新intialize加密的境界DB與新的密鑰,這樣的:
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)
}
我得到這個異常:
*** Terminating app due to uncaught exception 'RLMException',
reason: 'Realm at path '****/encrypted.realm' already opened
with different encryption key'
看來,老configuration cache
仍在使用(因爲文件名是一樣的),即使境界文件已被刪除。
sample encryption app for Realm Swift使用autoreleasepool
來解決這個問題,但這似乎不適用於較大的應用程序。或者是?我是否需要圍繞領域的所有用途與autoreleasepool
?