Realm Swift iOS – 安全地删除和重新键入加密的Realm
发布时间:2020-12-14 04:59:49 所属栏目:百科 来源:网络整理
导读:Realm Swift是否有某种方法可以安全地删除并使用新密钥创建新的加密Realm文件(但文件名相同)? 我的用例:当用户退出我的应用程序时,我删除了加密的.realm文件,因为加密密钥也将被删除: static func deleteRealm() { let configuration = Realm.Configurati
Realm
Swift是否有某种方法可以安全地删除并使用新密钥创建新的加密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()是不够的,因为有一个新密钥) 但是当另一个用户在注销后立即登录并尝试使用新密钥重新初始化加密的Realm 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' 即使已删除领域文件,似乎仍在使用旧的配置缓存(因为文件名相同). sample encryption app for Realm Swift使用autoreleasepool来解决这个问题,但对于更大的应用程序来说这似乎不可行.或者是吗?我是否必须用autoreleasepool包围所有领域的用途? 解决方法
在删除现有Realm数据库或在同一路径上创建具有新加密密钥的新数据库之前,您需要确保关闭所有Realm访问者.但正如您所指出的那样,在较大的应用程序中可能难以实现.最简单的方法是使用新的文件路径.出于这个原因,我建议将实际数据库本身的删除推迟到下一个应用程序启动.您可以通过将路径存储到当前使用的Realm并删除同一目录中的所有其他.realm文件及其所有辅助文件来实现此目的.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |