IOS - весь каталог документов Flag, не поддерживающий резервное копирование
Мое приложение отклонено Apple из-за:
2.23: Приложения должны следовать рекомендациям по хранению данных iOS или отклоняться
возможно ли, что флаг весь каталог документа, как и нет резервной копии? мое приложение работает в iOS 6.1 и выше.
Я знаком с этим кодом, но я не знаю, как горячо отмечать каталог Document с ним
- (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;
}
EDITED:
Apple сообщила мне, что iCloud создает резервные копии моих фотографий из галереи изображений, я загружаю изображения галереи следующим образом:
- (void)setupPageScroll {
NSString *imgCount;
int i;
[_scrollView setContentSize:CGSizeMake(_scrollView.frame.size.width * _pageControl.numberOfPages, _scrollView.frame.size.height)];
_scrollView.delegate = self;
for (i = 0 ; i < 10 ; i++) {
imgCount = [NSString stringWithFormat:@"%@%d.jpg",_gallName , i];
[self createPageWithImage:[UIImage imageNamed:imgCount] forPage:i];
}
}
- (void)createPageWithImage:(UIImage *)images forPage:(int)page
{
UIView *newView = [[UIView alloc] initWithFrame: CGRectMake(_scrollView.frame.size.width * page, 0, _scrollView.frame.size.width, _scrollView.frame.size.height)];
UIImageView *tempImage = [[UIImageView alloc]initWithImage:images];
[tempImage setContentMode:UIViewContentModeScaleAspectFit];
tempImage.frame = _galleryView.frame;
_imgGallery = tempImage;
[newView addSubview: _imgGallery];
[_scrollView addSubview: newView];
}
- (IBAction)pageChanged:(id)sender {
CGRect pageRect = CGRectMake(_pageControl.currentPage * _scrollView.frame.size.width, 0, _scrollView.frame.size.width, _scrollView.frame.size.height);
[_scrollView scrollRectToVisible: pageRect animated: YES];
}
Как пропустить эти изображения?
Ответы
Ответ 1
... И, наконец, моя заявка была одобрена. просто следуйте этой инструкции:
поместите этот код на appDelegate.m(didFinishLunching)
NSString *docsDir;
NSArray *dirPaths;
NSURL * finalURL;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
finalURL = [NSURL fileURLWithPath:docsDir];
[self addSkipBackupAttributeToItemAtURL:finalURL];
и пропустите резервное копирование:
- (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;
}
Ответ 2
Вы можете пометить как no-backup только родительскую папку, а не каждый файл. Но он не должен быть каталогом документов, поскольку он должен содержать только созданный пользователем контент. Вы должны использовать Поддержка библиотеки/приложений (Техническое Q & A QA1719)
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
directory = [directory stringByAppendingPathComponent:@"MyData"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:directory] == NO) {
NSError *error;
if ([fileManager createDirectoryAtPath:directory withIntermediateDirectories:YES attributes:nil error:&error] == NO) {
NSLog(@"Error: Unable to create directory: %@", error);
}
NSURL *url = [NSURL fileURLWithPath:directory];
// exclude downloads from iCloud backup
if ([url setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error] == NO) {
NSLog(@"Error: Unable to exclude directory from backup: %@", error);
}
}
Кредиты: блог xinsight