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.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
Tagged with:
sep 01

Hace algo más de una hora que ha acabado la Keynote de Apple del 1 de Septiembre, hay varias actualizaciones y algunas novedades en cuanto a los dispositivos de Apple, aquí os pongo algunas de las novedades más importantes:

iOS 4.1 con nuevas características, disponible la semana que viene:
- Solución de errores del sensor de proximidad
- Solución Bluetooth.
- Mejora del rendimiento en los iPhone 3G
- Subida de video en HD via Wifi
- Alquiler de vídeos
- Y el Game Center que se podía ver ya en los simuladores de iPhone

Sobre el Game Center:
- Multiplayer
- Retar a amigos
- Auto matching para jugar contra gente de tu nivel

iOS 4.2 sí, leéis bien, no solo hablan de una actualización del sistema sino de dos!! y esto es porque estará disponible para el iPad!! de esta forma se pondrá a la par con el sistema operativo del iPhone con la multitarea. iOS 4.2 estará disponible en Noviembre para el iPad.

Nuevos diseños para todos los iPods disponibles ya.

iPod Touch con multitouch, retina display, chip Apple A4, Giroscopio, Facetime con cámara frontal y cámara trasera para video en HD, un iPhone 4 pero sin telefono!!! Disponible la semana que viene y ya aceptan reservas.

iTunes 10, disponible hoy:
- Cambio de logo
- Funciones de red social, que están escuchando tus amigos…
- Listas con los gustos de tus amigos…

Nuevo Apple TV, de momento no disponible para España:
- Muy muy pequeño
- No se compran las cosas, se alquilan
- Sin descarga, se usa streaming, sin problemas de espacio.
- HDMI, Optical Audio, Ethernet, Wifi

VN:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 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.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
Tagged with:
jul 28

Acabo de ver en EsferaIphone un video donde hacen un test entres los 4 distintos modelos de iPhone que existen actualmente.

Aunque el test no sea muy riguroso me ha parecido interesante y he decidido publicar el video aquí también.

Como habréis podido observar hay una gran diferencia entre los dos últimos modelos y los dos primeros.
Creo que tenemos que tener mucho en cuenta esta diferencia a la hora de hacer programas que necesiten muchos recursos y de entrada decidir que dispositivos soportará nuestra app.

VN:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)
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.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: +2 (from 2 votes)
Tagged with:
jul 25

Los amigos del blog treyvelan celebran su aniversario organizando unos cuantos sorteos donde los ganadores pueden descargar de forma gratuita varias aplicaciones interesantes. Es un blog muy interesado sobre el mundo apple. No es el típico blog que reproduce las noticias que todos sabemos sino son gente que crea contenidos propios muy útiles e interesantes.

El fundador del blog nos ha comentado que al final de la celebración tiene preparado una regalo sorpresa.

Nosotros de aquí vamos a participar a ver si no toca algo :-)

Aquí tenéis la programación del aniversario.

Suerte a todos participantes y enhorabuena a Treyvelan Blog !

VN:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)
Tagged with:
jul 25

Hoy vamos a ver qué es “weak linking” (linkado débil?), para qué sirve y como usarlo en nuestros proyecto.

Una de las decisiones a tomar cuando empezamos un nuevo proyecto es la de decidir cuál es el dispositivo y/o sistema básico que soportorá nuestra app (iPhone 2G con IOS 2.0? , sólo iPhone 4.0 con iOS4, ipad? o todos?).

Esta claro que cuanto más dispositivos y versiones de SO soportemos a más gente podremos llegar pero para eso tendremos que hacer esfuerzos extra.

El problema consiste en que de una versión a otra se introducen nuevos frameworks, se modifican funciones, se añaden nuevas funcionalidades, etc. A priori si usamos esos nuevos frameworks entonces nuestras apps no funcionarán en las versiones anteriores. Aquí es donde entra weak linking (entre otros) para ayudarnos.

Entonces, vamos a ver un caso práctico donde el “weak linking” nos puede ser útil.

Por ejemplo en iOS 3.0 se introdujo el framework llamado MessageUI que nos permite enviar emails ( y ahora con iOS 4 también SMSes) desde nuestra aplicación. Se encarga de mostrar la interfa de edición de email y permite enviarlo directamente desde nuestra app.

Entonces, que pasa si quieres usar ese nueve framework pero al mismo tiempo queremos que nuestra app siga siendo compatible con las versiones anteriores de iOS?

Muy simple, al incluir este nueva framework en nuestro proyecto lo tenemos que marcar como “weak”.

Para marcar el framework como weak tenemos que hacer click derecho en el Target  para el que queremos hacer el “weak linking” y en el menú desplegable seleccionar “Get Info”:

Luego en la ventana que se abre nos vamos a la pestaña General y abajo de todo veremos el listado de frameworks que se usan para el target seleccionado. En ese listado marcamos el MessageUI.framework como “weak”.

Y está con esto hemos hecho el “weak linking” y ahora el programa se ejecutará tanto en iOS 2,0 (que no tiene MessageUI) como en iOS 3.

He dicho que se ejecutará ahora porque hemos añadido el framework pero por ahora no hems usando ninguna de las clases o funcionces de ese framework.

Si en alguna parte de nuestra app queremos mostrar la vista de edición de email (proporcionado por MessageUI) pondríamos un código parecido a este:

MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
[mail setMessageBody:@"mi mensaje"  isHTML:NO];
mail.mailComposeDelegate = self;
[self presentModalViewController:mail animated:YES];
[mail release];

Después de poner este código la aplicación funcionará bien en iOS3 pero petará en iOS2. Entonces, a parte del weak linking tenemos que de alguna manera preguntar si durante la ejecución están disponibles las clases (también funcionar, métodos, etc) que necesitamos (en este caso tenemos que asegurarnos que el MFMailComposeViewController está disponible).

En el caso de ejemplo tendríamos que hacer lo siguiente:

if (NSClassFromString(@"MFMailComposeViewController") != nil) {
 
	MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
	[mail setMessageBody:@"mi mensaje"  isHTML:NO];
	mail.mailComposeDelegate = self;
	[self presentModalViewController:mail animated:YES];
	[mail release];
 
}else{
		//Hacer algo pensado para las versiones anteriores
}

Con esto si que conseguiremos que la app se ejecute sin problemas tanto en iOS3 como en iOS2.

Pero en este caso todavía podemos rizar más el rizo. La presencia de un framework en el sistema no significa que este puede usarlo. Por ejemplo en el iOS 4 tenemos el MFMessageComposeViewController que sirve para enviar SMS. Si tenemos un iPod touch con iOS4 instalado tendremos ese framework disponible pero eso no significa que vayamos a poder enviar SMSes desde el iPod.

Volviendo al ejemplo anterior, la versión con aun más seguridad/compatibilidad sería este:

if (NSClassFromString(@"MFMailComposeViewController") != nil) {
	if ([MFMailComposeViewController canSendMail]){
		MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
		[mail setMessageBody:@"mi mensaje"  isHTML:NO];
		mail.mailComposeDelegate = self;
		[self presentModalViewController:mail animated:YES];
		[mail release];
 
	}else{
		//hacer algo pensado para un dispositivo de donde no podemos enviar emails
	}
 
}else{
	//Hacer algo pensado para las versiones anteriores
}

Esto que acabamos de ver se llama programación condicional que básicamente nos permite asegurarnos que determinados recursos existen en el sistema antes de usarlos.
Apple recomienda hacer estas comprobaciones a nivel más abajo (funciones y clases) y no a nivel de dispositivo. Es decir, no se recomienda comprobar que estamos ejecutando en un iPhone y dar por seguro que ciertas funciones existen.

En los ejemplos hemos visto cómo comprobar si una clase existe usando la función NSClassFromString() que nos devuelve nul si la clase no existe.
Para comprobar si un método existe o no podemos usar los métodos instancesRespondToSelector y respondsToSelector.
En el caso de funciones podemos comprobar su existencia comparando el nombre de la función con NULL:

if (miFuncion==NULL)
     NSLog(@"La función miFunción no existe");

Para más detalles sobre este tema podéis consultar la SDK Compatibility Guide (está en inglés y tenéis que estar registrados apra verlo) de Apple.

Y como siempre, si tenéis dudas, consultas, sugerencias, correcciones no dudéis un usar los comentarios o nuestro foro.

VN:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: +2 (from 2 votes)
Tagged with:
jul 25

Con este artículo vamos a comenzar una serie de artículos sobre cocos2d.

Cocos2d es un framework pensado para el desarrollo de juegos 2d en el iPhone/iPad. El framework esta construido sobre OpenGL ES por lo que se aprovecha de todo el poderio gráfico del iPhone. Según nuestra experiencia este framework es una maravilla.

Contiene toneladas de APIs que nos facilitan muchísimo la creación de juegos de calidad y vistosos.

En resumen: si piensas crear un juego 2d para el iPhone o el iPad a día de hoy no hay nada mejor que cocos2d.

En este primer artículo vamos a explicar como instalar la librería (es muy fácil) y como empezar nuestros proyectos con cocos2d (aquí tenéis la documentación de instalación en inglés) sin entrar en detalles y de la manera más simple y rápida.

Primero de todo tenemos que descargar cocos2d y descomprimirlo en una carpeta.

Al descomprimir el cocos2d tendremos el siguiente contenido:

Una vez descomprimido el zip podemos installar las plantillas de cocos2d que nos ayudan empezar nuevos proyectos basados en cocos2d sin tener que configurar nada.

Para eso abrimos la terminal y nos vamos a la carpeta donde hemos descomprimido el cocos2d.

En esa carpeta ejecutamos el siguiente comando:

./install-templates.sh

Con esto ya tendremos las nuevas plantillas disponibles en el XCode.

Creando un proyecto cocos2d nuevo

Una vez instalado las plantillas crear un proyecto cocos2d es trivial.

  1. Abrimos el XCode
  2. File > New Project
  3. Elegimos una de las tres plantillas cocos2d disponibles (ver la imagen de abajo).

Verá que tenemos 3 plantillas a elegir. El primero nos da un esqueleto de una aplicación cocos2d estándar. El segundo a parte de lo que hace el primero también configura el motor de físicas Box2d y el tercero hace lo mismo pero en vez del motor de Box2d usa el motor Chipmunk.

En principio si en sus juegos no necesitais tener que modelar física sobre los objetos de su juego tenéis que elegir la primera plantilla.

Ejemplos de cocos2d

Para empezar a jugar con cocos2d es muy recomendable echar un vistazo sobre los ejemplos de cocos2d que vienen en el mismo zip. Si os fijáis, en la carpeta descomprimida hay un fichero de proyecto XCode (cocos2d-iphone.xcodeproj). Es un megaproyecto que contiene un montón de ejemplos de cocos2d.

Para ejecutar cada una de los ejemplos tenemos que hacer coincidir el “Active Target” y el “Active Executable”.

Por ejemplo si queremos ejecutar el AtlasTest tenemos que elegir como Active Target el AtlasTest y como “Active Executable” también el AtlasTest (ver imágenes de abajo).

Con todo esto ya tenemos mucho material con que jugar.

En los siguientes artículos hablaremos más sobre cocos2d.

Si tenéis cualquier duda sobre la instalación no dudéis en preguntarnoslo vía comentarios (los leemos todos). También se aceptan sugerencias :-)

VN:F [1.9.3_1094]
Rating: 4.0/5 (1 vote cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
Tagged with:
jul 18

Ya llevamos algunas semanas oyendo los problemas que tiene el iPhone 4 en cuanto al diseño usado para las antenas, forman el cuadro metálico y visible de la carcasa, estas están separadas por varios cortes visibles, pero cuando el usuario coge el teléfono, puede llegar a hacer un puente entre ellas lo que provoca peor recepción e incluso el corte de la llamada.

Después de varias declaraciones públicas por parte de Apple con respecto al tema, se han visto obligados a reconocer el problema y como solución ofrecen gratis a todo poseedor de un iPhone 4 uno de sus bumpers, antes vendidos por 29$ en la web americana de Apple y que ahora ya no se pueden conseguir desde esa misma web, ahora aparen con el precio de 0.00$ e informan de que no se pueden conseguir y que en breve indicarán como pedirlos para aquellos que ya tienen el iPhone 4.

A veces no es tan malo no ser los primeros en recibir un nuevo producto, y aunque sin duda molesto, el problema parece tener fácil solución sin dejar de ser un problema grave.

Veremos si esto hace que en España el lanzamiento del iPhone 4 no sea tan espectacular como se podría esperar, si habrá bumper directamente con el iPhone 4 o nos las tendremos que apañar para conseguir uno y si los incondicionales seguirán haciendo colas para conseguir el primer iPhone 4 en España.

Para los que entendáis el ingles, en su web www.apple.com se puede ver un video de la conferencia de prensa de este 16 de Julio en la que se habla del tema, así como pruebas realizadas con el iPhone4 y otros móviles, todos disminuyen su señal cuando se los coge firmemente.

VN:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
Tagged with:
jul 15

Hace algún tiempo os comenté como detectar cambios en propiedades mediante el KVO (Key-Value Observing) hoy veremos como hacer lo mismo con notificaciones.

La idea del ejemplo es la siguiente: Tenemos un objeto A de una clase X, del que queremos ser avisados cuando una propiedad sea modificada, para ello avisaremos a otro objeto B, para que éste último realize alguna acción. Para ello usaremos notificaciones, el objeto A enviará una notificación cuando cambie su propiedad y el objeto B estará pendiente de dichas notificaciones.

Veamos como hacer esto desde el código, primero nos creamos una función que será la encargada de enviar las notificaciones. Usamos el centro de notificaciones por defecto de nuestra aplicación y el método postNotificationName:object: para enviar la notificación. Los parámetros son un string para el nombre de la notificación y el objeto que envía la notificación.

#pragma mark -
#pragma mark Notification methods
 
- (void)sendNumberPadPressedNotification {
     [[NSNotificationCenter defaultCenter] postNotificationName:@"number pad pressed" 
                                                         object:self];
}

Después sólo tenemos que llamar a esta función cada vez que queramos notificar del evento o cambio producido, por ejemplo si pulsamos un botón.

#pragma mark -
#pragma mark Notification methods
- (IBAction)ceroButtonPushed:(id)sender {
     [input setString:[numberFormater stringFromNumber:[NSNumber numberWithFloat:0.00]]];
     coma = NO;
     decimal = 1;
     [self sendNumberPadPressedNotification];
}

En la última línea llamamos a nuestro método y la notificación es enviada, en este ejemplo se usa para avisar de que input fue cambiado.

Esto es todo lo que necesita nuestro objeto A (el que avisa del cambio o evento). Veamos ahora el código para el objeto B (el que quiere ser avisado).

Lo primero que tenemos que hacer es registrar el objeto B en el centro de notificaciones para poder recibirlas, obviamente nos tenemos que registrar en el mismo centro de notificaciones que el objeto A, en este caso el centro por defecto.

Usamos para ello el método addObserver:selector:name:object: los parámetros son: el objeto a registrar, un selector del método que queremos ejecutar al recibir la notificación, el nombre de la notificación para la que queremos ser avisados y el objeto sobre el que queremos ser avisado, éste último puede ser nil o el objeto en concreto, para poder diferenciar quien manda la notificación en caso de tener más de un objeto enviando la misma notificación.

 // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
 - (void)viewDidLoad {
     [super viewDidLoad];
     numberPadController = [[GenericNumberPad alloc] initWithNibName:@"GenericNumberPad"
     	  						      bundle:[NSBundle mainBundle]
							       frame:CGRectMake(20, 190, 280, 216)];
     [[NSNotificationCenter defaultCenter] addObserver:self 
                                              selector:@selector(numberPadPressed)
						  name:@"number pad pressed" object:nil];
     [[self view] addSubview:[numberPadController view]];
 }

Cómo veis en el código, el nombre de la notificación es el mismo que se usó en el objeto A. Ya sólo queda que realiceis vuestras acciones en el método que indicasteis a la hora de registrar el objeto B.

#pragma mark -
#pragma mark Notification methods
 
- (void)numberPadPressed {
     [importLabel setText:[numberPadController input]];
}

En este ejemplo se ha usado para actualizar una etiqueta con el valor de la variable input, cada vez que ésta era cambiado.

VN:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
Tagged with:
preload preload preload