#iphone #ipad #ios5 #wifi #icloud
#iPhone #iPad #ios5 #wi-Fi #icloud
Вопрос:
То, как действуют рекомендации Apple по хранению данных, создает для меня еще больше проблем, потому что большая часть данных, которые я храню, находится в каталоге Documents (файлы, база данных и некоторые материалы, связанные с приложениями).Недавно я загрузил двоичный файл в app Store, он был отклонен, и Apple предоставила мне отчет в соответствии с этим пунктом я собираюсь изменить свой код следующим образом
- (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, amp;attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
МОИ ВОПРОСЫ:
1. могу ли я использовать addSkipBackupAttributeToItemAtURL: метод непосредственно в каталог documents, чтобы создать резервную копию iCloud для всех моих файлов в каталоге documents.
2. Вышеупомянутого кода достаточно, чтобы мое приложение было одобрено в App Store в случае, если мой последний двоичный файл отклонен из-за того, что атрибут «не создавать резервные копии» не включен в каталог «Мои документы».
Комментарии:
1. У меня такая же проблема. Мое приложение также отклонено из-за той же проблемы, что и у вас. Вы меняете местоположение файла на путь к библиотеке или пытаетесь использовать «Не создавать резервные копии»?
2. я все еще в затруднении, потому что в кэше устройства мало места, и временный файл будет deleted.my все приложение зависит от каталога документов. если я использую «не создавать резервные копии», это будет работать для всех версий, кроме ios5.0. я хочу подумать еще несколько дней.
3. Мое приложение снова отклонено. из-за iCloud. Я изменил каталог своей папки на путь к библиотеке, а также пометил его «не создавать резервные копии». Я также сохраняю некоторые данные в каталоге библиотеки, но не даю им «Не отмечать».
4. Привет, ты решил проблему? и дайте мне знать, как вы решили эту проблему?
5. я загрузил двоичный файл, ожидающий воспроизведения.
Ответ №1:
Вы должны иметь возможность установить этот атрибут для папки, чтобы избежать резервного копирования всей папки.
Однако обратите внимание, что, возможно, не стоит делать это с папкой complete Documents. Прежде всего, это создаст ситуацию, когда в вашем приложении нет резервной копии содержимого, поэтому при восстановлении телефона приложение будет в обычном состоянии. Я также мог бы предположить, что это просто не так, «как предполагала Apple», и, следовательно, может привести к отклонению приложения (всегда догадки). Если возможно, я бы создал подпапку для вашего содержимого без резервной копии в каталоге документов и поместил все туда (для этого может потребоваться некоторый код переноса, если у вас уже есть версия этого приложения в магазине).
Обратите внимание, что рекомендации по хранению действительно разрешают хранение созданного пользователем / не подлежащего воссозданию содержимого в каталоге Documents, и вам нужно только отметить такие вещи, как загруженный контент и т.д., Которые вы не можете поместить в каталог Caches (например, если пользователь ожидает, что это содержимое будет доступно в автономном режиме).
Комментарии:
1. спасибо за быстрый повтор .. я постараюсь создать папку и поместить в нее все мои файлы .. для чего я предоставлю атрибут «не создавать резервные копии».
Ответ №2:
Используйте эту функцию
-(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
if (amp;NSURLIsExcludedFromBackupKey == nil) {
// iOS 5.0.1 and lower
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, amp;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:amp;error];
return error == nil;
}
}
это внедренный код.Спасибо