iOS 8 OTA升级后NSFileProtectionKey被删除了吗?

时间:2014-09-18 23:37:22

标签: ios ios8

在应用程序上,从iOS 7升级iOS 8 OTA之后,我们注意到attributesOfItemAtPath为特定文件显示了不同的值,因为升级过程删除了NSFileProtectionKey。

其他人都看到了吗?这种变化的范围是什么?

2 个答案:

答案 0 :(得分:0)

当App Store下载更新时,会在从先前安装中移动文件之前将其安装到新目录中。 Files inside these application directories are migrated

Documents

Library

其他位置的文件可能会迁移也可能不会迁移。您的应用程序不应该依赖升级后存在的其他文件。 当iOS检测到磁盘空间不足时,它会选择要清除的文件。可以清除NSCachesDirectoryNSTemporaryDirectory()中的文件。使用"的文件或目录不备份"属性(NSURLIsExcludedFromBackupKey / kCFURLIsExcludedFromBackupKey)不会被清除,您的应用程序负责清理它们。 From the iOS Data Storage Guidelines

  

使用"不要备份"用于指定应保留在设备上的文件的属性,即使在低存储情况下也是如此。将此属性与可以重新创建的数据一起使用,但即使在低存储情况下也需要保留,以使应用程序正常运行,或者因为客户希望在脱机使用期间可以使用该数据。此属性适用于标记文件,无论它们位于何种目录中,包括Documents目录。这些文件不会被清除,也不会包含在用户的iCloud或iTunes备份中。由于这些文件确实使用了设备上的存储空间,因此您的应用程序负责定期监视和清除这些文件。

NSURL.h中有关于此属性的重要说明:

  

如果应从备份中排除资源,则为true,否则为false(读写,值类型为boolean NSNumber)。此属性仅用于排除备份中不需要的缓存和其他应用程序支持文件。通常对用户文档执行的某些操作将导致此属性重置为false,因此不应在用户文档上使用此属性。

当此属性与NSFileProtectionKey结合使用时,可能会导致未定义的行为。备份属性由一个子系统读取和写入,而文件保护密钥由另一个子系统使用。在应用程序升级或还原期间,可以迁移或还原文件,而不保留文件保护值的属性。此外,将数据保护属性添加到文件将使用受保护的文件替换旧文件。这对您的应用程序是透明的,但可能具有升级或恢复的副作用,使未受保护的版本到位。这是建议您在应用程序写入文件时设置此属性的众多原因之一。

答案 1 :(得分:0)

我不相信有任何官方答案或文件适用。

有趣的是,在我的情况下,在iOS 9和8上升级时,Library/Application Support下的文件已设置为NSFileProtectionComplete

这个 seeems 是由于Apple服务器上的App ID上的Data Protection设置为Complete,而似乎似乎已被Xcode自动更新它在证书续订后重新生成配置文件(尽管本地Xcode项目中的数据保护功能为Off)。

这实际上是有道理的。在为新版本启用数据保护权利后,iOS可以安全地运行并负责升级所有文件的数据保护。

什么是没有意义的是当别人(咳嗽Xcode ahem)决定为你添加该权利时。

要添加到发布清单的内容:

  • 在证书门户上重新检查您的App ID设置(特别注意数据保护设置)