我正在寻找加密应用程序中的用户数据,而NSFileProtection机制看起来很完美。
这个SO Question / Answer thread向我指出了WWDC 2011视频Securing iOS Apps,它提供了通过权利在应用程序中设置数据保护的“太好了,不太真实”的提示(见33分钟)。 / p>
所以,我在我的iOS 5.x +应用程序中尝试了这个,并遇到了抱怨Invalid Entitlements的问题。
我已经通过iOS Provisioning Portal为特定应用程序配置了数据保护,并更新了我的应用程序配置,所以理论上我应该都设置好,但我仍然会收到错误。
如果从Entitlement中删除特定的FileProtectionComplete设置,则应用程序运行时不会出现Invalid Entitlement错误。
在调查此问题时,我还看到有些人正在获取他们的应用rejected(在他们上传二进制文件时),因为这不受支持(或已弃用?)。请注意,我特别询问数据保护,而不是Passbook。
在这个阶段,我在想,也许它确实是,'太好了,不可能'。所以,我即将放弃这个神奇的权利标志,而是使用编程方法,添加NSFileProtectionComplete作为写选项。
但是,在我这样做之前,有人可以确认他们只是通过使用Entitlements标志成功添加了Data Protection吗?感谢。
答案 0 :(得分:11)
NSFileProtectionComplete
。相反,它在配置文件中指定。
我遇到了同样的问题。当我尝试在设备上构建和运行时,我收到了以下警告:
使用无效的权利签署了可执行文件。
您的应用程序代码签名中指定的权利 权利文件与您的配置中指定的文件不匹配 轮廓。
(0xE8008016)。
在控制台中,它表现为此错误:
5月6日16:18:13 XXXXX installd [54]:权利 'DataProtectionClass'具有配置不允许的值 简档
最终,我找到了正确的设置。您必须登录开发人员门户并对与您正在使用的配置文件关联的应用程序ID启用数据保护。见下图:
答案 1 :(得分:0)
我已尝试使用权利进行数据保护,但效果很好。诀窍是确保您的Xcode项目中的权利文件条目与您的配置文件的条目相同。
具体而言,权利文件和配置文件中的以下2个设置应相同: - “com.apple.developer.default-data-protection” - 我已将其设置为NSFileProtectionComplete。 “application-identifier” - 我没有在标识符中使用通配符,但我认为它应该也可以。
答案 2 :(得分:0)
对于我使用通配符作为配置文件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 :(得分:0)
要启用数据保护,请在Xcode的目标功能窗格中将其打开。