2014-07-08 3 views
0

My App получать вернулся из App Store Review, потому что я не предотвратили мои данные из ICloud резервного копирования:/Предотвратить приложение из ICloud резервного копирования

Я следующий код в приложение делегата:

-(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)fileURL { 
if (![[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) { 
    NSLog(@"File %@ doesn't exist!",[fileURL path]); 
    return NO; 
} 

NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; 
if ([currSysVer isEqualToString:@"5.0.1"]) { 
    const char* filePath = [[fileURL path] fileSystemRepresentation]; 
    const char* attrName = "com.apple.MobileBackup"; 
    u_int8_t attrValue = 1; 
    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); 
    NSLog(@"Excluded '%@' from backup",fileURL); 
    return result == 0; 
} 
else if (&NSURLIsExcludedFromBackupKey) { //iOS 5.1 and later 
    NSError *error = nil; 
    BOOL result = [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; 
    if (result == NO) { 
     NSLog(@"Error excluding '%@' from backup. Error: %@",fileURL, error); 
     return NO; 
    } 
    else { // Succeeded 
     NSLog(@"Excluded '%@' from backup",fileURL); 
     return YES; 
    } 
} else { 
    // iOS version is below 5.0, no need to do anything because there will be no iCloud present 
    return YES; 
} 
} 

// now call above method from where you are storing your files/folders in NSDocumnetsDirectory 
-(BOOL) doNotBackUpMyFolderOrFile { 

NSString *applicationCacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, 
                    NSUserDomainMask, 
                    YES) lastObject]; 

NSURL *pathURL= [NSURL fileURLWithPath: applicationCacheDir isDirectory:YES]; 


NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; 
NSURL *documentsURL = [paths lastObject]; 


NSURL *tmpURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES]; 

if ([self addSkipBackupAttributeToItemAtURL:documentsURL] && 
    [self addSkipBackupAttributeToItemAtURL:pathURL]  && 
    [self addSkipBackupAttributeToItemAtURL:tmpURL]) { 
    return YES; 
} 
return NO; 
} 

Я называю [self doNotBackUpMyFolderOrFile] в -application:didFinishLaunchingWithOptions:

Когда я открытии терминала и перейти к

/Library/APPLICAT ион Поддержка/iPhone Simulator/7.1/Применения/9224585D-9B05-44E5-8A84-1AEFB56E4579

и напечатайте ls -al [email protected]

Терминал печатает

total 176 
[email protected] 8 user staff 272 Jul 8 16:18 . 
com.apple.installd.container_bundle_id  35 
com.apple.installd.container_creation_os_build  7 
drwxr-xr-x 13 user staff 442 Jul 8 17:42 .. 
[email protected] 1 user staff 6148 Jul 8 16:53 .DS_Store 
com.apple.FinderInfo  32 
[email protected] 7 user staff 238 Jun 17 13:03 Documents 
com.apple.metadata:com_apple_backup_excludeItem 22 
drwxr-xr-x 6 user staff 204 Jul 8 16:53 Library 
drwxr-xr-x 59 user staff 2006 Jul 8 16:24 APPNAME.app 
-rw-r--r-- 1 user staff 80109 Jun 17 11:24 iTunesArtwork 
drwxr-xr-x 2 user staff  68 Jul 8 16:22 tmp 

Так что есть Documents com.apple.metadata:com_apple_backup_excludeItem

Теперь! Я чищу Построить папку в Xcode, Удаление моего приложения на моем IPad Air 7.1.2

(ICloud резервного копирования включен)

После создания приложения I Перейдите в раздел Настройки> ICloud> Хранение & резервного копирования> Управление хранения > Мой iPad> Показать все приложения и есть! Мое приложение находится в списке с 4.2 МБ.

Когда я перехожу в Настройки> Общие> Использование> Показать все приложения Мои приложения составляют около 11 МБ.

Я спрашиваю себя, будет ли мое решение проходить процесс Apple Review? (За исключением каких-либо других вещей, плохо)

ответ

0

Этот вопрос немного стар, но я столкнулся с такой же вопрос: я реализовал addSkipBackupAttribute и переместил свои данные в каталог Cache, но когда я проверил на iCloud, у меня все еще было 7 МБ резервной копии для моего приложения.

Вот я решение: все мои графические ресурсы (изображения и т. Д. Около 7 МБ) были помещены в папку Поддерживающие файлы в моем проекте. я переехал эти RESSOURCES в моем основной папки проекта (или любой другие классические вложенный проект) и tadaa: мой ICloud резервного копирование приложения теперь 14kb :)

По-видимому, все Supporting Files Ressources автоматически сохранен с резервной копией приложения ...

1

Это мое решение. Очень жестко закодирован, но он работает.

-(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)fileURL { 
if (![[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) { 
    NSLog(@"File %@ doesn't exist!",[fileURL path]); 
    return NO; 
} 

NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; 
if ([currSysVer isEqualToString:@"5.0.1"]) { 
    const char* filePath = [[fileURL path] fileSystemRepresentation]; 
    const char* attrName = "com.apple.MobileBackup"; 
    u_int8_t attrValue = 1; 
    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); 
    NSLog(@"Excluded '%@' from backup",fileURL); 
    return result == 0; 
} 
else if (&NSURLIsExcludedFromBackupKey) { //iOS 5.1 and later 
    NSError *error = nil; 
    BOOL result = [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; 
    if (result == NO) { 
     NSLog(@"Error excluding '%@' from backup. Error: %@",fileURL, error); 
     return NO; 
    } 
    else { // Succeeded 
     NSLog(@"Excluded '%@' from backup",fileURL); 
     return YES; 
    } 
} else { 
    // iOS version is below 5.0, no need to do anything because there will be no iCloud present 
    return YES; 
} 
} 

// now call above method from where you are storing your files/folders in NSDocumnetsDirectory 
-(BOOL) doNotBackUpMyFolderOrFile { 

NSString *applicationCacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, 
                    NSUserDomainMask, 
                    YES) lastObject]; 

NSURL *pathURL= [NSURL fileURLWithPath: applicationCacheDir isDirectory:YES]; 


NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; 
NSURL *documentsURL = [paths lastObject]; 


NSURL *tmpURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES]; 

NSString* libpath = [NSSearchPathForDirectoriesInDomains(
                 NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSURL *libURL= [NSURL fileURLWithPath: libpath isDirectory:YES]; 

if ([self addSkipBackupAttributeToItemAtURL:documentsURL] && 
    [self addSkipBackupAttributeToItemAtURL:pathURL]  && 
    [self addSkipBackupAttributeToItemAtURL:tmpURL]  && 
    [self addSkipBackupAttributeToItemAtURL:libURL]) { 
    return YES; 
} 
return NO; 
} 

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

if ([self doNotBackUpMyFolderOrFile]) { 
... 
Смежные вопросы