ios - tengo - sistema ocupa mucho espacio iphone




¿Cómo puedo verificar lo que está almacenado en mi base de datos de datos principales? (10)

Estoy haciendo una aplicación que se basa en Core Data. Puedo ingresar datos en un campo de texto y almacenarlos.

Pero necesito saber si los datos están siendo almacenados.

Estoy tratando de hacer un detailView para mi tableView y no estoy obteniendo ningún resultado. Ahora me pregunto si es porque estoy haciendo algo mal con mi código o porque los datos no se almacenan correctamente.

¿Cómo puedo ver lo que está almacenado en la base de datos CoreData de la aplicación?


1) Obtener la ruta de la base de datos SQL de su simulador.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"%@", [paths objectAtIndex:0]);

2) Abrir el buscador. Presione Cmd + Shift + G. Pega algo, que obtuviste del párrafo 1. Ej:

/Users/USERNAME/Library/Developer/CoreSimulator/Devices/701BAC5F-2A42-49BA-B733-C39D563208D4/data/Containers/Data/Application/DCA9E9C7-5FEF-41EA-9255-6AE9A964053C/Documents

3) Descargar en el programa AppStore como SQLPro .

4) Abra el archivo en la carpeta con el nombre "ProjectName.sqlite".

¡BUEN TRABAJO! Verás algo como esto:


Aquí está mi solución (funciona en iOS 9):

Uso un script automator / bash que abre la base de datos en sqllitebrowser. El script encuentra la última aplicación instalada en el simulador. Instrucciones:

  1. Instalar DB Browser para SQLite ( http://sqlitebrowser.org/ )
  2. Crear nuevo flujo de trabajo en Apple Automator.
  3. Arrastre "Ejecutar bloque de script de Shell" y pegue este código:
cd ~/Library/Developer/CoreSimulator/Devices/
cd `ls -t | head -n 1`/data/Containers/Data/Application 
cd `ls -t | head -n 1`/Documents
open -a DB\ Browser\ for\ SQLite ./YOUR_DATABASE_NAME.sqlite

  1. (Opcional) Convierta este flujo de trabajo en una aplicación, guárdelo y arrástrelo a su dock. Para actualizar la base de datos simplemente haga clic en el icono de la aplicación.

Descargue el navegador SQLite desde here .

Ejecuta tu aplicación en el simulador. La aplicación debe copiarse en una ruta en tu Mac que tenga el siguiente aspecto:

/Users/$your username$/Library/Application Support/iPhone Simulator/$your iphone simulator version$/Applications/

Una vez que localice su aplicación, tendrá que profundizar más para encontrar la base de datos de sqlite (por lo general, en Documentos).


Disculpa por la respuesta tardía

No pude encontrarlo en la carpeta del simulador de iphone. Luego descubrí la carpeta imprimiendo la ruta del documento en el registro.

Código:

NSLog (@ "La ruta es% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory enDomains: NSUserDomainMask] lastObject]);

y el camino resulta ser así:

///Users//Library/Developer/CoreSimulator/Devices//data/Containers/Data/Application//Documents/coredata.sqlite


En cuanto a macOS Sierra versión 10.12.2 y XCode 8 se refiere

La carpeta debe estar aquí:

/Users/$username$/Library/Developer/CoreSimulator/Devices/$DeviceID$/data/Containers/Data/Application/$ApplicationID$/Library/Application Support/xyz.sqlite


La carpeta donde se almacena la base de datos se ha cambiado recientemente y no es donde esperaría encontrarla. Esto es lo que usé para resolver esto: Primero agregue este código a su viewDidLoad o applicationDidFinishLaunching:

    #if TARGET_IPHONE_SIMULATOR
    // where are you?
    NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
    #endif

Conseguí esto desde aquí: ¿ dónde está el directorio de documentos para el simulador de ios 8?

Esto revelará la ubicación real de su aplicación en la consola durante el tiempo de ejecución. Luego use el http://sqlitebrowser.org/ para verificar el contenido de su base de datos SQLite.

Trabajó como un encanto para mí;)


Si usa sqlite como medio de almacenamiento para Core Data, puede ejecutar su aplicación en el simulador e intentar verificar el archivo de la base de datos que se encuentra en la carpeta de la biblioteca de la zona de pruebas.

La ruta será algo así como: ~ / Library / Application Support / iPhone Simulator / 5.1 / Applications / 3BF8A4B3-4959-4D8F-AC12-DB8EF4C3B6E1 / Library / YourAppName.sqlite

Para abrir el archivo sqlite, necesita una herramienta. Uso una herramienta gratuita llamada Liya ( http://itunes.apple.com/us/app/liya/id455484422?mt=12 ).


Si ya ha accedido a los archivos sqlite, shm y wal, ejecute los comandos en el terminal para fusionar el archivo WAL en el archivo sqlite.

$ sqlite3 persistentStore
sqlite> PRAGMA wal_checkpoint;
Press control + d

Después de ejecutar los comandos anteriores, puede ver los datos en su archivo sqlite.

Utilidad para copiar archivos sqlite a sus escritorios (cambie la ruta del escritorio y proporcione la ruta absoluta, el símbolo ~ no funcionará.

Para iOS 10.0+ puedes usar persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

He creado la función de utilidad que copia el archivo sqlite a su ubicación deseada (funciona solo para el simulador). Puedes usar la utilidad como

import CoreData


let appDelegate = UIApplication.shared.delegate as! AppDelegate
UTility.getSqliteTo(destinationPath: "/Users/inderkumarrathore/Desktop", persistentContainer: appDelegate.persistentContainer)

Aquí está la definición del método de utilidad para swift

/**
 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
 @param destinationPath Path where sqlite files has to be copied
 @param persistentContainer NSPersistentContainer
*/
public static func getSqliteTo(destinationPath: String, persistentContainer: NSPersistentContainer) {
  let storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

  let sqliteFileName = storeUrl!.lastPathComponent
  let walFileName = sqliteFileName + "-wal"
  let shmFileName = sqliteFileName + "-shm"
  //Add all file names in array
  let fileArray = [sqliteFileName, walFileName, shmFileName]

  let storeDir = storeUrl!.deletingLastPathComponent()

  // Destination dir url, make sure file don't exists in that folder
  let destDir = URL(fileURLWithPath: destinationPath, isDirectory: true)

  do {
    for fileName in fileArray {
      let sourceUrl = storeDir.appendingPathComponent(fileName, isDirectory: false)
      let destUrl = destDir.appendingPathComponent(fileName, isDirectory: false)
      try FileManager.default.copyItem(at: sourceUrl, to: destUrl)
      print("File: \(fileName) copied to path: \(destUrl.path)")
    }
  }
  catch {
    print("\(error)")
  }
  print("\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n")
  print("In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in \(sqliteFileName) file")
  print("\n-------------------------------------------------")
  print("$ cd \(destDir.path)")
  print("$ sqlite3 \(sqliteFileName)")
  print("sqlite> PRAGMA wal_checkpoint;")
  print("-------------------------------------------------\n")
  print("Press control + d")      
}

Para objective-c

/**
 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
 @param destinationPath Path where sqlite files has to be copied
 @param persistentContainer NSPersistentContainer
 */
+ (void)copySqliteFileToDestination:(NSString *)destinationPath persistentContainer:(NSPersistentContainer *)persistentContainer {
  NSError *error = nil;
  NSURL *storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.firstObject.URL;
  NSString * sqliteFileName = [storeUrl lastPathComponent];
  NSString *walFileName = [sqliteFileName stringByAppendingString:@"-wal"];
  NSString *shmFileName = [sqliteFileName stringByAppendingString:@"-shm"];
  //Add all file names in array
  NSArray *fileArray = @[sqliteFileName, walFileName, shmFileName];

  // Store Directory
  NSURL *storeDir = storeUrl.URLByDeletingLastPathComponent;

  // Destination dir url, make sure file don't exists in that folder
  NSURL *destDir = [NSURL fileURLWithPath:destinationPath isDirectory:YES];

  for (NSString *fileName in fileArray) {
    NSURL *sourceUrl = [storeDir URLByAppendingPathComponent:fileName isDirectory:NO];
    NSURL *destUrl = [destDir URLByAppendingPathComponent:fileName isDirectory:NO];
    [[NSFileManager defaultManager] copyItemAtURL:sourceUrl toURL:destUrl error:&error];
    if (!error) {
      RLog(@"File: %@ copied to path: %@", fileName, [destUrl path]);
    }
  }


  NSLog(@"\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");
  NSLog(@"In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in %@ file", sqliteFileName);
  NSLog(@"\n-------------------------------------------------");
  NSLog(@"$ cd %@", destDir.path);
  NSLog(@"$ sqlite3 %@", sqliteFileName);
  NSLog(@"sqlite> PRAGMA wal_checkpoint;");
  NSLog(@"-------------------------------------------------\n");
  NSLog(@"Press control + d");
}

Una respuesta para un noobs como era, pasé bastante tiempo en averiguarlo. Los pasos que seguí son:

  1. Abre el buscador y presiona Command(Windows) + Shift + G
  2. Ir a la carpeta agregar ~/Library/Developer
  3. Busque el nombre de la base de datos que ha creado, ya que en mi caso era my.db en SQLite.
  4. Descargue e instale el navegador DB para SQLite.
  5. Haga clic en abrir base de datos.
  6. Ahora arrastre y suelte el archivo DB desde su buscador.

Swift 4

Agregue esta línea en la función AppDelegate >> didFinishLaunchingWithOptions :

print("Documents Directory: ", FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last ?? "Not Found!")

Su archivo modelName.sqlite estará allí.

Puede abrirlo con cualquier herramienta de navegador SQLite como http://sqlitebrowser.org/ que es gratis.





core-data