美文网首页iOSiOS点点滴滴iOS Developer
App Store悲剧系列-数据存储指导方针

App Store悲剧系列-数据存储指导方针

作者: Lonely__M | 来源:发表于2016-03-04 11:09 被阅读213次

    背景

    iCloud包括了备份,会通过Wi-Fi每天自动备份用户iOS设备。app的home目录下的所有东西都会被备份,除了应用Bundle本身、缓存目录和temp目录。已购买的音乐、应用、书籍、Camera Roll、设备设置、主屏幕、App组织、消息、铃声也都会被备份。由于备份通过无线进行,并且为每个用户存储在iCloud中,应用需最小化自己存储的数据数量。大文件会延长备份时间,并且消耗用户的可用iCloud空间。
     
    为了确保备份尽可能快速高效,应用存储数据需要遵循以下指导方针:
     
    1. 只有那些用户生成的文档或其它数据,或者应用不能重新创建的数据,才应该存储在/Documents目录下,并且会被自动备份到iCloud。
     
    2. 可以重新下载或生成的数据,应该存储在/Library/Caches目录。例如数据库缓存文件、可下载文件(杂志、报纸、地图应用使用的数据)等都属于这一类。
     
    3. 临时使用的数据应该存放在/tmp目录。尽管这些文件不会被iCloud备份,应用在使用完之后需要记得删除这些文件,这样才不会继续占用用户设备的空间。
     
    4. 使用”不要备份”属性来指定那些需要保留在设备中的文件(即使是低存储空间情况下)。那些能够重新生成,但在低存储空间时仍需保留,对应用正常运行有影响,或者用户希望文件在离线时可用的文件,需要使用这个属性。无论哪个目录下的文件(包括Documents目录),都可以使用这个属性。这些文件不会被删除,也不会包含在用户的iCloud或iTunes备份中。由于这些文件一直占用着用户设备的存储空间,应用有责任定期监控和删除这些文件。
    

    iOS 5.0.1开始支持”do not back up”文件属性,允许开发者明确地指定哪些文件应该被备份,哪些是本地缓存可以自动删除,哪些文件不需要备份但不能删除。此外,对目录设置这个属性,会阻止备份该目录和目录中的所有内容。
    注意”do not back up”属性只能用于iOS 5.0.1以后版本。之前版本的应用需要存储数据到/Library/Caches目录才能避免被备份。由于老的系统忽略这个属性,你需要确保应用在所有iOS版本中,都遵循上面的iOS Data Storage Guidelines。

    解决方案

    代码如下:

    - (BOOL)addSkipBackupAttributeToItemAtPath:(NSString *) filePathString
    
    {
    
    NSURL* URL= [NSURL fileURLWithPath: filePathString];
    
    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;
    
    }
    

    简而言之,就是将本地Documents目录下不需要通过iCloud备份的文件或者目录,添加 do not back up 属性,防止备份

    相关文章

      网友评论

        本文标题:App Store悲剧系列-数据存储指导方针

        本文链接:https://www.haomeiwen.com/subject/ucsokttx.html