2012-10-01 12 views
10

Salviamo alcuni file generati durante l'esecuzione all'interno del pacchetto .app della mia app iOS. Nel simulatore funziona benissimo, nel dispositivo si blocca:Un'app iOS ha accesso in scrittura all'interno del relativo pacchetto?

Impossibile creare file di output nel percorso di cache data dello shader '/ var/mobile/Applications/CB064997-B40E-4FE3-9834-B3217CE33489/SimedTest. app/Ogre3D/beni/RTShaderLib/cache/

c'è una buona panoramica di dove dovrebbe e non dovrebbe mettere i file - come utilizzare documenti, biblioteca e TMP, ecc?

Per chiarire, si tratta di file creati all'avvio che precalcolano alcuni dati per risparmiare tempo. Se non sono presenti vengono creati così va bene vengono cancellati, ma non mentre l'applicazione è in esecuzione.

+1

Vedere http://stackoverflow.com/a/12371323/1633251 per informazioni dettagliate su dove archiviare i file e impedire i backup di iCloud. –

risposta

14

Il bundle è di sola lettura. Non si vuole scherzare con esso per due motivi:

  • Firma codice: la firma è verificata da contro il contenuto del pacchetto; se si scherza con il pacchetto, si interrompe la firma.
  • Aggiornamenti app: gli aggiornamenti funzionano sostituendo l'intero pacchetto di app con uno appena scaricato; eventuali modifiche apportate andranno perse.

Dove si dovrebbe salvare roba:

  • Documenti: se si vuole che persistono e eseguire il backup
  • Library/Caches: se si desidera solo per memorizzare nella cache i dati scaricati, come profilo le foto; verrà cancellato automaticamente dal sistema se è basso sulla stanza, a meno che non lo specifichi con uno speciale flag di non-eliminazione.
  • tmp: File temporanei, cancellati quando la vostra applicazione non è in esecuzione

Per una spiegazione completa e check-out File System Programming GuideQA1719.

+0

qual è il comportamento per tmp ... quando viene cancellato? –

+0

@John Aggiornato con un collegamento; dovresti cancellare te stesso da solo, ma il sistema si riserva il diritto di eliminare qualsiasi cosa ogni volta che la tua app non è in esecuzione. – benzado

4

No, ogni volta che si modifica il pacchetto si annulla la firma.

Se si desidera scrivere i file, è necessario scrivere nella cartella migliore in base a ciò che si desidera fare con tale file. cartella

  1. Documenti per lunga durata file
  2. cache per le piccole operazioni
  3. e così via

EDIT

Per ottenere risultati path `ll bisogno di qualcosa come questo:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"filename.ext"]; 

Con questo path è possibile scrivere o leggere in questo modo:

scrittura:

NSString *content = @"One\nTwo\nThree\nFour\nFive"; 
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil]; 

lettura:

NSString *content = [[NSString alloc] initWithContentsOfFile:fileName usedEncoding:nil error:nil]; 
Problemi correlati