如何将数据保护类权利添加到我的 iOS 5 应用程序

Posted

技术标签:

【中文标题】如何将数据保护类权利添加到我的 iOS 5 应用程序【英文标题】:How do I add Data Protection Class Entitlements to my iOS 5 app 【发布时间】:2011-08-10 21:33:46 【问题描述】:

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

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

非常感谢,

【问题讨论】:

【参考方案1】:

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

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

这是一个例子

<?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>

【讨论】:

有关此内容的参考,请参阅 WWDC 2011 视频 208“保护 ios 应用程序”。这个关键在 38:12 覆盖,但整个视频值得一看。 如果 iOS 4.0+ 支持这种权利方法,有什么想法吗?我搜索了文档,但除了 WWDC 2011 视频 208 之外的任何地方都找不到它。 这在 iOS 9 中不起作用。如果您已经尝试过,谁能回答这个问题? ***.com/questions/39151959/…【参考方案2】:

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

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

【讨论】:

【参考方案3】:

这是我想出的技巧,直到我弄清楚如何正确设置 /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");

我只是在加载应用程序时调用上述代码,如果尚未设置文档目录保护,则设置它。

【讨论】:

【参考方案4】:

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

我找到了这个链接,而这个 Entitlements 方法目前不起作用并提交了 bug 问题,所以我们必须逐个文件处理。

【讨论】:

以上是关于如何将数据保护类权利添加到我的 iOS 5 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

WatchOS 和位置权利

iOS 部署因权利无效而失败 - 但权利有效吗?

为啥要将 entitlements.plist 添加到我的项目中?

如何将 IOS 14 支持添加到我的 React Native 应用程序?

如何使用 swift 将相同的背景图像添加到我的 ios 应用程序中的所有视图?

如何将核心数据类添加到 iOS 中的框架