Pantalla de Xcode

Ideas básicas para programar aplicaciones para dispositivos con Jailbreak

¡Buenas tardes, estimados lectores!

Es probable que entre vosotros (dada la temática de nuestro blog) se encuentren lectores a los que les gustaría programar aplicaciones iOS para iPhone, iPod o iPad que tengan hecho el Jailbreak. Si es así, en este post os ofreceremos las ideas básicas para que sepáis al menos por dónde empezar, y qué podéis esperar encontraros.

Si decidís embarcaros en este complicado viaje, hay varias nociones que sería interesante que conozcáis antes de comenzar con el desarrollo de aplicaciones de este tipo. En primer lugar, es altamente 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. Con estos elementos y algunos manuales, podemos empezar a intentar programar algo con sentido. El problema es precisamente que existen pocos repositorios de información donde vayamos a poder encontrar ayuda sobre el tema.

Para aquellos con menos conocimientos sobre 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. El hecho de contar con Interface Builder nos ahorrara muchas horas de trabajo, más cuanto más vistosa sea nuestra interfaz de usuario. 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 o utilizar otros métodos más peregrinos (como el hackintosh). Si tenéis un ordenador medianamente potente, la opción de la máquina virtual suele funcionar bien. El problema es que a menudo la máquina se queda congelada si no la usáis durante unos minutos (es decir, si cambiáis al sistema operativo anfitrión, Windows por ejemplo, al volver a la máquina virtual pasados unos minutos es probable que encontréis que no responde). Si esto ocurre, basta con reiniciar la máquina virtual, aunque perderéis todo el trabajo que no tengáis guardado.

Pantalla de Xcode

Pantalla de Xcode

Si somos curiosos, es probable que nos preguntemos 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? Pues bien, la respuesta se encuentra en la propia filosofía de Apple: para la compañía de la manzana, lo principal y más importante, el motivo vital de toda su obra, es la optimización de la experiencia de usuario. Esto quiere decir que no nos van a permitir 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. Bien, aclarado esto, ¿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.

En este punto, si queremos distribuir nuestra aplicación tendremos que buscar mercados alternativos para ella, 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“. Esta idea 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 profundizar en este tema, 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. Es importante señalar que esto no interferirá en absoluto con el correcto funcionamiento de nuestro Xcode, aclaración imporante en el supuesto de que queramos desarrollar posteriormente otras aplicaciones válidas para AppStore, en cuyo caso no tendremos ningún problema.

De acuerdo, en este punto ya tenemos disponibles todos los métodos, incluidos aquellos que Apple no quiere que veamos. Ahora, el siguiente paso lógico será comenzar a desarrollar nuestra aplicación. Ésta evidentemente es la parte más complicada, 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. Una vez instalado Theos, ejecutaremos el NIC (New Instance Creator), que nos preguntará qué tipo de programa queremos comenzar a desarrollar: podremos elegir entre una aplicación, una librería, un grupo de preferencias, una herramienta o un tweak.

Pantalla de Theos

Pantalla de Theos

Después de seleccionar el tipo de programa, y tras asignarle un nombre, un autor, etc., obtendremos todas las plantillas necesarias creadas sobre las que podremos comenzar a programar. A modo de referencia y para que os sirva de ejemplo, 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.

Para finalizar esta mini-guía, es imperativo comentar brevemente 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 (y sobre todo 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. Su forma de actuar es montar librerías cuando carga el Springboard, de forma que pueda inyectar 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. Por otra parte, Mobile Substrate nos protege de posibles cuelgues del terminal, poniéndolo en una especie de modo “a prueba de fallos” en caso de que haya algún error en el Springboard.

Resumiendo, 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. A pesar de que no hay mucha información (especialmente en castellano) 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.

Si alguno de vosotros se anima, y esta breve introducción le ayuda a desarrollar alguna aplicación, hacédnoslo saber. ¡Estaremos encantados de hablar de ella en Átomos y Bits! 🙂

2 Comments

  • Álvaro dice:

    Yo se de SDK no tengo mac pero se programar en esa interfaz es sencilla e intuitiva.

  • Leonard dice:

    Ojo, no confundamos SDK (que es una cosa genérica) con el SDK concreto para iOS que es el XCode. De todas formas, Álvaro, si quieres animarte y probar a programar, puedes hacerlo instalándote una máquina virtual en tu PC. ¡Así empecé yo, y para tener unas nociones básicas, es más que suficiente! 🙂
    Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.