2014-03-02 2 views
11

Durch das Hochladen der App in den App Store habe ich diesen Fehler erhalten.2.23: Apps müssen den iOS-Datenspeicherrichtlinien entsprechen oder sie werden abgelehnt

2,23: Apps müssen die iOS Data Storage-Richtlinien folgen, oder sie werden

ich falsch beobachtet habe abgelehnt, was ist, ist, dass eine der Dateien, die Speicherung Ich verwende nicht erfüllt Anforderungen.

Um genauer zu sein, ist es eine SQLite zum Laden Karten Offlines-Modus mit Route-Me-Bibliothek.

Ich benutze sqlite zum Laden Karte im Offline-Modus, es scheint, dass diese Karte als Backup in iCloud gespeichert ist, so überspringe ich Speicher Einschränkungen.

Ich weiß nicht, wie ich sagen soll, dass diese Kopie nicht in iCloud erstellt wird.

Der Code ist wie folgt:

[[RMDBMapSource alloc] initWithPath: @ "map.sqlite"]; 

Die Dateigröße 23MB

irgendwelche Ideen?

+0

Machen Sie eine Suche - begann mit der Liste der verwandten Fragen auf der rechten Seite. Es gibt viele bestehende Diskussionen zu diesem Thema. – rmaddy

Antwort

23

Wahrscheinlich speichern Sie Ihre "map.sqlite" im Dokumentenverzeichnis Ihrer Anwendung. SQLite-Dateien werden normalerweise in das Documents-Verzeichnis kopiert, damit sie beschreibbar sind. Aber iOS versucht standardmäßig, alle Dateien im Documents-Verzeichnis in iCloud zu kopieren oder zu sichern (wenn iCloud-Backup aktiviert ist). Daher können Sie gemäß den Richtlinien von Apple Folgendes tun, damit Ihre Datenbankdatei nicht von iCloud aus Ihrem Dokumentenverzeichnis gesichert wird.

Sie können die folgende Funktion aufrufen, den Pfad der "map.sqlite" als NSURL weitergeben müssen:

NSURL *url = [NSURL fileURLWithPath:yourSQLitePath]; 
[self addSkipBackupAttributeToItemAtURL:url]; 

Die Funktion in Apple als vorgesehen:

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

Diese Funktion stellt sicher, dass die Datei (als URL angegeben) nicht von iCloud gesichert wird.

Sie können Ihre Datenbankdateien auch in ein separates Verzeichnis innerhalb des Documents-Verzeichnisses stellen und dieses ganze Unterverzeichnis als 'nicht sichern' markieren, indem Sie diese Funktion aufrufen. Ich hoffe es hilft.

+0

In welcher Datei muss ich diesen Befehl eingeben? – Jen143Me

0

Grundsätzlich hängt es von der Art der Daten ab, die Sie speichern.

Wenn die Daten neu generiert werden können (z. B. wenn ein Benutzer die App auf einem anderen Gerät installiert), sollte es nicht gesichert werden.

Andernfalls ist die iCloud-Sicherung in Ordnung, da der Benutzer erwartet, dass seine Daten auch auf einem anderen Gerät verfügbar sind.

Im ersten Szenario haben Sie grundsätzlich zwei Möglichkeiten, dies zu erreichen, ...

Entweder Sie NSURL verwenden, um die kCFURLIsExcludedFromBackupKey auf Ihren Dateien zu setzen, entweder Sie speichern sie in einem Ort, der nicht Backed sein oben, wie <Application_Home>/Library/Caches. Beachten Sie, dass die zweite Lösung die bessere ist, IMHO.

NSURL * fileURL; 

fileURL = [ NSURL fileURLWithPath: @"some/file/path" ]; 

[ fileURL setResourceValue: [ NSNumber numberWithBool: YES ] forKey: NSURLIsExcludedFromBackupKey error: nil ]; 

Für das zweite Szenario, manchmal Apple-Rezensenten denken können Ihre Daten neu generiert werden, wenn es nicht:

Für Informationen können kCFURLIsExcludedFromBackupKey auf diese Weise verwendet werden. Dann müssen Sie erklären, warum die Daten gesichert werden müssen.

+0

Speichern Sie Ihre Datenbank nie im 'Caches' Verzeichnis !! iOS räumt sie auf, wenn ihnen kein freier Speicherplatz zur Verfügung steht. –

Verwandte Themen