在一个应用上,从iOS 7升级iOS 8OTA后,我们注意到attributesOfItemAtPath对特定文件显示了不同的值,因为NSFileProtectionKey在升级过程中被删除了。
还有人看到这个了吗?这个变化的范围是什么?
发布于 2014-09-20 09:25:31
当App Store下载更新时,会将其安装到新目录中,然后再从以前的安装中移出文件。Files inside these application directories are migrated
Documents
Library
其他位置的文件可能会迁移,也可能不会迁移。您的应用程序不应依赖于升级后存在的其他文件。当iOS检测到磁盘空间不足时,它会选择要清除的文件。可以清除NSCachesDirectory和NSTemporaryDirectory()中的文件。具有“不备份”属性(NSURLIsExcludedFromBackupKey/kCFURLIsExcludedFromBackupKey)的文件或目录不会被清除,您的应用程序负责清理它们。From the iOS Data Storage Guidelines
使用“不备份”属性来指定应该保留在设备上的文件,即使在存储空间不足的情况下也是如此。将此属性用于可以重新创建但即使在存储空间较低的情况下也需要保留的数据,以便应用程序正常运行,或者因为客户希望它在脱机使用期间可用。此属性适用于标记的文件,而不管这些文件位于哪个目录中,包括文档目录。这些文件不会被清除,也不会包含在用户的iCloud或iTunes备份中。由于这些文件确实使用设备上的存储空间,因此您的应用程序负责定期监控和清除这些文件。
NSURL.h中有一个关于此属性的重要说明:
如果应从备份中排除资源,则
为true,否则为false (读写,值类型boolean NSNumber)。此属性仅在排除备份中不需要的缓存和其他应用程序支持文件时才有用。通常对用户文档执行的某些操作会导致此属性重置为false,因此不应在用户文档上使用此属性。
当此属性与NSFileProtectionKey结合使用时,可能会导致未定义的行为。备份属性由一个子系统读取和写入,而文件保护密钥由另一个子系统使用。在应用程序升级或恢复期间,可能会在不保留文件保护值的情况下迁移或恢复文件。此外,向文件添加数据保护属性将用受保护的文件替换旧文件。这对您的应用程序是透明的,但可能会产生副作用,即升级或恢复时会将未受保护的版本放在适当的位置。这是建议在应用程序写入文件时设置此属性的众多原因之一。
发布于 2016-03-16 04:56:35
我不相信有任何官方的答案或适用的文档。
据传闻,在我的例子中,在iOS 9和8上,Library/Application Support下的文件在应用程序升级时被设置为NSFileProtectionComplete。
这似乎是由于Apple服务器上的App ID上的数据保护被设置为完成,反过来,当Xcode在证书续订后重新生成配置文件时,它似乎已自动更新(尽管在本地Xcode项目中关闭了数据保护功能)。
这实际上是有意义的。在您为新版本启用数据保护权限后,iOS会确保安全,并负责升级所有文件的数据保护。
没有意义的是,当其他人(嗯,Xcode,嗯)决定为您添加该权利时。
要添加到版本检查表中的内容:
https://stackoverflow.com/questions/25924124
复制相似问题