Error de Android en Eclipse: Failed to install apk on device timeout

Desarrollando una aplicación (app) en Android, me surgió el siguiente error:

Failed to install MiApp.apk on device ‘30344C3XXXXX’: timeout

Este error me ha surgido al conectar mi dispositivo a la computadora y correr la app en dicho dispositivo. Por tal motivo, me puse a investigar la forma de resolverlo y encontré la siguiente solución.

Lo que deberemos hacer es cambiar el valor de Timeout de 5000 a 10000:

En Linux y Windows

Window -> Preferences -> Android -> DDMS -> ADB connection timeout (ms)

En Mac OS X

Eclipse -> Preferences -> Android -> DDMS -> ADB connection timeout (ms)

Con esto pude ejecutar la app en mi dispositivo conectado a la computadora.

Detener un temporizador usando NSTimer en iOS

Para detener un temporizador usando NSTimer y suponiendo que se usó el ejemplo propuesto en el post anterior, lo único que hay que hacer para detener el temporizador es lo siguiente:

[self.temporizador invalidate];

self.temporizador = nil;

 

Iniciar un temporizador con NSTimer en iOS

Este es un ejemplo muy sencillo de cómo podemos hacer un contador usando NSTimer.

Lo que haremos es imprimir cada segundo un número consecutivo y lo primero a realizar es crear 2 propiedades de la siguiente manera:

@property (strong, nonatomic) NSTimer *temporizador;

@property (nonatomic) NSInteger contador;

Ahora en donde quiera lanzarse el comienzo del contador se deberá poner la siguiente instrucción:

self.temporizador = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(contar) userInfo:nil repeats:YES];

Por último se colocará un método llamado contar el cual irá imprimiendo el número consecutivo:

– (void)contar {

NSLog(@”Contando: %i”,self.contador);

self.contador++;

}

Eso es todo para empezar un temporizador.

 

Reproduciendo sonidos en nuestra app usando AudioToolbox

En esta ocasión voy a ver cómo se puede reproducir un archivo de sonido usando el framework AudioToolbox, esto es muy útil cuando queremos reproducir archivos con algunos efectos de audio al presionar un botón o realizar cierta acción.

Para iniciar deberemos agregar el framework AudioToolbox.framework, como se indica en la image y presionamos el signo “+”.

jx_post_198_01

Presionamos el botón “Add” y se agregará el framework.

jx_post_198_02

Hecho lo anterior, podemos agregar a nuestro proyecto, un archivo de sonido, para ejemplificar, aquí se usará un archivo en formato .mp3.

Presionamos con el botón derecho del ratón sobre una de las carpetas del proyecto como en este caso Supporting Files y elegimos la opción Add Files To “NombreProyecto”… como se puede ver en la imagen.

jx_post_198_03

Buscamos y seleccionamos el archivo que deseamos, en mi caso coloqué el archivo dentro del proyecto, por lo que sólo seleccionaré las opciones marcadas en la imagen.

jx_post_198_04

Agregado el archivo lo siguiente que haremos será agregar el código necesario. Empezaremos incluyendo en el archivo .h o .m la biblioteca necesaria:

#import <AudioToolbox/AudioToolbox.h>

Ahora donde deseemos usar la reproducción del sonido, incluiremos las siguientes líneas:

SystemSoundID SoundID;

NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"sableon" ofType:@"mp3"];

AudioServicesCreateSystemSoundID((__bridge CFURLRef) [NSURL fileURLWithPath:soundFile], &SoundID);

AudioServicesPlaySystemSound(SoundID);

Se deberá cambiar el nombre del archivo en mi caso llamado sableon (sin la extensión) por el nombre de su archivo y si fuera de otra extensión deberemos cambiar donde dice mp3.

Algo importante a considerar es que deben ser sonidos pequeños, de efectos o tonos de duración corta para que sea reproducido rápidamente, de lo contrario se pueden usar otros métodos para la reproducción del audio deseado.

Con esto agregado únicamente falta probar la reproducción del sonido de acuerdo a como lo hayan implementado, ya sea en la acción como respuesta a presionar un botón, a un gesto o lo que hubiesen implementado.

Obtener medidas de la pantalla en iOS

En algunas aplicaciones que deseamos crear, es necesario obtener las dimensiones de la pantalla del dispositivo, sobre todo ahora con el iPhone 5, por lo que a veces tendremos que hacer una diferencia con las medidas de los iPhone’s anteriores y este.

Para podere obtener dichas medidas se puede agregar el siguiente código:

CGRect pantalla = [[UIScreen mainScreen] bounds];

Esta asignación nos crea un objeto con la información de la pantalla, para obtener el width o height de la pantalla sólo tenemos que hacer referencia a los atributos de pantalla:

pantalla.size.height

o

pantalla.size.width

Con esto obtendremos las dimensiones de nuestros dispositivos con iOS.

Cerrar una pantalla abierta con el método presentModalViewController

En el post Abrir una nueva pantalla usando presentModalViewController mostré como abrir una pantalla haciendo uso del método presentModalViewController, ahora mostraré como cerrar esa ventana que abrimos.

Dentro del método que desean que cierre la ventana se deberá incluir la siguiente línea:

[self dismissModalViewControllerAnimated:YES];

Con esto se cerrará la ventana abierta.

Abrir una nueva pantalla usando presentModalViewController

Una forma de abrir otra pantalla en una aplicación en iOS, es usando el método presentModalViewController de la pantalla actual.

Lo que se debe de realizar es crear una objeto de la pantalla que se quiere abrir, en mi caso usaré una pantalla llamada JXViewController2:

JXViewController2 *view2 = [[JXViewController2 alloc] initWithNibName:@"JXViewController2" bundle:nil];

Ahora ejecutaré la acción para abrir esta pantalla:

[self presentModalViewController:view2 animated:YES];

Con esto se abrirá la ventana que deseamos.

Cambiar el texto del botón atrás de un UINavigationBar

Hay ocasiones en las que nuestra aplicación cuenta con un UINavigationController y una UITableView.

jx_post_100_01

Cuando presionamos en alguno de los items de la tabla hacemos cambio a otra pantalla y en el NavigationBar de esta muestra un botón con el texto “atrás” o “back”.

jx_post_100_02Lo que deseamos hacer es cambiar ese texto a algo que nosotros deseamos. Para lograr ésto, haremos lo siguiente:

Crearemos un UIBarButtonItem y asignarlo al NavigationItem:

UIBarButtonItem *barButtonItemAtras = [[UIBarButtonItem alloc] initWithTitle:@"Regresar..." style:UIBarButtonItemStyleBordered target:nil action:nil];
[self.navigationItem setBackBarButtonItem:barButtonItemAtras];

jx_post_100_03

Eso es todo.

 

Obtener la versión de nuestra app en iOS

En ocasiones para nuestra aplicación en iOS queremos o necesitamos obtener el número de versión que le asignamos para mostrarla en alguna parte de dicha app.

Para realizar esto podemos hacer lo siguiente:

NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];

Con esto ya tenemos en la versión en nuestra variable y la podremos usar para lo que necesitemos.

Usar NSURL con URLs con acentos

Me ha llegado a suceder que hay URLs que cuantan con acentos y cuando a NSURL le paso  este URL termina por devolverme un NULL.

Para poder resolver esto he usado el método stringByAddingPercentEscapesUsingEncoding de un objeto de tipo NSString de la siguiente manera:

NSURL *urlImagen = [[NSURL alloc] initWithString:[url stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];

Esto convertirá la cadena correctamente y se obtendrá la información deseada.

Cambiar el nombre de una app iOS

En algunas ocasiones suele ocurrir que el proyecto en iOS que comenzamos a desarrollar en Xcode sufre un cambio y requiere que se llame de otra manera, en algunos casos se recomienda renombrar el nombre de todo el proyecto, pero a veces manda error o si trabajan con sistemas de versiones como svn o git, esto suele causar problemas. Por tal motivo a veces solamente lo que se necesita cambiar es el nombre que se muestra en el dispositivo.

Supongamos que tenemos una app llamada “Proyecto1” como se ve en la imagen siguiente:

app nombre original
Pero ahora queremos que se llame “MiProy1”, para eso se realizará lo siguiente:

Vamos a: Project Navigator -> Proyecto1 -> TARGETS -> Proyecto1 -> Info -> Bundle display name presionamos en la columa Value  y cambiamos el nombre a “MiProy1” como se ve en la imagen.

Xcode renombrar nombre
Ahora seleccionamos cualquier otro elemento para que termine el modo edición del campo.

Lo que resta es volver a ejecutar la app y veremos el cambio de nombre.

App nuevo nombre