【问题标题】:Phonegap-iOS Prevent Documents folder backup on iCloudPhonegap-iOS 防止 iCloud 上的 Documents 文件夹备份
【发布时间】:2014-05-05 12:49:31
【问题描述】:

我有一个应用程序因为 iCloud 备份使用不当而被拒绝。

简而言之,我在 Documents 文件夹中存储了一个预填充的数据库,我需要将其从 iCloud 备份中排除。

我的问题是:

1) config.xml 中的 BackupWebStorage 设置是否设置为“none”?或者它只是阻止备份 WebKit 文件夹?

2) 如果它不起作用,我知道我应该使用以下代码:

- (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;
}

但是(脸红),我不知道我应该如何在这段代码中指定文件,假设路径是:

文档/0000000000000001.db

我要在哪里注明?

真的,每一种帮助都将不胜感激。

提前致谢

麦芽酒

【问题讨论】:

    标签: ios cordova


    【解决方案1】:

    你试过我在 phonegap 的 google 群里告诉你的吗?

    您可以在 .db 文件上使用 setMetadata 函数,类似这样

    // Wait for device API libraries to load
        //
        document.addEventListener("deviceready", onDeviceReady, false);
    
        // device APIs are available
        //
        function onDeviceReady() {
            window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
        }
    
        function gotFS(fileSystem) {
            fileSystem.root.getFile("0000000000000001.db", null, gotFileEntry, fail);
        }
    
        function gotFileEntry(fileEntry) {
    
            // Set the metadata
            fileEntry.setMetadata(success, fail, { "com.apple.MobileBackup": 1});
    
        }
    
        function success() {
            console.log("The metadata was successfully set.");
        }
    
        function fail() {
            alert("There was an error in setting the metadata");
        }
    

    【讨论】:

    • 宾果游戏!它有效,文件被标记:iMac-xxxxxxxx:Documents xxxxxxxx$ xattr -l 0000000000000001.db com.apple.metadata:com_apple_backup_excludeItem: com.apple.MobileBackup - 只是一个疑问:com.apple.MobileBackup 仍然有效还是已弃用? - Objective-c 的方式是我会继续努力的。不幸的是,我很着急,需要在 AppStore 上踢它
    • 当你使用 com.apple.MobileBackup 设置文件元数据时,它在内部与 Lee Crossley 提出的objective-c 方式相同,它不被弃用
    【解决方案2】:

    我认为该设置仅适用于网络存储(虽然这不清楚)。

    在过去,我已经完全确定没有使用我去年写的这个要点在 Document 或 Library 目录中备份到 iCloud:

    https://gist.github.com/leecrossley/4130115

    【讨论】:

    • 太棒了!只是几个问题:我必须把它放在 appDelegate.m 中吗?
    • 是的,我就是这样做的
    • 非常感谢,我会尽快尝试
    【解决方案3】:

    我尝试添加以下代码:

    NSString* doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString* lib = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    
    if (version < 5.1)
    {
        NSLog(@"************ iOS 5.0");
        u_int8_t b = 1;
        setxattr([doc fileSystemRepresentation], "com.apple.MobileBackup", &b, 1, 0, 0);
        setxattr([lib fileSystemRepresentation], "com.apple.MobileBackup", &b, 1, 0, 0);
    }
    else
    {
        NSLog(@"************ iOS 5.1");
        NSURL* url = [NSURL fileURLWithPath:doc];
        [url setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: Nil];
        url = [NSURL fileURLWithPath:lib];
        [url setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: Nil];
    }
    
    
    NSLog(@"************ FILES FLAGGED");
    

    紧接着

    - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
    {
    

    在 AppDelegate.m 中

    它运行顺利,但是当我使用终端测试结果时:

    • 在新的终端窗口中打开 Simulator App 的 Documents 文件夹

    • 检查文件属性(我的数据库路径是 Documents/0000000000000001.db):

      xattr -l 0000000000000001.db
      

    我没有得到任何回应,这(至少我认为)意味着该文件尚未被标记。

    有什么我错过的吗?

    感谢您的耐心等待

    亚历山德罗

    【讨论】:

    • 您尝试的代码为 Documents 和 Library 文件夹设置了 nobackup 标志。这将阻止 iCloud 备份其中的所有文件。我使用此代码后检查了属性:xattr -l Documentscom.apple.metadata:com_apple_backup_excludeItem: com.apple.MobileBackup
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 2015-01-14
    • 2012-10-09
    • 1970-01-01
    • 2013-04-17
    • 2012-11-20
    • 2015-01-19
    • 2011-12-07
    相关资源
    最近更新 更多