sep 11

Con la aplicación OpenFeint y su game spotlight, tenemos al alcance de nuestra mano un nuevo juego gratuito cada día.

Hay muchas webs y apps que sirven para encontrar esas aplicaciones gratis o saber cuando pasan de ser de pago a gratuitas, para los amantes de los juegos OpenFeint es una aplicación que no les puede faltar, yo llevo usándola unas semanas y lo primero que hago cada mañana es bajarme el juego gratuito del día, son juegos que normalmente son de pago, por lo que nos ahorramos unos eurillos. La verdad es que apenas tengo tiempo de probar mínimamente los juegos que me bajo, pero se que al menos no pierdo la oportunidad de conseguirlos gratis.

Lo que me gusta del sistema OpenFeint, los logros y la faceta social de los rankings, amigos y demás opciones que nos ofrece.

Varemos si OpenFeint puede aguantar el embiste de Apple y su nuevo game center, conociendo a los de Apple estará muy bien hecho y va más allá de simples rankings mundiales ofreciendo posibilidades multi-jugador.

Consíguela aquí.

VN:F [1.9.8_1114]
Rating: 3.0/5 (1 vote cast)
VN:F [1.9.8_1114]
Rating: +3 (from 3 votes)
Tagged with:
sep 09

Apple afloja su mano dura y permite usar herramientas de terceros para desarrollar aplicaciones, esto implica que ahora se podrá programar no sólo en Objective-C, sino también usando otros entornos que nos permitan usar otro lenguaje de programación y obtener igualmente una aplicación funcional en iOS.

La única limitación que ponen es que la aplicación en si no descargue código de servidores externos, esta limitación esta para garantizar la seguridad.

No esta nada mal este nuevo enfoque ya que durante mucho tiempo ha sido uno de los puntos más criticados de Apple, su forma de mantener seguro su sistema lo hacía también poco accesible y muchas veces nada amigable para programadores sin conocimientos en Objective-C.

Otra novedad a destacar, es que Apple ha hecho público la guía que usan sus empleados en el proceso de aprobación de las aplicaciones, de esta manera los desarrolladores podemos saber como enfocar nuestras aplicaciones para asegurar su paso al App Store.

VN:F [1.9.8_1114]
Rating: 2.7/5 (3 votes cast)
VN:F [1.9.8_1114]
Rating: +2 (from 2 votes)
Tagged with:
ago 31

Según la aplicación que estamos desarrollando, puede ser interesante o incluso necesario evitar que el iPhone se autobloquee mientras nuestra aplicación esta en marcha. Por suerte tenemos una manera muy sencilla de conseguirlo y con sólo una instrucción.

[UIApplication sharedApplication].idleTimerDisabled = YES;

Eso es todo lo que necesitamos para que el iPhone permanezca todo el tiempo encendido, un buen lugar para ponerlo es en el método applicationDidFinishLaunch: en nuestro UIApplication delegate.

Tened cuidado porque si el usuario sale corriendo y deja su iPhone solo, durante mucho tiempo, al dejar la pantalla encendida todo el rato, lo dejaremos sin batería.

VN:F [1.9.8_1114]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.8_1114]
Rating: +2 (from 2 votes)
Tagged with:
jul 26

En este artículo voy a poner el listado de programas que más uso para hacer seguimiento de las ventas de nuestras apps y también para hacer seguimiento de las posiciones de nuestras apps en los rankings de los diferentes AppStores del mundo.

Aquí va mi lista de apps que no tienen porque ser los mejores:

1. AppViz

Para mi es la mejor aplicación (para Mac OS) para seguir las ventas de tus aplicaciones. Básicamente lo que hace es conectarse a itunesconnect y obtener toda la información de las descargas y financial reports. Desde que la uso he dejado de conectarme a itunesconnect para ver las ventas del día anterior.

Lo mejor es la forma en la que muestra los datos. Puedes ver las listas de descargas, crearte diferentes gráficos por ventas, número de descargas, region, etc.

También te muestra los reviews que recibe tu app en los diferentes países entro otros.

Para mi es imprescindible y os lo recomiendo.

Cuesta 29.95$ y los vale. Se puede descargar una versión de evaluación de 30 días de forma gratuita.

2. App Sales

App Sales va en la misma línea de App Viz pero para iPhone. Igual que App Viz este programa nos muestro todos los datos de ventas, reviews e otros conectándose a nuestra cuenta de itunesconnect y obteniendo toda la información.

Es otra maravilla que uso siempre que no estoy delante del ordenador.

Además de todo es gratis y de código abierto. No está disponible en la AppStore ya que Apple no permite aplicaciones de este tipo en la appstore. Para instalarlo en nuestros iPhone tenemos que bajar el código (que viene como un proyecto XCode y no tenemos que configurar nada) y instalarlo mediante el XCode igual que hacemos con nuestros apps que programamos.

3. MajicRank

MajicRank se usa para ver la posición de nuestra app en los rankings mundiales de AppStore. Es decir, permite ver en que posición (tanto globalmente como en su categoría) está nuestra app en los diferentes países en tiempo real. Lo que hace es conectar a iTunes de diferentes países y buscar nuestra app en el top 100 de cada uno de los países de la AppStore. Al buscar sólo en el top 100 muestra sólo los rankings de los países en los que nuestra aplicación aparece en el top 100 de ese país (global o en su categoría).

Está app viene muy bien cuando lanzas una campaña de marketing y quieres seguir como evoluciona la posición de tu app.

También lo recomiendo mucho, se ha convertido en una app imprescindible para mi.

Es totalmente gratis.

4, PositionApp™

Como podemos intuir del nombre esta app también sirve para hacer seguimiento de nuestras (y de otros también) aplicaciones.

Permite ver como evoluciona nuestra app en los rankings mundiales y comprar tu evolución con la compentencia.

A diferencia de MajicRank esta aplicación hace seguimiento de las 300 primeras apps en vez de las 100 primeras y es para el iPhone. La desventaja respecto al MajicRank es que la información no se suministra en tiempo real sino con un retraso de entre 1-3 horas (a veces más) . Y no es gratis, en el momento de escribir esta entrada costaba 5,49€.

Está bastante bien, pero el precio que tiene también es de considerar.

Estas son las 4 apps que más uso (diariamente) pero existen muchas alteranitvas. Sobre todo servicios web que te ofrecen el mismo tipo de información que pueden ofrecer estas 4 aplicaciones que uso.

Espero que esta información les sea útil. Si conocéis alguna app que pueda ser útil para los programadores iPhone por favor comentadlo por aquí.

VN:F [1.9.8_1114]
Rating: 4.7/5 (3 votes cast)
VN:F [1.9.8_1114]
Rating: +6 (from 6 votes)
Tagged with:
jun 05

Cuando queremos crear una aplicación que contenga diferentes funcionalidades relacionadas con el uso de la aplicación, pero independientes entre si, como mostrar los datos de diferente manera o diferentes tareas, querremos usar una Tab Bar en nuestra aplicación.

La Tab Bar nos dará acceso a esas diferentes tareas o vistas, separándolas dentro de nuestra aplicación como módulos independientes, además, sitúa al usuario dentro de la aplicación indicándole lo que esta viendo en ese momento.

Hoy daremos las indicaciones básicas para crear y configurar una Tab Bar para nuestra aplicación. Dentro de Xcode tenemos una plantilla que nos crea una aplicación con un Tab Bar y dos vistas diferentes, aunque es un buen punto de partida, cuando miramos el código a penas vemos que es lo que realmente se esta haciendo ya que toda la configuración la hacen desde Interface Builder. Nosotros mostraremos algo más de código.

Estructura

Tenemos nuestra aplicación, dentro de ésta estará nuestra Tab Bar, a la que le indicaremos que vistas (UIViewController) ha de mostrar, cada vista se ocupará de su funcionalidad, pero tenemos que configurar la propiedad tabBarItem (UITabBarItem), de cada una de las vistas para que la Tab Bar nos pueda mostrar el icono y titulo de esa pestaña.

Datos

Para configurar la Tab Bar lo único que necesitamos es un icono para cada pestaña, y un título. Podemos usar ambos a la vez o cada uno por separado, obviamente una Tab Bar sin iconos pierde mucho, por lo que recomiendo que al menos se use un icono para representar lo que la pestaña hace, el título siempre va bien por si el icono no deja del todo claro.

El titulo no es más que una cadena que indicaremos dentro del código, pero el icono es algo más especial y aunque Apple nos suministra algunos iconos típicos del sistema, para usarlos echar un vistazo a  UITabBarSystemItem, también nos indica como tenemos que crear nuestros propios iconos:

▪ Usar formato PNG.
▪ El único color a de ser blanco puro con transparencia apropiada.
▪ No añadir sombras.
▪ Usar anti-aliasing.
▪ Tamaño de 30 x 30 pixeles.

Código

Para crear la Tab Bar y añadirla a nuestra aplicación simplemente usar lo siguiente:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
 
tabBarController = [[UITabBarController alloc] init];
 
MyViewController* vc1 = [[MyViewController alloc] init];
 
MyOtherViewController* vc2 = [[MyOtherViewController alloc] init];
 
NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, nil];
 
tabBarController.viewControllers = controllers;
 
[window addSubview:tabBarController.view];
 
}

En el applicationDidFinishLaunching creamos el TabBarController, los UIViewController para cada una de nuestras pestañas, metemos estos últimos en un vector y le indicamos al controlador de la Tab Bar que serán esos los que ha de mostrar. Finalmente añadimos la vista de la Tab Bar a nuestra ventana y listos.

Para configurar cada uno de los UITabBarItem de cada una de las vistas podemos usar las siguientes líneas:

UIImage* anImage = [UIImage imageNamed:@"MyTabBarIcon.png"];
 
UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"TabBarItemTitle" 
                                                     image:anImage tag:0];
 
[myViewController setTabBarItem:theItem];

Normalmente se usarán dentro del mismo controlador, al inicializarlo, pero puede ser necesario hacerlo desde otro lugar cuando no estamos creando nuestra propia clase, por ejemplo si una de las vistas usa un UINavigationBar, en ese caso se puede usar el código anterior justo cuando creamos el controlador para la barra de navegación.

VN:F [1.9.8_1114]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.8_1114]
Rating: -1 (from 1 vote)
Tagged with:
may 15

Después de llegar a ser números uno con ZenTap la suerte vuelve a sonreirnos.

Lanzamos el Letris hace dos días y ya es el número 1 en la categoría de juegos y es la segunda aplicación más descargada en España.

Ha superado todas nuestras previsiones. Ninguno de nosotros se esperaba que un juego de palabras pudiera llegar tan lejos.

De aquí queremos dar las gracias a todos los que han participado en el proyecto, a la gente que ha hecho los tests, a los que nos han ayudado a expandir la noticia sobre el juego, a los que nos han apoyado con sus palabras. Gracias a todos.

Los que aún no lo habéis probado lo podéis descargar desde aquí: Descargar

O lo podéis ver en acción en el siguiente vídeo:

VN:F [1.9.8_1114]
Rating: 4.3/5 (6 votes cast)
VN:F [1.9.8_1114]
Rating: +3 (from 5 votes)
Tagged with:
may 14

En muchos foros y blog, se ve gente que pregunta si hay algún control en Xcode que nos permita dar puntuaciones del estilo de las cinco estrellitas que se ve por iTunes, iPhone, iPod y demás. En su día, yo mismo recurrí a Google para ver si encontraba uno, pero a parte de algunas explicaciones de como montarlo, algunas usando un slider del Xcode, con vistas o la clase UIControl, nadie daba nada.

Finalmente decidí montarme uno yo mismo, y hoy os lo traigo, modificado, para que podáis añadirlo fácilmente a vuestro proyecto y usarlo en cualquier vista dentro de vuestra aplicación. Al final del artículo, en el que explico como funciona y como usarlo, encontrareis el link para descargarlo.

Funcionamiento
Personalmente me decanté por usar una vista normal, UIView, para implementar mi “rating control”, el porqué es muy simple, aunque hay una clase especialmente pensada para controles, UIControl, no vamos a hacer grandes maravillas, lo único que nos interesa es que mientras el usuario desplaza el dedo por nuestro sistema de puntuación, se vayan iluminando las estrellas pertinentes.
Para ello uso un UIViewController, que se encarga de crear la vista, añadir el número de iconos necesarios, por norma 5 y seguir la interactuación del usuario para detectar cuando pulsa un icono en concreto, o desplaza el dedo de uno a otro, para mostrar el rating pertinente. De esta manera conseguimos una buena fluidez y el mismo efecto que cuando se usa el rating del iPod, iPhone o iTunes.

No entraré en detalla en el código en si, ya que los interesados disponen de los archivos, más abajo, para curiosear, pero intentaré dar los detalles suficientes para que sea fácil usar esta clase en vuestra aplicación.

Aquí tenéis el contenido de la cabecera de la clase RatingViewController:

//
//  RatingViewController.h
//
//  Created by www.zenbrains.com on 5/13/10.
//  Copyright 2010 Zenbrains. All rights reserved.
//
 
#import <UIKit/UIKit.h>
 
 
@interface RatingViewController : UIViewController {
 
	// Property to acces the rate given by the user
	NSInteger rate;
 
	// Arrays to store the names of the images for the icons, when active and unactive
	// initialize through the designates initializer
	NSArray *ratedIcons;
	NSArray *unratedIcons;
 
	// Instances to set up the aspect of the rating view
	// initialize through the designates initializer
	NSInteger numberOfRates;
	NSInteger ratingViewWidth;
	NSInteger ratingViewHeigth;
	NSInteger ratingIconWidth;
}
 
@property NSInteger rate;
 
// The designated initializer.
- (id)initWithRates:(NSInteger)numRates viewWidth:(NSInteger)viewWidth viewHeight:(NSInteger)viewHeight 
		  iconWidth:(NSInteger)iconWidth ratedIcons:(NSArray*)ratIcons unratedIcons:(NSArray*)unratIcons;
// To move the rating view where you want
- (void)locateRatingViewAtPoint:(CGPoint)point;
// To set the initial rate for the view in case you have a rate stored
- (void)setRate:(int)rate;
 
// You shouldn't need to call this one 
- (void)updateRatingViewWithLocation:(CGPoint)touchPosition;
 
@end

Sobre las variables, los comentarios explican para que se usa cada cosa, solo comentaros algo sobre el rate:

rate, a través de esta propiedad es como se accede al valor actual del rating, esta pensado para valores enteros de 1 a 5 (normalmente) dejando el 0 libre para cuando no tenemos aun una puntuación.

En cuanto a los métodos, también se explican por si solos, solo comentaros que con el initWithRates:viewWidth:viewHeight:iconWidth:ratedIcons:unratedIcons: es con el que se inicializan todas las variables anteriores a los valores que nos interesan, si usáis el típico initWithNibName:bundle: para inicializar esta clase, se usarán unos valores dados por defecto dentro del RatingViewController.m, pero la vista quedará situada en la esquina superior izquierda, luego podéis moverla con el método locateRatingViewAtPoint:.

Daros cuenta de que se ha sobrescrito el método setRate: para que no solo le de el valor a la variable rate sino para que actualice también, el aspecto de los iconos en la vista.

Como usarlo en vuestra aplicación

Bien, una vez ya sabemos cómo funciona, solo queda dar un ejemplo de como usarlo en vuestra aplicación. En el zip de más abajo se incluyen los archivos RatingViewController.h y .m, junto con un set de imágenes que son las que se usan por defecto al llamar el initWithNibName:bundle:. Incluir todos estos archivos a vuestro proyecto. Ahora, desde cualquier otra clase podéis incluir esta vista, por ejemplo desde el viewDidLoad de vuestra vista principal.

- (void)viewDidLoad {
    [super viewDidLoad];
 
	// 3 rates stars
	NSArray *anArray = [NSArray arrayWithObjects:@"starFL.png",@"starFC.png",@"starFR.png",nil];
	NSArray *otherArray = [NSArray arrayWithObjects:@"starEL.png",@"starEC.png",@"starER.png",nil];
	ratingViewController = [[RatingViewController alloc] initWithRates:3 viewWidth:90 viewHeight:30 iconWidth:30 ratedIcons:anArray unratedIcons:otherArray];
	[ratingViewController locateRatingViewAtPoint:CGPointMake(10, 50)];
	[ratingViewController setRate:1];
 
	// 5 rates stars
	anArray = [NSArray arrayWithObjects:@"starFL.png",@"starFC.png",@"starFC.png",@"starFC.png",@"starFR.png",nil];
	otherArray = [NSArray arrayWithObjects:@"starEL.png",@"starEC.png",@"starEC.png",@"starEC.png",@"starER.png",nil];
	RatingViewController *rateViewA= [[RatingViewController alloc] initWithRates:5 viewWidth:300 viewHeight:60 iconWidth:60 ratedIcons:anArray unratedIcons:otherArray];
	[rateViewA locateRatingViewAtPoint:CGPointMake(10, 110)];
	[rateViewA setRate:3];
 
	// 6 rates leafs
	anArray = [NSArray arrayWithObjects:@"leafR.png",@"leafB.png",@"leafY.png",@"leafYG.png",@"leafG.png",@"leafG.png",nil];
	otherArray = [NSArray arrayWithObjects:@"leafE.png",@"leafE.png",@"leafE.png",@"leafE.png",@"leafE.png",@"leafE.png",nil];
	RatingViewController *rateViewB = [[RatingViewController alloc] initWithRates:6 viewWidth:240 viewHeight:40	iconWidth:40 ratedIcons:anArray unratedIcons:otherArray];
	[rateViewB locateRatingViewAtPoint:CGPointMake(10, 210)];
	[rateViewB setRate:30];
 
	// 10 rates leafs
	anArray = [NSArray arrayWithObjects:@"leafR.png",@"leafB.png",@"leafY.png",@"leafYG.png",@"leafG.png",@"leafR.png",
			   @"leafB.png",@"leafY.png",@"leafYG.png",@"leafG.png",nil];
	otherArray = [NSArray arrayWithObjects:@"leafE.png",@"leafE.png",@"leafE.png",@"leafE.png",@"leafE.png",@"leafE.png",
				  @"leafE.png",@"leafE.png",@"leafE.png",@"leafE.png",@"leafE.png",@"leafE.png",nil];
	RatingViewController *rateViewC = [[RatingViewController alloc] initWithRates:10 viewWidth:300 viewHeight:30 iconWidth:30 ratedIcons:anArray unratedIcons:otherArray];
	[rateViewC locateRatingViewAtPoint:CGPointMake(10, 310)];
	[rateViewC setRate:-5];
 
	[[self view] addSubview:[ratingViewController view]];
	[[self view] addSubview:[rateViewA view]];
	[[self view] addSubview:[rateViewB view]];
	[[self view] addSubview:[rateViewC view]];
 
}

En este ejemplo estoy añadiendo cuatro “rating views” a mi vista, normalmente solo usareis uno, para mostrar lo que se puede hacer con esta clase, crear vuestros propios iconos, calcular como ha de ser de grande la vista (podéis usar Interface Builder para encontrar los pixeles) y solo tenéis que crear un objeto de esta clase, inicializarlo y ponerlo donde queráis. Con el código anterior obtenemos lo siguiente

Bueno, espero que os sea de utilidad y podáis usar esta vista en vuestras aplicaciones, sentiros libres de usar el código con o sin modificaciones, pero si tenéis un hueco en el código o los créditos de vuestra aplicación, siempre podéis mencionar nuestro nombre como agradecimiento.

Aquí os dejo los archivos. RatingViewController

VN:F [1.9.8_1114]
Rating: 3.9/5 (8 votes cast)
VN:F [1.9.8_1114]
Rating: +1 (from 1 vote)
Tagged with:
abr 05

Desde que pusimos en marcha Zenbrains, teníamos claro que queríamos que nuestras aplicaciones tuvieran un denominador común: ser útiles y aportar un valor muy claro al usuario. Obviamente, de vez en cuando también lanzariamos algún “divertimento” como Letris (que está a punto de caramelo!), pero el mayor ejemplo de lo primero fue ZenTap, una aplicación para asistir a la escritura en el iPhone.

Para nuestra sorpresa, hace unos días recibimos un mensaje, a través de nuestra web, de Michael Bergmann. Este hombre de Estados Unidos, padre de un chico autista de 14 años, nos contaba que un par de años atrás su hijo había conseguido empezar a comunicarse apuntando a las letras de un alfabeto. Debemos admitir que una introducción como esta, a falta de leer las siguientes lineas, nos extrañó muchísimo. Pero nada más lejos de nuestras posibilidades de ayudar, el mensaje de Michael continuaba de manera muy interesante: resulta que el inminente lanzamiento del iPad abría una puerta de esperanza, ya que parecía el dispositivo adecuado para tratar de ayudar a su hijo con una aplicación adecuada. La pregunta que tenía para nosotros era la siguiente: Michael había probado ZenTap, y una vez visto el mecanismo de predicción de palabras que usamos en él, quería saber si estábamos dispuestos a echar una mano en esa “aplicación adecuada” que él justamente tenía en mente y a medio desarrollar…

Como no podía ser menos, Aram se puso manos a la obra y colaboró con el proyecto iMean. Menos de dos semanas después de esto, podemos decir que Michael ha terminado la aplicación, que ya está disponible en Appstore, y lo más importante: está ayudando a su hijo a comunicarse mejor!

No podemos estar más contentos tras noticias como estas, que verdaderamente animan a seguir en esto y a confíar en el lado humano de la tecnología. Esperamos que iMean tenga mucho éxito (desafortunadamente, hay usuarios que la necesitan). Y, de algún modo, nos es una buena recompensa saber que hacer bien algunas cosas conlleva, por si sólo, estos pequeños regalos :)

http://imean.mobi
http://imean.mobi/Blog/

http://itunes.com/apps/imean (AppStore)

VN:F [1.9.8_1114]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.8_1114]
Rating: +1 (from 1 vote)
Tagged with:
feb 12

Si señores, después de mucho tiempo inadvertido por fin, gracias a nuestros usuarios, hemos conseguido el codiciado puesto número 1.
Llavemos ya 4 días en el primer puesto de aplicaciones de utilidad y 4 días días en el top 10 del ranking global de AppStore España.
Gracias a todos vosotros !

VN:F [1.9.8_1114]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.8_1114]
Rating: 0 (from 0 votes)
Tagged with:
feb 10

Un equipo de desarrollo español (Ivanovich Games), amigos de ZenBrains acaba de anunciar su última creación: iRemoteDog.

Es una idea genial y muy original. La aplicación consiste en un mando de distancia que permite dar ordenes sonoros a tu perro.

Claro, esta app no hace mágia, primero tienes que entrenar a tu perro para que aprenda esos sonidos.

Se usan un tipo de sonidos que son inaudibles para los humanos pero muy fácilmente reconocibles por los perros.

A parte  para los perros es más fácil entender y diferenciar este tipo de sonidos que la palabras.

Una vez entrenado, puede ser de los más gracioso hacer espectáculos para los amigos, nadie quedará indeferente:¿Controlar un perro con el iPhone, WOW?

Desde aquí deseamos suerte al desarrollador del programa y recomendamos la aplicación.

VN:F [1.9.8_1114]
Rating: 3.0/5 (6 votes cast)
VN:F [1.9.8_1114]
Rating: +3 (from 5 votes)
Tagged with:
preload preload preload