2012-10-01 12 views
10

Guardo algunos archivos generados en tiempo de ejecución dentro del paquete .app de mi aplicación iOS. En el simulador funciona bien, en el dispositivo se bloquea:¿Tiene una aplicación de iOS acceso de escritura dentro de su paquete?

se pudo crear archivos de salida en la ruta de caché determinado shader '/ var/mobile/Applications/CB064997-B40E-4FE3-9834-B3217CE33489/SimedTest. aplicación/Ogre3D/assets/RTShaderLib/cache/

¿Existe una buena visión general de dónde debo y no debo poner los archivos, cómo usar Documents, Library y tmp, etc.?

Para aclarar, estos son archivos creados al inicio que precalculan algunos datos para ahorrar tiempo. SI no están presentes, se crean, así que está bien que se eliminen, pero no mientras se ejecuta la aplicación.

+1

Consulte http://stackoverflow.com/a/12371323/1633251 para obtener información detallada sobre dónde almacenar archivos y evitar las copias de seguridad de iCloud. –

Respuesta

14

El haz es de sólo lectura. Usted no quiere perder el tiempo con esto por dos razones:

  • Firma de código: la firma se verifica por el contenido del paquete; Si juegas con el paquete, rompes la firma.
  • Actualizaciones de la aplicación: las actualizaciones funcionan reemplazando todo el paquete de la aplicación con una descargada recientemente; cualquier cambio que haga se perderá.

Dónde debería guardar cosas:

  • Documentos: si usted quiere que persisten y ser respaldado
  • Library/Caches: si lo que desea es almacenar en caché los datos descargados, como el perfil de las fotografías; será borrado automáticamente por el sistema si está bajo en la habitación a menos que especifique con un indicador especial de no borrar.
  • tmp: ficheros temporales, borrados cuando su aplicación no se está ejecutando

Para una explicación completa y echa un vistazo a File System Programming GuideQA1719.

+0

¿cuál es el comportamiento de tmp ... cuándo se borra? –

+0

@John Actualizado con un enlace; debe borrar tmp usted mismo, pero el sistema se reserva el derecho de eliminar todo allí en cualquier momento que su aplicación no se esté ejecutando. – benzado

4

No, cada vez que cambie su paquete invalidará su firma.

Si desea escribir archivos, tendrá que escribir en la mejor carpeta según lo que desee hacer con ese archivo. carpeta

  1. Documentos de larga duración presenta
  2. caché para las pequeñas operaciones
  3. y así sucesivamente

EDITAR

Para obtener el path `ll necesita algo como esto:

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

Con esta path se puede escribir o leer la siguiente manera:

escritura:

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

lectura:

NSString *content = [[NSString alloc] initWithContentsOfFile:fileName usedEncoding:nil error:nil]; 
Cuestiones relacionadas