Currently browsing: iOS

Introducing… MawKit

Recently I’ve released two iOS games (with Javier Rodríguez Vidal‘s and Víctor Grau Moreso‘s help). Both games use Cocos2d-x engine and a custom open source framework built on top of it named MawKit which I want to introduce in this post.

Why another framework?

We started developing Hop Raider last year’s November. At that moment there was a beta project called SDKBox focused on providing cross-platform plugins to Cocos2d-x but our experience was pretty frustrating: ads plugins which used outdated third-party APIs and spammy log-level, leaderboards/achievements plugins really buggy, almost no support for OS X, not-well documented plugins and features missing.

So we decided to develop our own solution, originally focused on offering a cross-platform (Android, iOS, OS X) implementation for ads and leaderboards/achievements, and called it MawKit. We developed the first version as we wrote Hop Raider and refactored it to make it open-source when we developed Blimp Journey.

It is written in C++, Java and Objective-C++ and offers callbacks to handle asynchronous operations, avoiding busy-waiting and global variables. MawKit is fully documented with Doxygen although we are working on improving Github’s documentation at the moment.

What does MawKit offer?

MawKit includes platform-specific implementation for features like:

  • Leaderboards and achievements (Google Play Games on Android and GameCenter on iOS/OS X).
  • Ads (Admob and AdColony on both iOS and Android – noop implementation for OS X as there is no oficial SDK for this platform).
  • In-app purchases.

As well as cross-platform utilities like:

  • Mathematical helpers (random number generator, ranges).
  • A simple key-value database with local persistence.
  • Additional FiniteTimeActions (move a node to the position of a different node, regardless it is static or in movement, shake a node, etc).
  • Logging utilities (prepending prefixes to the logged message to easily identify their priority)
  • Infinite parallax nodes (both vertical and horizontal).
  • Device utilities (get screen’s size, hardware performance and motion sensors coming soon).
  • Fabric‘s Answer (all platforms) and MixPanel (iOS) support.

Here are some nice snippets:

  • Storing money with KVDatabase:
  • Reporting new score:
  • Checking whether an achievement is unlocked:
  • Showing an ad:
  • Throwing a dice:
  • Moving a node to the position of another moving node (bonus: this snippet is part of Hop Raider):
  • Getting current language:

Ideas, suggestions, contributions…

… are welcomed as Github issues or pull requests.

 

 

Cambia los colores de los contactos de WhatsApp en iOS

Beware: This post was published 5 years ago and its content may be outdated.
Aviso: Este tutorial sólo sirve para la versión de WhatsApp de iOS. Probablemente la forma de cambiar los colores en la versión para Android sea similar, pero no lo puedo asegurar porque no tengo un dispositivo con Android con el trastear.

Cuando escribes en un chat de grupo en WhatsApp, la aplicación asigna automáticamente un color a cada miembro del grupo, de modo que sea fácil saber quién escribe cada mensaje. Sin embargo en algunas ocasiones este color aleatorio no es el más adecuado para el contacto: ¿Un color verde seco para el amor de tu vida y sin embargo un rosa sexy para tu amigo de la infancia? ¡Eso no puede quedar así!

La cuestión es: ¿es posible cambiar los colores que WhatApp asigna a los contactos en los chats de grupo? La respuesta es, a pesar de que la aplicación no lo permita por defecto, aunque es necesario haberle hecho el Jailbreak al dispositivo y disponer de una aplicación para gestionar archivos (iFile o similar).

WhatsApp asigna  a cada contacto con el que mantienes una conversación, un número entero aleatorio, comprendido entre 0 y 18 (tal vez el rango sea mayor, pero en mi lista de contactos sólo hay números entre o y 18), donde cada número se corresponde a un color diferente, de modo que dos contactos con el mismo número tendrán el mismo color en chats de grupo. Esta lista de parejas de números de teléfono e identificadores de colores se almacena en un archivo dentro de la carpeta de documentos de WhatsApp.

La ruta completa a este archivo es:

/var/mobile/Applications/{CARPETA_NOMBRADA_ALEATORIAMENTE}/Documents/Colors.plist

Donde {CARPETA_NOMBRADA_ALEATORIAMENTE} es una carpeta cuyo nombre está compuesto por letras y números aleatorios (seguramente no sean tan aleatorios, pero en cada dispositivo son diferentes). En mi caso la carpeta comenzaba por C4D42785, pero en vuestro caso puede ser completamente diferente. Lo que si será es un nombre largo, formado por muchas letras y números y sin sentido a simple vista.

Dentro de esta carpeta aleatoria encontraremos una carpeta llamada WhatsApp.app. En cuanto veamos una carpeta con un nombre aletorio que en su interior tiene una llamada WhatsApp.app, ya habremos encontrado la carpeta que buscábamos.

Dependiendo del editor que usemos para abrir el archivo, veremos código o una interfaz con las parejas de teléfonos y códigos de color distribuidas a lo largo de una tabla. A continuación teneís un par de imágenes con las dos posibilidades y marcados los números de teléfono y los códigos de color.

Por último queda ver qué color se corresponde a cada identificador. A continuación tenéis una tabla recopilatoria de los 19 colores que WhatsApp ha asignado a mis contactos.

Identifier Color
0  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  

Actualización 2.0.1 de Music Maniac

Beware: This post was published 6 years ago and its content may be outdated.

Icono de Music Maniac Lite 2.0En cuestión de horas estará disponible la versión 2.0.1 de Music Maniac en el AppStore. Esta actualización corrige algunos errores de la versión 2.0, entre los que se encuentran:

  • Un error en la traducción al español.
  • Errores diversos al tener pocas canciones en la biblioteca de iTunes (o pocos metadatos sobre las mismas).
  • Un error que no iluminaba la respuesta correcta al terminar una ronda y no seleccionar ninguna canción.
  • Se ha mejorado el consumo de capacidad de almacenamiento que requiere Music Maniac para guardar ciertas estadísticas.

También incluye otros cambios menores, como que al jugar Offline y salir de un concurso, en lugar de perder los avances, se carga la vista de estadísticas y se guardan los puntos obtenidos durante el tiempo que se jugó.

Además esta actualización también afecta a Music Maniac Lite, pudiendo disfrutar de las novedades de la versión 2.0 en la versión reducida de Music Maniac.

Music Maniac 2.0 en el AppStore

Beware: This post was published 6 years ago and its content may be outdated.

Ya está disponible Music Maniac 2.0 en el AppStore como una actualización de Music Maniac. Las novedades ya las resumí hace unos días, que son en definitiva nuevos modos de juego, nueva interfaz, modo multijugador online y otras mejoras que no se pueden resumir en un solo párrafo.

La versión Lite de Music Maniac estará disponible muy pronto.

Página de Music Maniac en Sumolari.com | Galería de imágenes de Music Maniac | Music Maniac en el AppStore.

Music Maniac 2.0 muy pronto en el App Store

Beware: This post was published 6 years ago and its content may be outdated.

Music Maniac 2.0Music Maniac 2.0 ha sido aprobada en el App Store.  Estará disponible como actualización para todos los usuarios de Music Maniac cuando haya sido aprobada la versión Lite. Mientras tanto, y a falta de unos días (u horas) para que esté disponible esta nueva versión, voy a resumir las principales novedades.

Reescrita desde 0

Esta no es una actualización cualquiera. He comenzado desde 0 la aplicación y la he vuelto a programar al completo, eliminando cualquier error de la versión anterior y añadiendo nuevas funciones. La interfaz también ha cambiado. Ahora el jugador puede añadir concursos a Music Maniac, configurando las rondas, los modos de juego y las preguntas. No hay ningún límite de concursos, y por defecto hay tres concursos (que por supuesto, pueden modificarse o eliminarse). Se pueden desplazar los concursos para ver otros.

En la parte inferior de la pantalla hay una serie de trucos e indicaciones. El menú de la aplicación se despliega al hacer un doble toque en la parte superior de la pantalla, e imita la forma de la barra de multitarea de iOS 4. Cada icono lleva a una sección diferente de la aplicación, generalmente para añadir, ordenar o editar concursos.

Modo multijugador

Se ha rediseñado el modo multijugador. A partir de ahora se podrá jugar hasta con 4 jugadores, vía Game Center o compartiendo el mismo dispositivo. La interfaz se adapta al número de jugadores para mostrar las puntuaciones de cada uno en todo momento. Además se puede pausar el juego y salir en cualquier momento.

Se ha mejorado el modo online. Ahora Music Maniac crea una caché del Top 50 de la iTunes Store y te permite jugar tanto en solitario como con amigos con estas canciones. La primera descargar puede tardar un poco, ya que se deben descargar alrededor de 50 MB, no obstante las siguientes son más rápidas, ya que Music Maniac aprovecha las canciones que ya se han descargado y siguen en el Top 50 de la iTunes Store  para agilizar la siguiente sincronización.

Rendimiento mejorado

Music Maniac es ahora más estable y más rápida. Se puede jugar en cualquier dispositivo que soporte iOS 4 y con bibliotecas grandes. El modo online ofrece además un redimiento mejorado al descargar y procesar todas las canciones para que durante las partidas el dispositivo tenga que hacer el minimo esfuerzo posible y se pueda mantaner un ritmo trepidante.

Universal

La aplicación sigue siendo universal, es decir, la diversión no se queda en el iPhone o iPod touch, sino que se puede jugar en el iPad con una interfaz mejorada para su pantalla. Los gráficos también están preparados para la Retina Display del iPhone 4 y los iPod touch de última generación.

Desde la aplicación Ajustes se puede cambiar el idioma de Music Maniac, traducido por completo al inglés, español y catalán. Puedes jugar con Music Maniac en inglés aunque tengas tu dispositivo en español… ¡o en ruso!

Nuevo sistema de juego

En Music Maniac se pueden crear los concursos más flexibles vistos en iOS. Ya no se establece el número de rondas por concurso, sino el número de veces que quieres jugar con un modo. Así es posible crear un concurso con una sola ronda para el modo rápido y muchas más rondas para el modo estándar. Además Music Maniac ofrece un nuevo modo de juego: el modo apuesta. Cuanto más puntos se arriesguen más puntos se pueden ganar.

Game Center

Además de soportar el modo multijugador hasta 4 jugadores a través de Game Center, Music Maniac incluye logros y tablas de clasificación en las que poder lucirse, También lleva un recuento de los aciertos y al final de cada concurso online que se juegue muestra la lista de las canciones que han sonado, por si te ha gustado alguna y quieres acerte con ella.

Imágenes

Estas son las imágenes que aparecerán en el App Store. Hay más imágenes en la página de Music Maniac.

Se buscan Beta-Testers para Music Maniac 2.0

Beware: This post was published 6 years ago and its content may be outdated.

Music Maniac 2.0

Nota: Ya se han registrado suficientes probadores para Music Maniac 2.0. Muchas gracias a todos por mostrar vuestro interés.

El desarrollo de Music Maniac 2.0 va a buen ritmo, y ya ha llegado el momento de buscar voluntarios interesados en probar la aplicación, reportar errores y hacer sugerencias para mejorar aún más esta versión.

¿Qué se ofrece?

Colaborar en la creación de una aplicación para iOS, ser escuchado y ver las sugerencias que sean propuestas implementadas en la la versión final de la apliación. Poder sentir que se ha sido parte del proyecto y aparecer en los créditos de la aplicación, además de recibir una copia de la aplicación, incluidas todas las futuras actualizaciones de la misma.

¿Qué se necesita para ser probador?

Un dispositivo que soporte y tenga instalado iOS 4.0 (iPod Touch 2G/3G/4G, iPhone 3G/3GS/4 o iPad), con conexión a Internet vía Wi-Fi o 3G (imprescindible conexión a Internet en el dispositivo para poder instalar las Betas). Los dispositivos a los que se les ha realizado el Jailbreak no están excluidos, aunque no he comprobado que se puedan instalar las Betas en ellos.

¿En qué consiste la aplicación?

Se trata de la reescritura desde 0 de Music Maniac, el concurso musical para iOS. Describiendo a grandes rasgos la aplicación, he reescrito todo el código desde 0, he rediseñado toda la aplicación y la he reestructurado para hacerla estable, rápida y atractiva. Pero de momento quiero guardar en secreto las novedades, hasta tener lista la versión final.

¿Cómo inscribirse?

Ya se han registrado suficientes probadores y no se admiten más inscripciones. ¡Gracias por mostrar tu interés!

Presentando… Music Maniac

Beware: This post was published 6 years ago and its content may be outdated.

Vale, pensaba que no tendría tiempo y que tendría que retrasar la aplicación hasta verano, pero no, al final con un esfuerzo extra y un par de días de completa dedicación al proyecto, he podido acabar la aplicación hace apenas un semana (el resto del tiempo ha estado en revisión). Así que hoy toca presentación de la aplicación.

¿Qué es Music Maniac?

Icono de Music Maniac¿Recordáis el juego del concurso musical de los antiguos iPod Video? Para los que no os suene, se trataba de un juego muy sencillo en el que  sonaba durante unos segundos una canción y se te ofrecían una serie de títulos entre los que elegir. Si acertabas el título conseguías puntos y si fallabas, no. Además, cuánto más rápido acertases más puntos ganabas, así que la velocidad era importante.

Music Maniac es mi idea de cómo debería haber sido ese juego llevada a iOS. ¿Y qué tiene de nuevo Music Maniac? Para empezar, más flexibilidad: se puede jugar con sólo los títulos de las canciones, con los nombres de los álbumes, con los nombres de los artistas, con las carátulas de los álbumes o con combinaciones de los anteriores. También se puede personalizar la duración de las canciones o el número de rondas.

Se puede jugar tanto con canciones de nuestra biblioteca de iTunes (a las que será necesario añadirle los datos del título, artista, álbum y carátula, ya que de algún sitio tiene que sacar la información sobre la canción Music Maniac) como con las canciones más populares de la iTunes Store. Sin embargo los modos de juego son diferentes: en el modo offline podemos jugar las rondas que queramos, hasta cansarnos o hasta fallar por primera vez, mientras que en el modo online sólo podemos jugar 10 rondas (esto es porque deben descargarse las canciones y el proceso requiere tanto tiempo para descargarlas como memoria libre para almacenarlas).

Como aliciente al modo offline, se puede jugar con amigos con un sólo dispositivo, pasándolo al terminar cada ronda y viendo después quién ha conseguido más puntos. Pero la competición no acaba en el modo offline, ya que Music Maniac tiene clasificaciones y logros de Game Center, con lo cual podrás ver quién conoce mejor su música y quién los éxitos de la iTunes Store. También podrás desbloquear logros acertando rondas en pocos segundos o acumulando cierta cantidad de puntos.

Music Maniac estará disponible en unas horas de forma gratuita en una versión Lite, en la que sólo se puede jugar en el modo offline, sin personalizar las rondas y sin enviar las puntuaciones a Game Center y en versión completa por 0.99$ (0.79€).

La aplicación es universal: está adaptada tanto a iPod Touch y iPhone (también a la Retina Display del iPhone 4) como a iPad. Además está traducida al inglés, catalán y español (lo siento, no hablo más idiomas, así que lo dejo en esos tres).

Próximas actualizaciones

Seguramente habréis visto por la App Store muchas aplicaciones que comienzan con una versión 1.0 y al cabo de un tiempo lanzan la versión 2.0 como aplicación independiente de la anterior. Esto no va a pasar con Music Maniac. Music Maniac sólo habrá una, se actualizará (sí, habrá versión 2.0, me gustaría desarrollarla en verano) y sus actualizaciones serán gratuitas para todo aquel que comprase la versión anterior y tendrá el mismo precio que la aplicación original para aquellos que no la comprasen.

También aviso que no habrá cambios de precio, ni subidas ni bajadas. La aplicación costará siempre 0.99$ (a no ser que Apple me impida ponerle ese precio), así que no os precupéis por posibles subidas de precio futuras: no las habrá.

Ya está disponible iOS 4.1

Beware: This post was published 7 years ago and its content may be outdated.

Hay una nueva actualización disponible: iOS 4.1

Novedades de iOS 4.1

Novedades de iOS 4.1

Desde hace algunos minutos está disponible iOS 4.1 para el iPhone y el iPod Touch. Si estáis interesados en conocer las novedades de esta versión os recomiendo leer el resumen que hice al acabar la Keynote de la semaan pasada. De todos modos, os resumo las principales características a continuación:

  • GameCenter
  • Llamadas FaceTime desde favoritos
  • Captura de fotos HDR
  • Posibilidad de enviar vídeos en HD a Youtube
  • Alquiler de programas de TV
  • iTunes Ping accesible desde el iPod Touch / iPhone

Evita que UISearchDisplayController oculte una UINavigationBar

Beware: This post was published 7 years ago and its content may be outdated.


UISearchDisplayControllerWithoutAnimation: Subclase de UISearchDisplayController

El funcionamiento estándar de UISearchDisplayController es ocultar la barra de navegación (UINavigationBar) cuando se inicia una búsqueda. Este comportamiento nos puede parecer adecuado, pero en ciertas ocasiones puede que no queramos que se superponga y queramos tener visible la barra de navegación (UINavigationBar).

Actualmente cuando se activa la barra de búsqueda se ejecuta el método privado setActive:animated:. La única manera de evitar que se oculte la barra de navegación es crear una subclase de UISearchDisplayController y reemplazar dicho método por el siguiente, que anima la barra de búsqueda sin ocultar la barra de navegación (realmente oculta primero la barra de navegación y luego la muestra, de modo que a efectos prácticos parece que siempre está ahí):

- (void)setActive:(BOOL)visible animated:(BOOL)animated;
{
    if (self.active == visible) return;
    [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO];
    [super setActive:visible animated:animated];
    [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO];
    if (visible)
	{
        [self.searchBar becomeFirstResponder];
    }
	else
	{
        [self.searchBar resignFirstResponder];
    }
}

La nueva clase puede llamarse, por ejemplo, UISearchDisplayControllerWithoutAnimation (aunque realmente sí que tiene animación). Su interfaz será algo así (recordad que lo heredamos todo de UISearchDisplayController así que no necesitamos declarar ningún método más ni ninguna propiedad, tan sólo reemplazar el método setActive:animated:, que haremos en la implementación):

#import <UIKit/UIKit.h>
@interface UISearchDisplayControllerWithoutAnimation : UISearchDisplayController
{
}
@end

Y la implementación:

#import "UISearchDisplayControllerWithoutAnimation.h"
@implementation UISearchDisplayControllerWithoutAnimation
- (void)setActive:(BOOL)visible animated:(BOOL)animated;
{
 if (self.active == visible) return;
 [self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO];
 [super setActive:visible animated:animated];
 [self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO];
 if (visible)
 {
 [self.searchBar becomeFirstResponder];
 }
 else
 {
 [self.searchBar resignFirstResponder];
 }
}
@end
Añadiendo un UISearchDisplayController en Interface Builder

Añadiendo un UISearchDisplayController en Interface Builder

Cambiando la clase del UISearchDisplayController

Cambiando la clase del UISearchDisplayController

Ahora sólo queda usar UISearchDisplayControllerWithoutAnimation en lugar de UISearchDisplayController. Si hemos añadido la barra de búsqueda directamente desde Xcode, sin usar Interface Builder, no hay ningún problema, y si hemos usado Interface Builder basta con cambiar la clase del UISearchDisplayController a UISearchDisplayControllerWithoutAnimation. Si queremos añadir una nueva barra de búsqueda que no oculte la barra de navegación basta con añadir desde la librería un UISearchDisplayController, como de costumbre, y una vez añadido cambiarle la clase a UISearchDisplayControllerWithoutAnimation.

La única pega de este sistema es que tal vez en alguna nueva versión de iOS cambien el método privado setActive:animated:, con lo cual habría que revisar este nuevo método y actualizar nuestra clase personalizada. De todas maneras, parece algo poco probable, al menos en un futuro inmediato. Este método nuevo funciona sin problemas en iOS 4 y iOS 4.1, aunque seguramente funcione también en versiones anteriores (yo sólo he probado estas dos).

Nuevo iPod Shuffle, iOS 4.1 para iPhone / iPod Touch y iOS 4.2 para iPad

Beware: This post was published 7 years ago and its content may be outdated.

Nota: Mi idea original era publicar todas las novedades en un mismo artículo pero lamentablemente por un problema con el número de imágenes en el artículo me he visto obligado a partirlo en varios artículos. Para estar totalmente informados os recomiendo leer las novedades del iPod Nano, las novedades del iPod Touch y las novedades de iTunes y del tv.

En la keynote de hoy Apple ha renovado toda la gama iPod, el tv, ha presentado la nueva versión de iTunes con su red social y ha mostrado algunas de las novedades de iOS 4.1 para el iPod Touch y el iPhone y iOS 4.2 para el iPad. Pero vayamos parte por parte y siguiendo el mismo orden de la keynote: Read more →