4

苹果存储指南的方式给我带来了更多问题,因为我从 Documents 目录(文件、数据库和某种与应用程序相关的东西)维护的大部分数据。最近我上传了一个二进制文件到应用程序商店,它被拒绝了苹果苹果拒绝报告根据这一点向我提供了一份报告,我将更改我的代码如下

- (NSString *)applicationDocumentsDirectory {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSURL *pathURL= [NSURL fileURLWithPath:documentPath];
[self addSkipBackupAttributeToItemAtURL:pathURL];
return documentPath;

}

 - (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
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;
}

我的问题:

1.我可以直接使用 addSkipBackupAttributeToItemAtURL: 方法到文档目录来禁止我在文档目录中的所有文件的 iCloud 备份。

2.上面提到的代码足以让我的应用程序在应用程序商店中获得批准,以防我的最后一个二进制文件由于“不备份”属性而被拒绝,因为我的文档目录中不包含“不备份”属性。

4

2 回答 2

1

您应该能够将此属性设置为文件夹,以避免备份整个文件夹。

但是请注意,对完整的 Documents 文件夹执行此操作可能不是一个好方法。首先,这将造成您的应用程序没有备份内容的情况,因此在手机恢复时应用程序将处于原始状态。我也可以想象这不是“苹果想要的”方式,因此可能导致应用程序被拒绝(总是猜测)。如果可能,我会在 Document 目录中为您的非备份内容创建一个子文件夹,并将所有内容放在那里(如果您已经在商店中有此应用程序的版本,这可能需要一些迁移代码)。

请注意,存储指南确实允许在 Documents 目录中存储用户创建/不可重新创建的内容,并且您只需标记无法放入 Caches 目录的下载内容等内容(例如,如果用户期望此内容可离线使用)。

于 2011-11-11T10:04:47.903 回答
0

使用此功能

-(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
if (&NSURLIsExcludedFromBackupKey == nil) {
    // iOS 5.0.1 and lower
    u_int8_t attrValue = 1;
    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;

}
else {
    // First try and remove the extended attribute if it is present
    int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0);
    if (result != -1) {
        // The attribute exists, we need to remove it
        int removeResult = removexattr(filePath, attrName, 0);
        if (removeResult == 0) {
            NSLog(@"Removed extended attribute on file %@", URL);
        }
    }

    // Set the new key
    NSError *error = nil;
    [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
    return error == nil;
}
 }

这是实现的代码。谢谢

于 2013-06-10T10:40:01.700 回答