【问题标题】:Data Protection / NSFileProtectionComplete - successfully supported through entitlements.plist?数据保护/NSFileProtectionComplete - 通过 entitlements.plist 成功支持?
【发布时间】:2013-01-21 23:41:14
【问题描述】:

我希望在应用中加密用户数据,而 NSFileProtection 机制看起来非常适合。

这个SO Question / Answer thread 向我指出了 WWDC 2011 视频 Securing iOS Apps,它给出了通过权利在应用程序中设置数据保护的“好得令人难以置信”的提示(从 33 分钟开始)。

所以,我为我的 iOS 5.x+ 应用程序尝试了这个,但遇到了它抱怨 Invalid Entitlements 的问题。

我已经通过 iOS 配置门户为特定应用配置了数据保护,并更新了我的应用配置,所以理论上我应该都设置好了,但我仍然收到错误。

如果我从权利中删除特定的 FileProtectionComplete 设置,应用程序将在没有无效权利错误的情况下运行。

在对此进行调查时,我还看到一些人正在获取他们的应用程序 rejected(在他们上传二进制文件时),因为这不受支持(或已弃用?)。请注意,我专门询问的是数据保护,而不是存折。

在这个阶段,我在想,也许真的是,“好得令人难以置信”。所以,我即将放弃这个神奇的权利标志,而是使用编程方法,将 NSFileProtectionComplete 添加为写入选项。

但是,在我这样做之前,任何人都可以确认他们已经能够通过使用权利标志成功添加数据保护吗?谢谢。

【问题讨论】:

    标签: ios entitlements data-protection


    【解决方案1】:

    NSFileProtectionComplete 不再通过权利得到支持。相反,它是在配置文件中指定的。

    我遇到了和你一样的问题。当我尝试在设备上构建和运行时,我收到了以下警报:

    可执行文件的签名无效。

    应用程序代码签名中指定的权利 权利文件与您的配置中指定的不匹配 个人资料。

    (0xE8008016).

    在控制台中,它表现为这个错误:

    5 月 6 日 16:18:13 XXXXX 已安装[54]:权利 “DataProtectionClass”具有配置不允许的值 简介

    最终,我找到了正确的设置。您必须登录到开发人员门户并在与您正在使用的配置文件关联的应用程序 ID 上启用数据保护。见下图:

    【讨论】:

      【解决方案2】:

      使用通配符作为配置文件 ID(即 my.company.app.*)对我不起作用,因此必须创建一个新的完全合格的。 它适用于我的 Entitlements.plist,如下所示:

      <?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>com.apple.developer.default-data-protection</key>
          <string>NSFileProtectionComplete</string>
          <key>get-task-allow</key>
          <false/>
      </dict>
      </plist>
      

      我的个人资料部分看起来像这样: ....

      <dict>
          <key>application-identifier</key>
          <string>xxx.my.company.app</string>
          <key>com.apple.developer.default-data-protection</key>
          <string>NSFileProtectionComplete</string>
          <key>get-task-allow</key>
          <false/>
          <key>keychain-access-groups</key>
          <array>
              <string>xxxxxxxx</string>
          </array>
      </dict>            
      

      ....

      【讨论】:

        【解决方案3】:

        要启用数据保护,请在 Xcode 中目标的 Capabilities 窗格中将其打开。

        详情:App Distribution Guide: Adding Capabilities

        【讨论】:

          【解决方案4】:

          我已尝试使用权利保护数据,并且效果很好。诀窍是确保 Xcode 项目中的权利文件条目与配置文件中的相同。

          具体来说,权利文件和配置文件中的以下 2 项设置应相同:- “com.apple.developer.default-data-protection” - 我已将其设置为 NSFileProtectionComplete。 "application-identifier" - 我没有在标识符中使用通配符,但我认为它应该也可以工作。

          【讨论】:

          • 你能详细说明你的意思吗?我设置了一个权利文件,确保我的 AppID 配置为数据保护,并发布了一个配置文件,但没有任何成功。我在Apple Dev Forums that confirmed this wasn't working 找到了这篇文章(截至 2012 年 3 月 21 日)
          • edelaney05- 我更新了我的回复。这对你有用吗?
          猜你喜欢
          • 2021-01-09
          • 1970-01-01
          • 2021-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-15
          • 1970-01-01
          • 2019-05-28
          相关资源
          最近更新 更多