我们的应用程序最近因违反iOS Data Storage Guidelines
关于备份 iCloud 上的文件。
我必须用do not back up
属性。
我将所有重要数据存储在 SQLite 数据库中,用户首选项存储在 UserDefaults.plist 中。我是否必须将数据库标记为do no back up
?
我问审查员我是否要禁用iCloud。
下面是评审员的回答:
您的应用程序不遵循 iOS 数据存储指南,这是 AppStore 评论指南所要求的。
特别是,我们发现在启动和/或内容下载时,应用程序存储了 4MB。要检查应用程序存储了多少数据:
IOS 数据存储指南指出,只有用户使用应用程序创建的内容,例如文档、新文件、编辑等,才应该由 iCloud 备份。
应用程序使用的临时文件只应存储在 /tmp 目录中;当用户退出应用程序时,请记住删除存储在此位置的文件。
数据可以重新创建,但必须持久,以便您的应用程序正常运行-或者因为客户期望它可以脱机使用-应该标记为“不备份”属性。对于 NSURL 对象,添加 NSURLIsExcludedFromBackupKey 属性以防止备份相应的文件。对于 CFURLRef 对象,使用相应的kCFURLIsExcludedFromBackupKey属性。
有关更多信息,请参见技术问答1719:如何防止文件被备份到iCloud和iTunes?
有必要修改应用程序以满足IOS数据存储指南的要求。对于离散代码级别的问题,您可能希望咨询苹果开发人员的技术支持。请务必:
发布于 2018-02-01 14:18:44
基本上,这取决于您存储的数据类型。
如果数据可以重新生成(例如,当用户在另一个设备上安装应用程序时),则不应该对其进行备份。
否则,iCloud备份是可以的,因为用户会期望他的数据是可用的,甚至在另一个设备上也是如此。
在第一个场景中,你基本上有两种方法来实现这一点...
要么你用NSURL
设置kCFURLIsExcludedFromBackupKey
在您的文件中,要么将它们存储在不会备份的位置,比如<Application_Home>/Library/Caches
注意,第二个解决方案更好,IMHO。
想了解情况,kCFURLIsExcludedFromBackupKey
可以这样使用:
NSURL * fileURL;
fileURL = [ NSURL fileURLWithPath: @"some/file/path" ];
[ fileURL setResourceValue: [ NSNumber numberWithBool: YES ] forKey: NSURLIsExcludedFromBackupKey error: nil ];
对于第二种情况,有时苹果的评论员认为你的数据可以重新生成。然后你必须解释为什么数据必须被备份。
发布于 2018-02-01 15:58:16
您可以调用以下函数将“map.sqite”的路径作为NSURL传递:
NSURL *url = [NSURL fileURLWithPath:yourSQLitePath];
[self addSkipBackupAttributeToItemAtURL:url];
The function is provided in Apple as:
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
NSError *error = nil;
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success){
NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
}
return success;
}
https://stackoverflow.com/questions/-100007290
复制相似问题