2016-02-26 101 views
9

La mia app viene rifiutata dall'app store più volte per non aver seguito "Linee guida per lo storage dei dati iOS". Ho segnato tutte le directory del documento con "non eseguire il backup" attributo come suggerito dal opinione Apple squadra, come mostrato:Problema di archiviazione dati iOS - Rifiutato anche dopo NSURLIsExcludedFromBackupKey

- (BOOL)addSkipBackupAttributeToItemAtPath:(NSString *) filePathString 
{ 
    NSURL* URL= [NSURL URLWithString:filePathString]; 

    NSError *error = nil; 
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] 
            forKey: NSURLIsExcludedFromBackupKey error: &error]; 

    return success; 
} 

che ho chiamato il addSkipBackupAttributeToItemAtPath metodo di cui sopra per tutti NSDocumentDirectory come mostrato:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    [self addSkipBackupAttributeToItemAtPath:[paths objectAtIndex:0]]; 

e il team di revisione afferma che sta ancora archiviando alcuni dati come backup su iCloud e viene respinto dal team di revisione Apple, in realtà non voglio alcun backup. C'è qualcosa che mi è mancato su Skip Backup Attribute? o qualcosa di sbagliato nel mio codice? per favore aiuto. Grazie.

+1

Abbiamo appena ricevuto lo stesso rifiuto che avete fatto, abbiamo fatto un controllo completo su ogni directory di fare in modo che tutti creati con la NSURLIsExcludedFromBackupKey, dita incrociate – Bastet

+0

@ Bastet, ha qualche soluzione? –

+0

Alcune delle nostre app hanno il rifiuto in relazione a questo problema, anche se abbiamo trovato solo pochi KB. Rispondiamo con screenshot alla nostra osservazione. Uno è approvato. Altri sono stati respinti e la nuova presentazione con questa modifica è ora nel processo di revisione. – Bastet

risposta

3

Scrivi questo codice nel metodo addSkipBackupAttributeToPath. Ho avuto lo stesso problema e sono stato risolto scrivendo questo codice.

- (void)addSkipBackupAttributeToPath:(NSString*)path 
{ 
    u_int8_t b = 1; 
    setxattr([path fileSystemRepresentation], "com.apple.MobileBackup", &b, 1, 0, 0); 
} 
2

Provare a utilizzare il NSCachesDirectory al posto del NSDocumentDirectory, per memorizzare le sottocartelle/file.

+0

Sì, utilizzare NSCachesDirectory. Inoltre, esegui il simulatore e verifica se vengono salvati dei dati oltre a quelli che prevedi di salvare. Potresti aver dimenticato di rimuovere del codice che potresti aver usato in precedenza nel tuo progetto. –

0

anche se io sto usando 'non eseguire il backup' attributo stavo memorizzazione dei contenuti scaricabili in \ Documents directory, così come per la priorità \ Documents contenuto verrà automaticamente eseguito il backup su iCloud.

Apple doc says:

  1. Solo documenti e altri dati che vengono generati dagli utenti, o che non possono altrimenti essere ricreato per l'applicazione, deve essere conservato nella directory /Documenti e volontà essere automaticamente sottoposti a backup da iCloud.

  2. dati che possono essere scaricati di nuovo o rigenerato deve essere conservato in il /directory Library/Caches. Esempi di file che devono includere nella directory Caches includono i file di cache del database e il contenuto scaricabile , ad esempio quello utilizzato dalle riviste, dai giornali e dalle applicazioni di mappe .

  3. dati che viene utilizzata solo temporaneamente deve essere conservato nella directory /tmp. Sebbene questi file non siano supportati da fino a iCloud, ricorda di cancellare quei file quando hai finito con in modo che non continuino a consumare spazio sul dispositivo dell'utente.

  4. Utilizzare il "non eseguire il backup" attributo per specificare i file che dovrebbero rimanere sul dispositivo, anche in situazioni di storage a basso. Utilizza questo attributo con dati che possono essere ricreati ma che devono essere mantenuti anche in situazioni di archiviazione basse per il corretto funzionamento della tua app o perché i clienti di si aspettano che siano disponibili durante l'utilizzo offline.Questo attributo funziona su file contrassegnati indipendentemente dalla directory in cui si trovano, inclusa la directory Documenti. Questi file non verranno eliminati e lo non sarà incluso nel backup iCloud o iTunes dell'utente. Poiché questi file utilizzano spazio di archiviazione su dispositivo, la tua app è responsabile per il monitoraggio e l'eliminazione periodica di questi file.