odrzucenie aplikacji na iOS z powodu 2.23-wytyczne dotyczące przechowywania danych na iOS

Oto wiadomość od Apple o odrzuceniu:

2.23-aplikacje muszą postępować zgodnie z wytycznymi dotyczącymi przechowywania danych w systemie iOS, inaczej zostaną odrzucone 2.23 szczegóły

Przy uruchomieniu i pobieraniu treści, Twoje sklepy z aplikacjami 6,5 MB, co nie przestrzegaj wytycznych dotyczących przechowywania danych w systemie iOS.

Następne Kroki

Proszę sprawdzić, czy tylko treści, które użytkownik tworzy przy użyciu aplikacji, np. dokumenty, nowe pliki, edycje itp. jest wspierany przez iCloud jako wymagane przez wytyczne dotyczące przechowywania danych w systemie iOS. Sprawdź również, czy jakiekolwiek pliki tymczasowe używane przez aplikację są przechowywane tylko w /tmp katalog; proszę pamiętać o usunięciu lub usunięciu plików przechowywanych w ta lokalizacja po ustaleniu, że nie są już potrzebne.

Dane, które można odtworzyć, ale muszą być zachowane dla prawidłowego funkcjonowania Twoja aplikacja - lub dlatego, że użytkownicy oczekują, że będzie dostępna w trybie offline - powinny być oznaczone atrybutem "do not Backup up". Dla obiektów NSURL dodaj Atrybut NSURLIsExcludedFromBackupKey zapobiegający odpowiedni plik z kopii zapasowej. Dla obiektów CFURLRef, użyj odpowiedni atrybut kCRUFLIsExcludedFromBackupKey.

Sprawdziłem pliki danych mojej aplikacji zarówno dla urządzenia, jak i symulatora. Znalazłem, że jeśli aplikacja jest używana przez jakiś czas, to całkowite dane aplikacji mogą przechowywać 5-6 MB, podczas uruchamiania. Ale odinstalowałem i ponownie zainstalowałem aplikację i sprawdziłem ponownie, widzę ~3MB przechowywania danych po uruchomieniu aplikacji.

Nie przechowuję wszelkie bazy danych podstawowych lub inne pliki baz danych. Ale zdałem sobie sprawę, że Google Analytics i Google Tag Manager przechowuje niektóre dane sqlite na tej ścieżce: "AppData / Library". Chodzi mi o to, że nie przechowuje na tej ścieżce: "AppData / Library / Caches". Czy wytyczne dotyczące przechowywania danych w systemie iOS mają jakieś znaczenie?

Przy okazji, iCloud jest wyłączony dla aplikacji.

Również używam SDWebImage do pobierania obrazów i przechowuje prawie 3 MB obrazów na Uruchom i przechowuje dane obrazu na tej ścieżce : "AppData / Library/Caches"

Czy masz pojęcie, co powinienem zrobić, aby rozwiązać ten problem?

Author: ersentekin, 2015-03-01

3 answers

Wczoraj dostałem tę samą wiadomość o odrzuceniu.

Używam poniższego kodu w application:didFinishLaunchingWithOptions:, aby zobaczyć, co moja aplikacja ma w folderze dokumenty i jakie są uprawnienia każdej pozycji dotyczącej kopii zapasowej iCloud:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSArray *documents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:basePath error:nil];
NSURL *URL;
NSString *completeFilePath;
for (NSString *file in documents) {
    completeFilePath = [NSString stringWithFormat:@"%@/%@", basePath, file];
    URL = [NSURL fileURLWithPath:completeFilePath];
    NSLog(@"File %@  is excluded from backup %@", file, [URL resourceValuesForKeys:[NSArray arrayWithObject:NSURLIsExcludedFromBackupKey] error:nil]);
}

Miałem kilka plików w tym folderze, które synchronizowały się z iCloud. Więc zamiast zapisywać te pliki w innym miejscu ustawiłem wartość zasobu dla klucza NSURLIsExcludedFromBackupKey ustawionego na YES, aby wykluczyć te pliki z kopii zapasowej przez iCloud, jak to:

NSURL *URL = [NSURL fileURLWithPath:photoPath];
[URL setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:nil];

Wysyłam moją aplikację ponownie DZISIAJ, aby sprawdzić, czy działa.

Mam nadzieję, że to pomoże.
 25
Author: Glauco Neves,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-28 10:03:49

Ostatnio zespół Apple Review odrzucił nas z tym samym problemem,

Podczas uruchamiania i pobierania zawartości Aplikacja przechowuje 9,65 MB na usłudze iCloud, która nie jest zgodna z wytycznymi dotyczącymi przechowywania danych w systemie iOS.

Sugerują, aby wykonać te same kolejne kroki , Jak wspomniano w powyższym pytaniu.

W naszym przypadku ustawiamy już to NSURLIsExcludedFromBackupKey w kodzie podczas pobierania zawartości. Poinformowaliśmy zespół recenzentów, że już robimy to, więc przekierowali nas do wsparcia technicznego programistów Apple (DTS), aby lepiej rozwiązać ten problem.

DTS odpowiedział, że to nasze pliki AppIcon powodują problem.

Appicony są archiwizowane w iCloud, ponieważ Apple wymaga wyświetlenia ikony na urządzeniu podczas pobierania aplikacji. Okazuje się, że pliki appicons naszej aplikacji są tak duże, że spowodowały odrzucenie, ponieważ tworzy kopię zapasową wielu danych na iCloud. Nie zostało to przekazane oczywiście dla nas przez zespół recenzentów aplikacji, ponieważ niektórzy z nich nie są świadomi tych nowych zmian narzędzi, które śledzą AppIcons.

Teraz, gdy znamy powód, zoptymalizowaliśmy nasze ikony za pomocą ImageOptim i zminimalizowaliśmy rozmiar do 75KB.

Wysłaliśmy naszą aplikację i mamy nadzieję, że zostanie ona zatwierdzona w ciągu 1 do 2 dni. :)

Mam nadzieję, że to pomoże komuś, kto ma ten sam problem. :)
 7
Author: KarenAnne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-15 03:17:59

Ostatnio natknąłem się na ten sam problem i właśnie przetłumaczyłem odpowiedź Glauco na Swift (choć prawdopodobnie można by ją napisać szybciej)

let directories = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true)
    if let documentDirectory = directories.first {
        do {
            let documents = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(documentDirectory)
            for files in documents {
                let urlForm = NSURL.fileURLWithPath(documentDirectory + "/" + files)
                do {
                    try print("\(files): \(urlForm.resourceValuesForKeys([NSURLIsExcludedFromBackupKey]))")
                } catch {
                    print("can't find key")
                }
            }
        } catch {
            print("can't retrieve contents")
        }
    }

Kod do setResourceValue

let urlToExclude = NSURL.fileURLWithPath(quoteSavePath!)
    do {
        try urlToExclude.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey)
    } catch { print("failed to set resource value") }
 5
Author: Antonydatiga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 20:00:31