• 【转】防止文件被备份到iCloud 和iTunes


      【转】http://blog.csdn.net/arthurchenjs/article/details/8538996

      应用有一些文件需要永久的存储在本地使应用支持离线功能。但是这些文件并不包含用户数据,无需备份。如何防止这些文件被备份。

      在iOS上,应用负责确保只有用户数据而不包含应用数据被备份到iCloud和iTunes上。具体的步骤在不同的iOS 版本各有不同。所以对不同的版本进行区分描述。关于具体哪些数据不应该被备份,参见App Backup Best Practices section of the iOS App Programming Guide

      注意:应用应该避免将应用数据和用户数据和在相同的文件中。这样会增加不必要的备份大小并且被认为是违反iOS的数据存储指南。

    iOS 5.1 以及更新

      从iOS 5.1开始,应用可以使用NSURLIsExcludedFromBackupKey 或 kCFURLIsExcludedFromBackupKey 文件属性来防止文件被备份。这些API是通过通过旧的,弃用的方式的直接设置额外属性。所有运行在iOS5.1的都应该使用这些API包防止文件被备份。

     1 - (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
     2 
     3 {
     4     assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
     5  
     6     NSError *error = nil;
     7     BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
     8                                   forKey: NSURLIsExcludedFromBackupKey error: &error];
     9     if(!success){
    10         NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
    11     }
    12     return success;
    13 }


    iOS 5.0.1

      如果你的应用必须支持iOS 5.0.1,你可以使用下面的方式来设置“不要备份”的拓展属性。当你创建无须备份文件或者文件夹时,将数据写入文件然后调用这个方法,传入一个文件URL。

       下面的这些代码已经被弃用并只应该使用在iOS5.0.1及更早的版本上。当运行的iOS5.1上时,应用应用使用NSURL和CFURL键来进行描述。在iOS 5.0.1上设置额外属性

     1 #import <sys/xattr.h>
     2 - (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
     3 {
     4     assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
     5  
     6     const char* filePath = [[URL path] fileSystemRepresentation];
     7  
     8     const char* attrName = "com.apple.MobileBackup";
     9     u_int8_t attrValue = 1;
    10  
    11     int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    12     return result == 0;
    13 }

    iOS 5.0

      无法在iOS5.0上防止数据被备份。如果你的应用必须支持iOS5.0,然你需要保持你的应用数据在Caches中来避免数据被备份。iOS将会在不需要的时候删除Caches目录中的数据。所以如果数据被删除的话应用将需要重新解压出这些数据。

  • 相关阅读:
    GDAL并行IO的疑问
    memcpy一段内存到std::vector<double>
    解决mysql无法远程登陆问题
    .net 上传word 转为 html
    OnCheckedChanged的触发需要AutoPostBack="true"
    asp.net与word文档在线
    [转]mysql如何设置主键和外键,实现级联更新、级联删除
    asp.net 读取Word
    datalist 嵌套 datalist 中的table 乱
    [转]php中使用ignore_user_abort()函数后,如何停止后台运行的程序?
  • 原文地址:https://www.cnblogs.com/crazypebble/p/3091351.html
Copyright © 2020-2023  润新知