Primeros pasos desarrollando aplicaciones para dispositivos con jailbreak

  • El proceso de desarrollo de aplicaciones para terminales con Jailbreak requiere de pasos que pueden ser un poco complicados. En este post ofrecemos las bases.

Publicidad

¿Cuántos de vosotros habéis tenido alguna vez la curiosidad de qué hay que hacer para desarrollar alguna aplicación para Cydia, o más en general, para dispositivos con  jailbreak?

Pues bien, el presente post pretende ser una guía básica de primeros pasos a tener en cuenta.

Hay varios puntos que sería interesante conocer antes de comenzar con el desarrollo de aplicaciones de este tipo. En primer lugar, es muy recomendable tener algunas nociones básicas de los lenguajes C / Objective-C. Además, conviene tener un ordenador con MacOS (si bien no es imprescindible) con la versión del SDK (el kit de desarrollo) para la que queramos programar, y si queremos usarlo, necesitaremos tener Xcode instalado.

iPhone con jailbreak

Para los menos iniciados en el tema, Xcode es el programa proporcionado por Apple para desarrollar aplicaciones para iOS. Este software nos ofrece un entorno de programación “amigable”, muy gráfico, y con multitud de ayudas visuales que facilitan la edición del código. También incluye el Interface Builder (que hasta la versión 4 de Xcode era un programa aparte, pero ahora ambos elementos están integrados en una sola interfaz) que permite, gráficamente, diseñar el aspecto de nuestra aplicación mediante vistas, botones, sliders, menús de selección, textos, etc. Si queremos desarrollar aplicaciones para AppStore, tendremos que usar Xcode y necesitaremos un Mac, o bien podremos instalar una máquina virtual de Mac en nuestro PC mediante herramientas como VMWare Workstation o utilizar otros métodos más peregrinos (como el hackintosh).

Pantalla de trabajo de Xcode

Podemos preguntarnos: ¿por qué surge la necesidad de utilizar otras técnicas diferentes para desarrollar aplicaciones para iOS con jailbreak? ¿Por qué no pueden ser todas aplicaciones normales como las que encontramos en AppStore? La respuesta se encuentra en la propia filosofía de Apple: para la compañía de la manzana, lo principal y primordial, el “leit motiv” de toda su obra, es la optimización de la experiencia de usuario. Esto quiere decir que no permiten programar aplicaciones de cualquier tipo, sino que “limitan” sus funcionalidades evitando ciertos comportamientos que pudieran hacer empeorar la experiencia de uso, o comprometer en cualquier aspecto la integridad de los datos, la privacidad del usuario, información delicada del terminal, etc.  ¿Y cómo decide Apple qué aplicaciones pueden ser aptas para el App Store y cuáles no? Comprobando qué API‘s y qué métodos utiliza: hay determinadas clases que son privadas y otras son públicas. E incluso dentro de las públicas, hay determinados métodos que son privados. Cuando Apple detecta que estamos utilizando alguno de éstos métodos, rechaza nuestra aplicación y no nos permite subirla a AppStore.

Llega entonces la tarea de buscar mercados alternativos para nuestra aplicación, como puede ser Cydia. Ahora bien, ¿cómo podemos acceder a métodos y clases privados de Apple, si no los conocemos? Mediante una técnica que se conoce como “dump“. Consiste en volcar los frameworks que tenemos embebidos en nuestro SDK de forma que podamos entrar a ellos y navegar para estudiar sus clases, sus controladores, qué parámetros recogen y qué parámetros pasan, etc. Para ello, recomendamos que leáis el artículo Dump Public and Private iOS Frameworks de Conor Burgess. En él, se explica cómo utilizar un script que el propio Conor ha desarrollado, y que con ayuda de la herramienta class-dump nos permite tener accesible todos los frameworks del SDK. Además necesitaremos otros dos ficheros (substrate.h y libsubstrate.dylib) que el script utiliza para el parcheo de los frameworks. Una vez seguidos los pasos que el script de volcado requiere (simplemente un par de líneas de comandos), todos los archivos de cabeceras para el SDK habrán quedado volcados, parcheados y unidos. Hay que añadir que esto no interferirá en absoluto con el correcto funcionamiento de nuestro Xcode, de forma que si queremos desarrollar posteriormente otras aplicaciones válidas para AppStore, no tendremos ningún problema.

Muy bien, ya tenemos disponibles todos los métodos, incluso aquellos que Apple no quiere que veamos. ¿Cuál es el siguiente paso? Lo próximo será comenzar a desarrollar nuestra aplicación. Ésta evidentemente es la parte más enrevesada, no sólo porque tendremos que pelearnos con el código, sino porque para muchas de las cosas que querremos hacer, no podremos utilizar Xcode e Interface Builder de la manera clásica. En su lugar, necesitaremos otro “entorno de desarrollo”, más adaptado a aplicaciones para jailbreak: el conocido Theos y Logos. Tras instalar Theos, ejecutaremos el NIC (New Instance Creator), que nos preguntará qué tipo de programa queremos comenzar a desarrollar: una aplicación, una librería, un grupo de preferencias, una herramienta o un tweak.

Menú NIC de Theos

Tras seleccionarlo y darle un nombre al programa, al autor, etc., obtendremos todas las plantillas necesarias creadas sobre las que podremos comenzar a programar. Para que nos hagamos una idea, programas como LockInfo, Activator, SBSettings, etc., son todos librerías dinámicas (dylib), en vez de aplicaciones como tal. Por su parte, Logos nos ayudará cuando compilemos nuestro desarrollo, al convertir la sintaxis simple de Theos en el complejo lenguaje de Mobile Substrate, del que hablaremos a continuación.

Como último punto de esta mini-guía, hablaremos sobre una de las características fundamentales en las aplicaciones para terminales con jailbreak: la inyección de código. Una vez que tenemos nuestros frameworks disponibles, nuestro Theos instalado, y creada nuestra plantilla sobre la que trabajar, necesitaremos de alguna forma (especialmente si estamos programando alguna librería dinámica o algún tweak) poder interferir en la ejecución normal del código de Apple en el dispositivo. Para ello, tendremos que conocer el funcionamiento de Mobile Substrate. Esta capa  es un componente requerido por multitud de programas (como SBSettings, Winterboard, Five Icon Dock…) , y fue desarrollada por Saurik. Funciona montando librerías cuando carga el Springboard, e inyectando su código en las aplicaciones que lo ejecutan. Esto es lo que se conoce como “hook“, o sea, situar anzuelos en el código en los que nosotros podremos insertar el nuestro propio para engancharlo. Además, Mobile Substrate nos protege de posibles cuelgues del terminal, poniéndolo en una especie de modo “a prueba de fallos” cuando hay algún error en el Springboard.

En resumen, como veis, el proceso para comenzar a desarrollar aplicaciones de este tipo requiere una cierta preparación, unas buenas dosis de paciencia y una visión general del proceso que estamos siguiendo. Si bien no hay mucha información (especialmente en español) al respecto, en el servidor de IRC irc.saurik.com, canal #theos, podréis recibir más ayuda especializada y concreta para cada aspecto en particular. Lo que aquí os presentamos son sólo unos primeros pasos, que esperamos os resulten útiles para saber dónde podéis buscar más información, y qué información podéis buscar.

Publicidad

Joaquín A.

Ingeniero de Telecomunicación, y enreda por naturaleza, llevo toda la vida trasteando con todos aquellos aparatos electrónicos que caían en mis manos. He tenido móviles Symbian, Android, iPhone, así como ordenadores con Windows y MacOS. Apasionado del diseño gráfico, edición de vídeo y jugón empedernido. Escribo también en mi blog sobre ciencia en general, podéis leerlo en Átomos y Bits. También podéis seguirme en Twitter.

4 Respuestas

  1. Dann dice:

    hola necesito saber como le hago para eliminar tantos idiomas en mi iphone 3g

  2. Dann dice:

    como puedo actualizar mi iphone 3g de 4.1 a 4.2 sin que se bloquee por fas ayuda gracias

    • Joaquín A. dice:

      Hola Dann,
      Si no me equivoco, la última versión de iOS que Apple lanzó para el iPhone 3G era la 4.2.1, así que si quisieras actualiarlo a dicha versión, bastaría con que lo conectaras a tu PC y lo hicieras desde iTunes, claro que perderías el jailbreak si lo tienes hecho.
      Pásate por http://iphoneosx.com/jailbreak/ para ver cómo realizarle el jailbreak a tu terminal después de la actualización.
      Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *