Desarrollo móvil multiplataforma
 

Crear una versión Lite en XCode

Supongamos que ya tienes una aplicación o juego completamente desarrollado, como es mi caso. También supongamos que deseas hacer una versión gratuita con publicidad o con menos funcionalidades para dar a conocer la aplicación o juego, como también es mi caso. Por eso os voy a mostrar qué pasos he seguido para crear una versión lite de mi juego ya publicado Color Shot.

Podría haber copiado la carpeta del proyecto o hacer una rama de subversion para cambiarlo, pero en ambos casos tendría dos copias del código y eso dificultaría el mantenimiento de la aplicación ante futuras actualizaciones.

Xcode ofrece una solución bastante elegante para estos casos, y consiste en crear un nuevo target para la nueva aplicación, de forma que ambas aplicaciones compartan el mismo código. Estos son los pasos que he seguido para Xcode 3:

Abrimos el proyecto del juego que ya tenemos publicado, y buscamos el apartado de “Targets”, donde tendremos un elemento que representará la aplicación ya publicada. En vez de crear un nuevo target, duplicaremos el existente pues nos ahorrará bastante trabajo. Para ello pinchamos con el botón derecho sobre el target actual y pinchamos sobre Duplicate.

Nos aparecerá una nueva versión acabada en “… copy”. Renombramos dicha versión y añadimos Free o Lite o lo que queramos para diferenciarla del target original. Yo la he renombrado a ColorShotFree. En la sección Resources también nos habrá aparecido una copia de Info.plist (Info copy.plist). Renómbrala también a InfoFree.plist o InfoLite.plist.

Ahora hacemos doble click sobre el nuevo target para que nos aparezca la ventana de configuración. Pinchamos sobre la pestaña Build, seleccionamos All configurations en el desplegable “Configuration” y buscamos la sección Packaging. Ahí debemos asegurarnos que la propiedad Info.plist file está correctamente renombrada al nuevo nombre (p. ej, InfoFree.plist). Es probable que siga como Info copy.plist. También asegúrate de cambiar el atributo Product Name a la versión correcta.

 

El siguiente paso será establecer como Active Target el que acabamos de crear. Se puede hacer directamente desde el menú de herramientas.

Ya queda poco para terminar. Buscamos el nuevo fichero InfoFree.plist y pinchamos sobre él para modificar algunas propiedades. Como lo más seguro querrás utilizar otro icono para la aplicación Lite, debemos cambiar la propiedad Icon files donde se indican todos los nombres de todos los ficheros de iconos que incorpora el proyecto.

Nota: Aquí, Cocos2D incluye un set de iconos de distintos tamaños para cumplir distintas funciones. Para qué sirve cada uno puedes encontrarlo en  Icons and launch images for iPhone and iPad.

Aparte de cambiar el icono, también tendremos que actualizar el campo Boundle Identifier donde tendremos que utilizar el nuevo boundle que hayamos creado en la plataforma de provisión de Apple. En mi caso, he creado un nuevo identificador com.alfonsomarin.colorshotfree y también he incluido un nuevo set de iconos al proyecto, incluyéndoles siempre Free tras la palabra Icon:

Ya solo queda un paso más, y es crear un flag que nos permita identificar en nuestro código qué versión es la que se está compilando. Hacemos doble click otra vez sobre el nuevo target que hemos creado y pinchamos sobre la pestaña Build. Buscamos directamente las opciones Other C flags y Other C++ flags. Ahí indicamos un nombre de flag en mayúsculas precedido de -D. Yo he utilizado -DVERSION_LITE

Si conoces los flags de C, supongo que te estarás imaginando en qué consiste el truco. Hemos definido un flag que únicamente estará disponible en la versión lite. Así, en nuestro código comprobaremos si existe dicha etiqueta o no para así determinar qué versión estamos compilando:

#ifdef VERSION_LITE
 // Aquí meteríamos el código de la versión Lite
#else
 // Aquí meteríamos el código de la versión normal
#endif

A partir de ahí sería rellenar las partes de código diferentes y ya está. Estos son los pasos que he seguido para Xcode 3, pero supongo que serán muy similares en Xcode 4. Dentro de poco tendré que pasarme al nuevo entorno, así que en ese momento lo comprobaré.