我使用FMDB来使用sqlite,我更希望避免对SQLCipher的依赖。我如何才能简单地利用DataProtection内置到iOS中的功能呢?这有可能吗?唯一的要求是在手机被盗时保护数据。
如果手机使用PIN解锁,用户可以访问DB --这是他们的数据。
发布于 2013-08-26 12:31:19
查找执行databaseWithPath: (或initWithPath:)操作的行,然后添加:
FMDatabase *db = [FMDatabase databaseWithPath:path];
NSDictionary *attributes = @{NSFileProtectionKey: NSFileProtectionCompleteUnlessOpen};
NSError *error;
BOOL success = [[NSFileManager defaultManager] setAttributes:attributes
ofItemAtPath:path
error:&error];
if (!success) {
NSLog(@"File protection failed: %@", error);
}用于可能值键的NSFileProtectionKey是:
NSFileProtectionNone:该文件没有与其相关的特殊保护。它可以在任何时候读或写。NSFileProtectionComplete:该文件以加密格式存储在磁盘上,当设备被锁定或启动时,无法读取或写入该文件。NSFileProtectionCompleteUnlessOpen:文件以加密格式存储在磁盘上。可以在设备锁定时创建文件,但一旦关闭,则在设备解锁之前不能再次打开文件。如果文件是在解锁时打开的,您可以继续正常访问该文件,即使用户锁定了设备。在创建和打开文件时,会造成较小的性能损失,但在写入或读取文件时则不然。这可以通过在设备解锁时将文件保护更改为NSFileProtectionComplete来减轻。NSFileProtectionCompleteUntilFirstUserAuthentication:该文件以加密格式存储在磁盘上,在设备启动后才能被访问。在用户第一次解锁设备后,即使用户随后锁定设备,应用程序也可以访问该文件并继续访问它。正确的保护类型可能取决于iOS的版本(最后两种保护在iOS 4中不可用),以及设备锁定时是否使用数据库。
发布于 2013-08-24 01:42:34
到目前为止,最简单的方法是打开整个应用程序的数据保护。转到应用程序ID,单击“编辑”,并将“共享和权限”设置为“完全保护”。

用您的新应用程序id信息更新Xcode,从那里开始,它将自动为您的应用程序处理。
https://stackoverflow.com/questions/18326225
复制相似问题