reverse-engineering

Ingeniería inversa de modelos de Core Data

 

Cuando xcode compila un proyecto, no se limita a transformar nuestro código fuente Objective C en código máquina. También «compila» otros archivos, en este caso xml, a una versión binaria. En concreto, los más comunes son:

  •  xib: se convierte a un nib binario
  •  xcdatamodel: el fichero contents dentro de este bundle se convierte en un mom binario

El último es precisamente el que contiene el modelo de datos Core Data de la aplicación. Ahora bien, ¿es posible hacer una ingeniería inversa del fichero mom (el modelo de Core Data) de una aplicación?

La respuesta es sí, y resulta sorprendentemente sencillo de hacer.

Localizar el modelo de datos Core Data de una App (.mom)

Lo primero es tener acceso al fichero mom. Si es una App para OSX, es muy sencillo. Abre el bundle de la App, vete al directorio resources y dentro de él, encontrarás un subdirectorio cuyo nombre termina en .momd Dentro de él, estarán las distintas versiones del modelo de datos.

Si se trata de una App de iOS, el proceso es un poquito más largo, pero es esencialmente el mismo. Lo primero es localizar el fichero .ipa en tu mac.

Cada vez que iTunes hace una copia de seguridad de tu iPhone, hará también una copia de todas las Apps. Cada App va empaquetada en un fichero .ipa, que no es más que un zip con otra extensión.

Busca el nombre de la App con Spotlight y localiza el ipa. Cópialo al escritorio y cámbiale la extensión a zip. Extrae su contenido y ve al directorio payload. Una vez dentro, verás el «bundle» de la App. Entra en él y localiza un subdirectorio cuyo nombre termina el momd. Ahí dentro estarán los modelos en versión binaria (los ficheros.mom).

Importar un fichero de datos mom desde Xcode

Una vez has localizado el fichero .mom, ya puedes importarlo. Abre Xcode y crea una App vacía que use Core Data. Selecciona el modelo de datos y vete al menú «Editor». Selecciona el submenú «import» y apunta al .mom que ya tienes fichado.

¡Ya está! Ya puedes fisgonear cómo está hecho el modelo de Core Data de otras Apps.

Si quieres aprender más de Core Data, ¡pásate por el Curso Intermedio de Desarrollo iOS de Agbo!

Acerca de Fernando Rodriguez

Fundador & Editor Jefe de justcodeit, Fernando Rodríguez (@frr149 & Linkedin) es desarrollador & un experto en la enseñanza de máxima calidad en programación y desarrollo para dispositivos iOS, Cocoa Touch, Objective C, Swift, Python, entre otros, aunque su mejor carta de presentación, es la opinión de sus alumnos: http://keepcoding.io/es/testimonio/ CLO en KeepCoding & Arunovo. Instructor de iOS Avanzado del Big Nerd Ranch. Profesor Asociado de la U-tad, autor invitado de revistas como iPhoneWorld, Applesfera.com & ponente habitual en conferencias dentro y fuera de España (iOSDevUK, CodeMotion, BCNDevCon, etc). En sus vidas anteriores fue un nerd de Python y Django, mago de Smalltalk, y para su pesar, galeote de C++ y un gran cocinero.

Share this: