ios指定目录不进行icloud检测

时间真的是过得飞快,一周过去,现在来总结想想,好像都没有什么收获。这是一件让人非常恼怒的事情,明明每天都加班,明明连周六都在上班,钱没多拿,经验和知识却没有增加。上一周主要是在同事做过的模块里添加新功能,由于同事去做新的游戏,原先的应用完全由我来维护。同事的代码不错,采用MVC结构,结构剥离的相当明确,C层采用一个驱动,驱动里面嵌套了一个状态机。M数据采用装饰者模式嵌入C 层,利用事件响应机制来实现C层与V层的通讯。比较有价值的应该是他实现状态机的过程,可惜我要赶项目,而且当时编译原理也没学透彻,所以有点囫囵吞枣了。再者就是看同事定义的与后台的协议了,我们现在的做的是德州扑克的回放,状态比较多。着实是花了一些时间去看,代码是如何读取数据的。

当然这不是一篇抱怨的文章,虽然我老是抱怨这抱怨那的,其实我也挺讨厌那样的自己,只是控制不住罢了。比较有意义的一点可能是如何绕过ios的icloud审核。我们的应用是一个弱联网的,为了节省用户流量因此在app里面预存了一些数据。在程序第一次运行时,将数据从程序包拷贝到document目录。由于这个原因,app被app store拒绝过一次,提示程序未做任何操作,但是icloud多了一些数据。

绕过的方法如下:

- (BOOL)addSkipBackupAttributeToItemAtURLHigh:(NSURL *)URL
{
//    5.1 +
    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;
}

- (BOOL)addSkipBackupAttributeToItemAtURLLow:(NSURL *)URL

{
//    5.0.1:
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
    
    
    
    const char* filePath = [[URL path] fileSystemRepresentation];
    
    
    
    const char* attrName = "com.apple.MobileBackup";
    
    u_int8_t attrValue = 1;
    
    
    
    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    
    return result == 0;
    
}


没有找到好的检测版本的方法,就用了最土的一种:

</pre><pre name="code" class="objc">NSURL *tempURL = [NSURL fileURLWithPath:[NSString stringWithUTF8String:(CCFileUtils::sharedFileUtils()->getWritablePath()+"temp/").c_str()]];
   
    NSString *stringVersion =[[UIDevice currentDevice] systemVersion];
    NSArray * array = [stringVersion componentsSeparatedByString:@"."];
    int symbol = 0;
    for (NSInteger i = 0; i < array.count; ++ i) {
        if (i == 0) {
            if ([[array objectAtIndex:i] integerValue] > 5) {
                symbol = 3;
                break;
            }else if([[array objectAtIndex:i] integerValue] < 5){
                symbol = 0;
                break;
            }
        }else if(i == 1){
            if ([[array objectAtIndex:i] integerValue] >= 1) {
                symbol = 3;
                break;
            }
        }else if(i == 2){
            if ([[array objectAtIndex:i] integerValue] > 0) {
                symbol = 2;
                break;
            }
        }
    }
    
    NSLog(@"the symbol is %d", symbol);
    
//    [self addSkipBackupAttributeToItemAtURL:tempURL];
    if (symbol == 2) {
        [self addSkipBackupAttributeToItemAtURLLow:tempURL];
    }else if(symbol == 3){
        [self addSkipBackupAttributeToItemAtURLHigh:tempURL];
    }



值得注意的是:5.0一下的不存在icloud检测;不允许将document整个目录作为icloud忽略目录;检测V5.0.1时需要导入sys/xattr.h







  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值