miércoles, 19 de mayo de 2010

"Blackberrizando" con el Mac (1)

Hace unos días me preguntaron si podía echar una mano con un proyecto para BlackBerry [Web oficial]. En realidad no te preguntan, te «asignan». Y luego te preguntan, por eso de ser mínimamente cariñosos, si te ha dolido. Se trata de una nueva versión de un producto ya existente. Durante mi estancia en Madrid estuve con ese proyecto. Heredé el código. E hice lo mejor que pude con el poco tiempo que nos dieron. Sí, existe tiempo negativo en los proyectos de software: «para ayer». Ahora había que repetir proeza. Y parece que querían contar conmigo de nuevo para ello. A alguien hay que echarle la culpa si las cosas no funcionan, ¿verdad? Pero la cosa se está complicando un poco en el trabajo. Nos mandan a trabajar desde casa —presuntamente y sin confirmar aún— y yo en casa lo único que tengo son equipos Mac. Confieso que no me apetece mucho andar metiendo otra mesa y otro equipo de sobremesa únicamente para trabajar, porque en la empresa seguimos usando Windows para todo. Bueno, en los servidores no tanto, porque Linux es «gratis». Y ya se sabe: en tiempos de crisis, ¿quién se resiste a la palabra gratis?

Visto el panorama, y mientras el cliente se decidía a aceptar presupuesto —porque la fecha es inamovible, pero el dinero se puede negociar—, opté por dedicar unos días a intentar desarrollar para Blackberry desde Mac. Pero claro, los de RIM parece que han decidido no darle mucha importancia a esa posibilidad. Sí, tienen un plug-in para Eclipse (Java) que solo funciona en Windows. Así no vamos a ninguna parte, verá usted. ¿Cómo se come que un producto sea monoplataforma cuando se desarrolla sobre una herramienta multiplataforma? Siempre existe la posibilidad de la virtualización en el Mac para ejecutar una máquina Windows, algo que no me es del todo ajeno. Como comenté hace ya lo que se me antoja un muchillón de años. Sin embargo, es una opción que prefiero evitar en la medida de lo posible. Por cierto, el IDE (JDE) de RIM para el desarrollo en BlackBerry es una castaña absoluta. Para muy masoquistas. Y el plug-in es para «darle de comer aparte».

Suerte que hay gente que no se amilana con facilidad y se metieron a resolver este problema antes que yo. Qué grande es Google, sí señor. No logro llegar a imaginar cómo sería el desarrollo, la programación de sistemas complejos, sin Internet ni Google entrando en la segunda década del siglo XXI. Supongo que aún estaríamos perforando tarjetas para escribir algoritmos en Fortran o algo similar. Así que, tras buscar durante un buen rato, porque parece que tampoco hay tanta gente con la misma inquietud —o ya está todo dicho al respecto—, di con algunos buenos enlaces:


Esta entrada de hoy tiene, principalmente, la función de servir de recordatorio para el futuro («Cuadernos del tolete»). Pruebo millones de cosas y, cuando pasa el tiempo, he olvidado cómo lo hice. Y, lo que es peor en muchos casos, de cómo se debe desinstalar para no tener el ordenador completamente lleno de porquería. Así que, sin querer llegar al nivel de las entradas referidas antes, sí que hago un pequeño breviario de lo realizado. Pero antes toca resumen de los artefactos software que se van a necesitar durante el proceso:


Y ahora sí que vamos con los pasos, en versión resumida. A modo experimental he decidido poner, al principio de cada paso, qué artefactos se requieren o sobre los que se actúa. A ver qué tal:

  1. [Windows] Descargar JDE de BlackBerry.
    Ya tenía del trabajo tres versiones distintas (4.2.1, 4.5.0 y 4.7.0). Cogí las tres.
    Existe la posibilidad de usar los componentes del plug-in de Eclipse para Windows. Descarté esta opción por tener ya los JDE anteriores.
  2. [Windows, JDE] Instalar JDE en Windows.
    Parece una perogrullada, pero habrá quien quiera extraer el contenido de los paquetes directamente. No merece la pena.


  3. [Windows, Mac, JDE] Copiar las carpetas JDE desde Windows a Mac.
    ¿Hay que explicar esto?


    Opté por meterlos dentro de la carpeta Librería de mi perfil.

  4. [Mac, Eclipse] Descargar e instalar Eclipse.
    Yo opté por la versión para desarrollos J2EE con la intención de aprovecharla para otros menesteres (la parte servidor se hizo usando JSF, por ejemplo; lo que fue un error, por poner otro ejemplo).
    «Instalar» Eclipse se traduce en copiar la carpeta descargada al directorio que mejor nos convenga. Yo al de Aplicaciones, por hábito.

  5. [Mac, Eclipse, JDE] Configurar entorno de Eclipse para usar JDE.
    Este punto está muy bien explicado en el apartado Prepare your workspace del enlace a Slashdev (arriba).


    Importante hacer referencia a la documentación de las API's de BlackBerry para aprovechar la ayuda en tiempo de edición de código.
  6. [Mac, JDE, MPlayIt] Descargar el SDK MPlayIt y extraer la versión universal de preverify.
    La versión que viene con los JDE no se puede usar en Mac OS X, así que se puede obtener una válida del SDK MPlayIt. Una vez descargado, copiar el archivo preverify que hay en la carpeta ./mpp-sdk/osx/preverify y copiarlo al directorio bin dentro de cada uno de los JDE instalados.

  7. [Mac, Eclipse, BlackBerry Ant Tools] Descargar e instalar BlackBerry Ant Tools.
    Esto es bastante sencillo, pues se trata de un archivo JAR que se copia en cualquier parte.
    Opté por seguir el consejo del artículo de Slashdev (apartado Setup and classpath) y lo metí dentro de ./eclipse/plugins/org.apache.ant_1.7.1/lib.
    Hay que añadir el JAR a la lista de entradas ANT disponibles.


    En este punto ya podemos compilar un proyecto para BlackBerry. Sin embargo no podemos cargar nada en un dispositivo pues para ello hay que firmar los binarios. Lo que requiere de la obtención de certificados.
  8. [Mac, JDE (SignatureTool.jar), Class Editor] Descargar y usar Class Editor para modificar constantes de los archivos internos de SignatureTool.jar
    La herramienta para firmar los binarios de BlackBerry solo funciona en Windows. Un problema con el carácter de separación de directorios.
    Hay un artículo que explica lo necesario para hacer hacking de SignatureTool.jar [@ Slashdev: Using sigtool in Linx].
    En este punto ya seríamos capaces de compilar y generar binarios firmados aptos para los terminales. Siempre y cuando nos hayamos hecho con los certificados pertinentes, lo que requiere darse de alta como programador para BlackBerry.
  9. [Mac, MacPorts] Descargar e instalar MacPorts.
    No hay mucho misterio al respecto, salvo que antes de poder usarlo se necesita disponer de una versión de XCode [@ Apple Developer: página de descarga] instalado.
    Descargar la versión del instalador que corresponde a la versión de Mac OS X de que se disponga. La de Snow Leopard es distinta de la de Leopard.
  10. [Mac, MacPorts, Wine] Instalar Wine
    ¡OJO! Dependiendo de si tienes Leopard o Snow Leopard hay que actuar de forma distinta.
    Si tienes Leopard, en el enlace de Azizuysal (arriba) está perfectamente explicado lo que tienes que hacer.
    Si tienes Snow Leopard, entonces la cosa se complica un poco. La versión de Wine que está a día de hoy en MacPorts (1.1.x) no funciona en este sistema operativo. Hay que usar el paquete alternativo wine-devel o esperar a que publiquen la versión 1.2. Peeeeeerooo, existe otro contratiempo, y es que esta wine-devel no funciona como versión x86_64, que por defecto es como se instalan todos los paquetes de los que depende, por lo que hay que forzar a la hora de instalar a que se use la «variante universal»:

    De esta forma, todos los paquetes de los que depende wine-devel se instalarán para funcionar tanto con x86_64 como i386.
    El proceso es bastante lento. En mi caso tardó casi una hora. Por lo que este punto se puede arrancar al principio de todo, mientras se va configurando el resto de elementos.

Y hasta aquí llegué. Andaba peleándome con Wine para arrancar el simulador siguiendo los pasos descritos en Azizuysal cuando me comunicaron que, de momento, quedaba fuera del proyecto. Así que toca limpieza para no dejar basura innecesaria instalada en el Mac. Si vuelven a incluirme ya reinstalaré lo que necesite. Y seguiré investigando para conseguir lanzar el simulador y depurar el código de BlackBerry en Mac. Sin embargo, de momento, mejor dedico mi tiempo en cosas más productivas. Más productivas ara mí, al menos.

De cara a desinstalar las cosas, los pasos serían:

  1. Desinstalar MacPorts [@ MacPorts: 2.5. Uninstall]
  2. Eliminar la configuración personal de Wine y la caché de WineTricks: rm -rf ~/.winetrickscache y rm -rf ~/.wine
  3. Limpiar el archivo ~/.profile.
    MacPorts incluye unas líneas en el archivo .profile del directorio de usuario para añadir a la variable $PATH los ejecutables que se descarguen por esta vía.
  4. Eliminar la historia de Class Editor: rm -rf ~/.ce
    Class Editor crea un directorio oculto en el directorio del usuario con su «hostory» (No es una quedada lo de la «o» donde debería ir una «i»).
  5. Eliminar el directorio donde se copiaron las carpetas JDE.
    En mi caso sería con rm -rf ~/Library/RIM
  6. Eliminar Eclipse: borrar directamente la carpeta de Aplicaciones.
  7. Borrar todos los paquetes intermedios descargados

Con esto último ya quedaría limpio —presuntamente— el equipo.

A esperar que vuelvan a incluirme en un proyecto BlackBerry para seguir investigando al respecto. En tal caso indagaré en lo que me falta para escribir una segunda parte de este artículo. Mientras, a otra cosa.

No hay comentarios: