2

我一直在网上,包括 Apple 的开发网站,但我找不到任何关于如何设置应用程序的 /Documents 目录属性 NSFileProtectionKey = NSFileProtectionComplete 的说明。我已经在应用程序第一次运行时设置了该值,但是有没有办法设置它?就像通过一些 X-Code 复选框、plist 或其他。

还有一个相关的说明:存储在具有 NSFileProtectionComplete 数据保护类的目录下的任何文件是否自动被视为与其目录相同的保护类?

非常感谢,

4

4 回答 4

4

要保护应用程序 Documents 目录中的文件,无需任何代码,您必须在应用程序中添加一个 entitlements.plist。

在您的 entitlements.plist 中,添加带有“NSFileProtectionComplete”值的“DataProtectionClass”键。只要设备被锁定,您的文件就会自动受到保护。

这是一个例子

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
    <dict>
      <key>DataProtectionClass</key>
      <string>NSFileProtectionComplete</string>
    </dict>
  </plist>
于 2012-01-04T13:40:17.523 回答
0

WWDC session 208 轻松解决了这个问题,我认为您使用该密钥创建了一个权利文件,并且您不需要编写代码。

我还没有这样做,所以我不完全确定它是否有效。

于 2011-08-25T16:37:28.607 回答
0

这是我想出的技巧,直到我弄清楚如何正确设置 /Documents 目录保护。

NSError *error;
NSDictionary *attrs = [self attributesOfItemAtPath:DOCUMENTS_FOLDER error:&error];
if(![[attrs objectForKey:NSFileProtectionKey] isEqual:NSFileProtectionComplete])
{
    attrs = [NSDictionary dictionaryWithObject:NSFileProtectionComplete forKey:NSFileProtectionKey];
    BOOL success = [self setAttributes:attrs ofItemAtPath:DOCUMENTS_FOLDER error:&error];
    if (!success) 
        NSLog(@"Set ~/Documents attr NOT successfull");
}

我只是在加载应用程序时调用上面的代码,以设置文档目录保护(如果尚未设置)。

于 2011-08-29T17:13:41.280 回答
0

http://devforums.apple.com/message/627887 开发者论坛:应用 DataProtectionClass 权利

我找到了这个链接,而这个权利方法目前不起作用并针对错误问题提出了申请,因此我们必须逐个文件进行。

于 2012-03-28T18:17:05.007 回答