2012-01-07 6 views
20

Mój iphone app ma odrzucił niedawno & z niżej wymienionego powodu:My iPhone App został odrzucony z tego powodu „Odkryliśmy, że Twoja aplikacja nie przestrzega wytycznych Storage iOS danych, ...”

„Odkryliśmy Twoja aplikacja nie jest zgodna z wytycznymi dotyczącymi przechowywania danych w iOS, co jest niezgodne z wytycznymi przeglądu App Store. "

Dla tej aplikacji byłem przechowywania bazy danych (SQLite) w pliku/katalogu/Dokumenty dla iOS 5.0.1 & powyżej & dla iOS 5.0 & poniżej wersji użyłem Biblioteka katalogu/cache.

W przypadku innych danych, takich jak PDF & grafiką obrazów, które ja pobierania z serwera I następuje takie samo podejście jak powyżej jak: iOS 5.0.1 & Później: Zapisane tych danych do/Dokumenty/katalogu iOS 5.0 & wcześniejsze wersje: Zapisano dane w katalogu biblioteki/pamięci podręcznej.

Czy to podejście jest prawidłowe?

Zgodnie z wytycznymi Apple: Ważne: Nowy atrybut "nie twórz kopii zapasowych" będzie używany tylko w systemie iOS 5.0.1 lub nowszym. W systemie iOS 5.0 i wcześniejszych aplikacje będą musiały przechowywać swoje dane w katalogu/Library/Caches, aby uniknąć konieczności utworzenia kopii zapasowej. Ponieważ ten atrybut jest ignorowany na starszych systemach, musisz upewnić się, że Twoja aplikacja jest zgodna ze wskazówkami dotyczącymi przechowywania danych systemu iOS we wszystkich wersjach systemu iOS obsługiwanych przez aplikację.

Również bardzo nieporozumień związanych z przypisaniem atrybutów "nie twórz kopii zapasowych" dla danych przechowywanych dla systemu iOS 5.0.1 & później. Dla jakich plików muszę przypisać tę flagę? Czy mogę go użyć do bazy danych ?.

Potrzebujesz pozbyć się odrzucenia, tak jak to miało miejsce dwukrotnie. Podaj wskazówki dotyczące przechowywania danych w mojej aplikacji. Z góry dziękuję. Czekamy na pozytywną odpowiedź.

+0

Możesz spróbować wysłać Marco Amenta (z Instapaper do DM lub tweeta). Jeśli mam rację, miał do czynienia z tym nie tak dawno temu. Każda pomoc tego linku - http://www.marco.org/2011/10/13/ios5-caches-cleaning? – Bourne

Odpowiedz

17

Sprawdź https://developer.apple.com/icloud/documentation/data-storage/

szczególności:

Użyj tego atrybutu z danych, które mogą zostać odtworzone, ale musi utrzymują się nawet w słabych warunkach magazynowania dla prawidłowego funkcjonowania aplikacji lub ponieważ klienci oczekują go do być dostępne w trybie offline. Ten atrybut działa na oznaczonych plikach niezależnie od katalogu, w którym się znajdują, w tym katalogu Dokumenty.

przechowywać db SQLite w pamięci podręcznej folderu i ustawić flagę donotbackup, która zatrzyma plik przed usunięciem przez czystego systemu cache

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

używam bazy danych w moim app i przechowywać go w folder cache (z powyższym zestawem flag) i właśnie został zatwierdzony bez problemu.

Ponadto można przechowywać dane w podfolderze katalogu dokumentów, który moim zdaniem nie będzie kopii zapasowej, ale będzie trwał.

+4

Podgląd strony: należy użyć "com.apple.MobileBackup", a nie własnego identyfikatora pakietu aplikacji. – cynistersix

+0

Co zrobić, jeśli kopia zapasowa jest wymagana przez użytkownika? – Bill

+0

Strona, z którą się łączyłem, mówi wszystko, jeśli wygenerowana przez użytkownika treść powinna wejść/Dokumenty BEZ powyższego zestawu flag, w ten sposób zostanie utworzona kopia zapasowa do iCloud, cokolwiek innego powinno wejść/Library/Caches –

6

Jeden z moich przyjaciół ma ten sam problem. Podstawowym problemem jest przechowywanie ciężkich danych w katalogu dokumentów aplikacji.

Po zaimplementowaniu iCloud w Apple, dane katalogu Document są w jakiś sposób powiązane z iCloud Storage. W związku z tym Apple odrzuca aplikacje korzystające z ciężkiego przechowywania danych w katalogu dokumentów.

Musisz przechowywać dane w innym miejscu. Przechowaj plik PDF & Inne pliki graficzne W innym miejscu.

Ten link może ci pomóc.

http://www.techotopia.com/index.php/Working_with_Directories_on_iOS_4_%28iPhone%29

Mam nadzieję, że rozwiąże Twój problem.

2

Aby rozwiązać Wniosek odrzucony przez firmę Apple dla aplikacji nie jest zgodny z wytycznymi dotyczącymi przechowywania danych w systemie iOS, należy dodać następujący kod do swojej aplikacji.

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
{ 
     if (&NSURLIsExcludedFromBackupKey == nil) 
     { 
      // iOS <= 5.0.1 
      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; 
     } 
     else 
     { 
      // iOS >= 5.1 
      NSError *error = nil; 
      // if you set YES in Resources value then iTune will not backup that file or folder. 
      // You set FALSE in Resources value then iTune will backup that file or folder. 
      [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; 
      return error == nil; 
     } 
} 

użyć tej metody (przykład)

NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"CDTDatabaseNew" ofType:@"sqlite"]; 
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 
NSURL *guidesURL = [NSURL fileURLWithPath:dbPath]; 
[self addSkipBackupAttributeToItemAtURL:guidesURL]; 

Musisz użyć tej metody, gdy jesteś utworzyć lub kopiować pliki w katalogu dokumentów.

UWAGA: -Apple zmieniła linię do przechowywania danych i jeśli przechowujesz cokolwiek w katalogu dokumentów, musisz poprawić powyższy kod, nie przegap tej części kodu.

Aplikacja zostanie odrzucona, jeśli nie dodasz tego kodu. Od teraz każdy musi dodawać ten kod, gdy tylko tworzysz bazę danych, przechowujesz obrazy w pamięci podręcznej itp. W katalogu dokumentów. Mam nadzieję, że następnym razem nie będę mógł odrzucić aplikacji z tego powodu.

Powiązane problemy