Colección de citas famosas - Slogan de motivación - ¿Cómo se ejecuta la zona de pruebas de la aplicación en iOS?

¿Cómo se ejecuta la zona de pruebas de la aplicación en iOS?

1. Mecanismo de zona de pruebas de IOS

Las aplicaciones IOS solo pueden leer archivos en el sistema de archivos creado en esta aplicación y no pueden acceder a ellos en ningún otro lugar. Esta área se llama zona de pruebas y todos los archivos que no son de código se guardan aquí, como imágenes, íconos, sonidos, imágenes, listas de propiedades, archivos de texto, etc.

1.1, cada aplicación tiene su propio espacio de almacenamiento.

1.2. Las aplicaciones no pueden trepar por sus propias paredes para acceder al contenido de otros espacios de almacenamiento.

1.3. Los datos solicitados por la aplicación deben pasar la verificación de permiso. Si no cumplen con las condiciones, no serán liberados.

De esta imagen, solo podemos entender que el sandbox es un sistema de seguridad en la superficie. Todas las operaciones de la aplicación deben realizarse a través de este sistema. Su contenido principal es: el sandbox realiza varias operaciones. los permisos de la aplicación.

2. Abra el directorio de la zona de pruebas del simulador.

Echemos un vistazo a dónde se encuentra la carpeta sandbox del emulador en la computadora Mac.

Estos archivos están en carpetas ocultas bajo su carpeta de nombre de usuario personal. El nombre chino es Biblioteca de recursos y el nombre en inglés es Biblioteca.

Aquí tienes una forma sencilla de encontrar esta carpeta: haz clic en -> en Finder. Ir->Ir a carpeta

Después de ingresar al simulador, se incluye el sandbox para cada aplicación.

Ingrese una aplicación, como se muestra a continuación, que es un sandbox.

La siguiente es la estructura de directorios del sandbox:

De forma predeterminada, cada sandbox contiene tres carpetas: Documentos, Biblioteca y tmp, así como un archivo de aplicación (también un archivo). Debido al mecanismo de espacio aislado de la aplicación, la aplicación solo puede leer y escribir archivos en unos pocos directorios.

Documentación: Apple recomienda guardar los datos de los archivos creados o explorados en el programa en este directorio, y estos datos se incluirán en la copia de seguridad y restauración de iTunes.

Biblioteca: almacena la configuración predeterminada u otra información de estado del programa;

Biblioteca/caché: almacena archivos de caché. iTunes no realiza una copia de seguridad de este directorio y los archivos de este directorio no se eliminan cuando se cierra la aplicación.

Tmp: Proporciona un lugar para crear archivos temporales sobre la marcha.

Al sincronizar con iPhone, iTunes realizará una copia de seguridad de todos los documentos y archivos de la biblioteca.

Cuando el iPhone se reinicie, todos los archivos tmp se descartarán.

Nota: Es fácil confundir paquetes aquí. Permítanme explicarles la diferencia entre los dos según mi propio entendimiento:

Paquete: cuando se genera una aplicación iOS, Xcode la agrupa en un paquete. Un paquete es un directorio en el sistema de archivos que recopila recursos relacionados en un solo lugar. Un paquete de aplicación iOS contiene su archivo ejecutable y archivos de recursos de soporte (como iconos de aplicaciones, archivos de imágenes y contenido localizado).

Un paquete es un directorio con una jerarquía estandarizada que contiene código ejecutable y los recursos utilizados por ese código.

Por tanto, puedes pensar en la aplicación completa como un paquete.

El concepto de sandbox no tiene nada que ver con paquetes. Simplemente significa que los recursos del programa están aislados del mundo exterior.

Expliquemos el paquete y el sandbox a través de un ejemplo sencillo.

//El archivo plist recién creado está en la aplicación y se puede acceder a él a través del paquete.

ns string * plist path =[[paquete principal de ns] ruta para el recurso:@ " my plist " de tipo:@ " plist "]

NSMutableArray * array =[ NSMutableArray arraywithcontentsofile:plist path];

//Agregar nuevos elementos a la matriz.

[array add object:@ " 3 "];

// Vuelve a escribir el archivo plist.

Valor BOOL =[array write tofile:plist ruta atómicamente:YES];

if (valor){

NSMutableArray * new array =[NSMutableArray arraywithcontentsofile: plist ruta];

NSLog(@ "nueva matriz = %@ ", nueva matriz);

}

/*Salida:

Nueva matriz=(

0,

1,

2,

tres

)

*/

//Obtener la ruta del documento en el sandbox

NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

ns string * directorio de documentos =[rutas objectAtIndex:0];

ns string * nueva ruta =[directorio de documentos stringByAppendingPathComponent:@ " data . plist "];

/ /Will La matriz se escribe en el archivo data.plist en la documentación del sandbox.

[escritura de matriz en archivo:nueva ruta atómicamente:YES];

NSMutableArray * arr =[[NSMutableArray alloc]initwithcontentsofile:nueva ruta];

NSLog (@"array in data.plist = %@ ", arr);

/*Salida:

data.plist =(

0, p>

1,

2,

)

*/

Descripción: Primero creamos un nuevo archivo plist en el proyecto (el tipo de elemento raíz es una matriz) y agregamos tres elementos. Debido a que el archivo plist recién creado está en la aplicación, podemos obtener el archivo plist a través del paquete, leer la matriz, agregar un elemento de datos y volver a escribirlo en el archivo plist. Luego obtenemos la ruta del documento de la zona de pruebas, luego escribimos este archivo en el archivo data.plist en la zona de pruebas (si no existe, creará uno nuevo automáticamente) y luego leemos la matriz de data.plist.

Con respecto al archivo MyPlist.plist recién creado, agregamos un nuevo elemento a la matriz del archivo, pero cuando miramos el archivo MyPlist.plist en xcode, encontramos que el elemento de matriz recién agregado no se muestra, pero es visible cuando se visualiza en el entorno de pruebas. Probablemente esto sea un problema con el propio xoode.

También podemos ver el archivo data.plist en el documento en el sandbox. Como se muestra en la siguiente figura:

3. Obtenga el directorio sandbox:

//1, obtenga el directorio de inicio del programa.

ns cadena * directorio de inicio = nshome directorio();

NSLog(@"Ruta:%@", directorio de inicio);

//Ruta: /Users/IOs/Library/Application Support/iPhone Simulator/6.1/Applications/BF 38 c9e 3-1A4A-4929-b5 F2-3e 46 e 41cc 671

//2.

NSArray * rutas = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

ns cadena * ruta = [rutas objectAtIndex:0]

NSLog(@"; Ruta:%@", ruta);

//Ruta:/Usuarios/IOs/Library/Application Support/iPhone Simulator/6.1/Applications/BF 38 c9e 3-1A4A-4929-b5 F2-3e 46 e 41cc 671/Documentos

//3. Obtener el directorio de caché.

NSArray * rutas = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

ns cadena * ruta = [rutas objectAtIndex:0]

NSLog(@"; Ruta:%@", ruta);

//Ruta:/Usuarios/IOs/Library/Application Support/iPhone Simulator/6.1/Applications/BF 38 c9e 3-1A4A-4929-b5 F2-3e 46 e 41cc 671/Library/Caches

//4. Obtener el directorio de la biblioteca

NSArray * paths = NSSearchPathForDirectoriesInDomains(directorio nslibrary, NSUserDomainMask, YES);

ns cadena * ruta =[rutas objectAtIndex:0];

NSLog(@"ruta:%@", ruta);

//Ruta:/Usuarios/IOs/Biblioteca / Soporte de aplicaciones/iPhone Simulator/6.1/Aplicaciones/BF 38 c9e 3-1A4A-4929-b5 F2-3e 46 e 41cc 671/Library

//5.

ns string * tmpDir = NSTemporaryDirectory();

NSLog(@ "Ruta:%@ ", tmpDir);

//Ruta:/Usuarios/; IOs/Library/Application Support/iPhone Simulator/6.1/Applications/BF 38 c9e 3-1A4A-4929-b5 F2-3e 46 e 41cc 671/tmp/

4 NSFileManager para operaciones de archivos

4.1. Crear un directorio de archivos en el documento.

NSArray * rutas = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

ns cadena * directorio de documentos =[rutas objectAtIndex:0];

NSLog(@ "directorio de documentos % @", directorio de documentos);

NSFileManager * administrador de archivos =[administrador predeterminado de NSFileManager];

ns string * directorio de prueba =[directorio de documentos stringByAppendingPathComponent:@ " prueba "];

//Crear un directorio

[administrador de archivos createDirectoryAtPath:directorio de prueba dentro del directorio intermedio:YES atributos:nil error:nil];

4.2 .Crear archivos en el directorio de prueba.

¿Qué pasa si creo un archivo? Luego, el código anterior testPath debe fusionarse con stringByAppendingPathComponent para generar un nombre de archivo, como Test11.txt, para que el archivo se pueda escribir en el directorio de prueba.

TestDirectory es la ruta generada por el código anterior. Ah, no lo olvides. Escribí tres archivos en la carpeta de prueba, test11.txt, test22.txt, text.33.txt. Todo está escrito.

El código de implementación es el siguiente:

ns string * testpath 1 =[directorio de prueba stringByAppendingPathComponent:@ " test 1 . txt "]; * ruta de prueba 2 =[directorio de prueba stringByAppendingPathComponent:@ " prueba 2 . txt "];

ns cadena * ruta de prueba 3 =[directorio de prueba stringByAppendingPathComponent:@ " prueba 3 . txt "]; >

NSString *string = @ "Escribir contenido, escribir cadena";

[administrador de archivos createFileAtPath:testpath 1 contenido:[datos de cadena usando codificación: codificación de cadena nsu TF 8]atributo:nil];

p>

[administrador de archivos createFileAtPath:testpath 2 content:[datos de cadena usando codificación:nsu TF 8 string encoding]atributo:nil];

[administrador de archivos createFileAtPath:testpath 3 content :[datos de cadena usando codificación: codificación de cadena nsu TF 8] atributo: nil];

4.3 Obtener todos los nombres de archivos en la columna del directorio

Hay dos formas de obtenerlos: subpathsOfDirectoryAtPath y subrutasAtPath.

NSArray * rutas = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

ns cadena * directorio de documentos =[rutas objectAtIndex:0];

NSLog(@ "directorio de documentos % @", directorio de documentos);

NSFileManager * administrador de archivos =[administrador predeterminado de NSFileManager];

ns string * mi directorio =[directorio de documentos stringByAppendingPathComponent:@ " prueba "];

//Método 1

NSArray * file =[archivo administrar subrutasOfDirectoryAtPath: mi directorio error:nil];

NSLog(@"% @ ", archivo);

//Método 2

NSArray * files =[archivo administrar subruta ruta sat:mi directorio];

NSLog(@"% @", file);

Obtenga todos los nombres de archivos en el directorio que acaba de probar:

Se generan ambos métodos.

(

"test1.txt",

"test2.txt",

"test3.txt"

)

4.4.fileManager utiliza el directorio actual para operar.

//Crear administrador de archivos

NSFileManager * administrador de archivos =[administrador predeterminado de NSFileManager];

NSArray * rutas = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

ns string * directorio de documentos =[paths objectAtIndex:0];

// Cambie al directorio que se va a operar.

[administrador de archivos cambiar la ruta del directorio actual:[directorio de documentos stringByExpandingTildeInPath]];

//Crear archivo nombre de archivo nombre de archivo, contenido contenido del archivo, si no hay contenido al principio, se puede configurar en atributos nulos, archivo de atributos, inicialmente nulo.

ns string * fileName = @ " testfilensfilemanager . txt ";

NSArray * array = [[NSArray alloc]initWithObjects:@ " hola mundo ", @ " hola mundo 1 ", @" hola mundo 2 ", nil];

// Lo siguiente es convertir el tipo de matriz al tipo NSData.

NSMutableData * data =[[NSMutableData alloc]init];

for(int I = 0;i<[recuento de matrices];++i){

ns string * str =[array objectAtIndex:I];

ns data * temp =[str data usando codificación: nsu TF 8 string encoding];

[data appendData :temp ];

}

//Tenga en cuenta que el tipo de parámetro de contenido es NSData.

[El administrador de archivos crea la ruta del archivo: nombre del archivo contenido: atributos de datos: vacío]

4.5 Eliminar archivo

Entonces el código anterior puede eliminar el nuevo Creado; ¡El archivo testFileNSFileManager.txt!

[Administrador de archivos removeItemAtPath: Error de nombre de archivo: nil];

4.6 Para leer y escribir datos mixtos, consulte la última parte del artículo original.