Está en la página 1de 54

Introduccin a Android Studio

Este ao Google present un nuevo IDE para programar para Android, el cual a pesar de ser an una versin
incompleta (actualmente se encuentra en la versin 0.2) est generando migracin de desarrolladores que antes
utilizaban Eclipse o NetBeans.
Hoy quiero presentarte este programa y ayudarte a realizar una primera aplicacin para Android.
Instalacin
Lo primero que es necesario para usar este nuevo IDE, es descargarlo desde su pgina oficial:
http://developer.android.com/sdk/installing/studio.html. Para poder ejecutar Android Studio, es necesario tener
instalado el J DK de J ava; si no lo tens lo pods descargar desde ac
http://www.oracle.com/technetwork/es/java/javase/downloads/index.html.
Aunque ya tiene varios bugs corregidos, es posible que te aparezca algn error al momento de instalar; por suerte
la comunidad ya est muy activa y hay solucin para casi todos los errores.
Nota: Si ests ejecutando Windows, record que Android Studio debe ejecutarse con privilegios de administrador.
Proyecto
Una vez que iniciemos Android Studio veremos una pantalla como la siguiente
Hacemos click en "New Project..." y llenamos los datos de nuestra nueva aplicacin como muestra la imagen.
www.nebaris.com 2
Aplication name: El nombre de la aplicacin es lo que se ver en el Play Store.
Module name: El nombre del mdulo es utilizado por el IDE y generalmente suele ser el mismo que el de la
aplicacin.
Package name: El nombre del paquete debe ser nico, para poder identificar a la aplicacin. No suele
mostrarse a los usuarios, pero debe permanecer inalterable durante la vida de la aplicacin; de esta forma
varias versiones de la misma aplicacin son consideradas la misma app. Generalmente se utiliza la URL de la
organizacin de manera inversa (ms uno o dos identificadores de la aplicacin) y debe ser un nombre J ava
vlido.
Minimum required SDK: Se indica cul es la versin mnima de Android que nuestra aplicacin soporta. Una
versin ms antigua significa ms dispositivos a los cuales podremos llegar, pero menos funcionalidades
disponibles.
Target SDK: Se indica cul es la versin de la API ms actual con la que se sabe que la aplicacin
funcionar.
Compile with: Se indica cul es la versin de la API que se utilizar para compilar el proyecto.
Theme: El estilo visual que utilizar nuestra aplicacin.
Al continuar vemos la siguiente pantalla. En ella podemos elegir un cono para representar nuestra aplicacin en el
escritorio del celular.
www.nebaris.com 3
En la siguiente pantalla podremos indicar el tipo de ventana principal que va a tener nuestra aplicacin.
www.nebaris.com 4
Las diferentes opciones son:
Blank Activity: Crea una pantalla vaca, con una barra superior y navegacin opcional como tabs o
desplazamiento horizontal.
Fullscreen Activity: Crea una pantalla que se muestra a pantalla completa (como los video juegos).
Master/Detail Flow: Crea dos actividades: un maestro y un detalle. Permite a los usuarios ver una coleccin
de objetos y los detalles de los mismos. En las tablets se muestra con dos columnas y en los celulares con
una.
Para este ejemplo elegimos "Blank Activity" y por ltimo elegimos el nombre de la actividad, del layout y el estilo
de pestaas que queremos para la aplicacin.
www.nebaris.com 5
Con nuestro proyecto ya creado, se nos abrir el IDE.
Vamos a ver cada una de las partes que lo compone. Si hacemos un click en el botn de la izquierda "Project",
podremos ver la ventana del proyecto, para poder navegar entre los archivos que conforman nuestra aplicacin. La
www.nebaris.com 6
actividad que estamos viendo (que es la que creamos anteriormente), se encuentra en HolaMundoProject >
HolaMundo > src > main > res > layout > activity_main.xml.
En el men Palette (a la izquierda), se encuentran los elementos que podemos agregar a nuestra activity.
En el medio encontramos una vista previa de la aplicacin. Podemos modificar el dispositivo con el cual se
renderiza, mediante el combo.
www.nebaris.com 7
A la derecha tenemos el rbol de componentes (donde se encuentran todos los elementos que fuimos agregando
del men Palette) y la ventana de propiedades (donde se muestran las propiedades de los elementos
seleccionados).
Por ltimo, en la parte inferior tenemos dos etiquetas: Design (permite que arrastremos componentes y los
soltemos dentro de la pantalla) y Text (nos permite escribir cdigo).
Hola mundo
Podemos ver que hay un texto que dice "Hello world!". Vamos a eliminarlo, para poder ver cmo agregarlo
nosotros.
Hacemos un click sobre el texto (para seleccionarlo) y apretamos el botn suprimir.
Arrastramos desde el men Palette un elemento de Widgets > Plain TextView hacia el layout. Podemos ver
que al mismo tiempo que se agrega en el diseo, se agrega en el rbol de componentes.
Apretamos la etiqueta Text y veremos un cdigo como el siguiente
.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
www.nebaris.com 8
Pods observar que hay una lnea amarilla sobre el scroll (a la altura de android:text). No es un error, sino que es
un mensaje que nos indica que estamos poniendo un texto de manera "hardcodeada". Esto no es una buena
prctica, por lo cual tendramos que usar un recurso @string. Al mantener unos segundos el mouse sobre lnea,
nos aparecer una lmpara sobre la izquierda la cual nos dar opciones para arreglar este problema. Utilizaremos
la primer opcin "Extract string resource". En la ventana que aparecer, indicamos un nombre para este recurso,
que lo guarde en el archivo strings.xml y en el directorio values. Al aceptar modificar la lnea anterior por la
siguiente:
A partir de ahora, si queremos cambiar el valor de dicho texto tendremos que hacerlo en el archivo strings.xml que
se encuentra en HolaMundoProject > HolaMundo > src > main > res > values > strings.xml.
Emulador
Hasta ahora vimos cmo queda la aplicacin en la vista previa, pero tenemos que verificar que esto sea as.
Google nos provee de un emulador de dispositivos conocido como AVD (Android Virtual Devices). Para poder
probar nuestra aplicacin debemos generar un dispositivo emulado. Para eso vamos a Tools > Android > ADV
Manager. En la ventana que aparece seleccionamos "New", le indicamos un nombre, elegimos un dispositivo, una
versin de Android y el resto podemos dejarlo como est. Hay que tener en cuenta que si ests utilizando
Windows, la memoria Ram no debera ser mayor de 768, ya que puede generar fallos.
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="18dp"
android:layout_marginTop="10dp"/>
android:text="@string/mensajeHolaMundo"
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Hola Mundo</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hola mundo</string>
<string name="mensajeHolaMundo">Hola mundo</string>
</resources>
www.nebaris.com 9
Si todo sali bien, veremos que se agreg nuestro dispositivo a la lista de dispositivos emulados.
www.nebaris.com 10
Ahora que ya tenemos el dispositivo, volvemos al IDE y apretamos el "play" verde que se encuentra en la barra de
herramientas superior. Nos saldr una nueva ventana para que elijamos dnde queremos probar la aplicacin: en
un dispositivo que ya est corriendo y en un emulador nuevo. Seleccionamos el emulador que acabamos de crear
y empezar a ejecutarse (ten paciencia, ya que puede tardar bastante).
www.nebaris.com 11
Introduccin a Java para Android
Las aplicaciones Android (de manera nativa) se crean utilizando un lenguaje de programacin llamado Java (no
tiene relacin con JavaScript). Java es un lenguaje muy popular que fue creado por Sun Microsystems (adquirido
por Oracle). Se cre como un siguiente paso en la evolucin de C y C++, tomando muchas de las caractersticas
de estos lenguajes, mientras que solucionaba muchos de sus problemas.
Fcil de entender
Si sabs programar en C, C#, PHP, JavaScript, etc., podrs ver que la sintxis que utiliza Java es muy similar.
Aunque no conozcas de programacin, al leer el cdigo anterior fcilmente pods darte una idea de lo que est
haciendo el programa.
Ademas, la comunidad Java es realmente grande. Existen muchos cursos, artculos, libros, tutoriales, etc; que se
pueden consultar en caso de no encontrar una solucin.
Independiente de la plataforma
En los lenguajes compilados, es necesario utilizar un compilador para reducir el cdigo fuente a lenguaje de
mquina, para que la computadora lo pueda entender. Esto significa que tens que compilar el cdigo para cada
dispositivo diferente, o sea, tu cdigo no es portable.
El compilador Java convierte el codigo fuente a algo denominado "bytecode". Estos bytecodes son interpretados
por la JVM (Java Virtual Machine o Mquina Virtual Java) que opera como una computadora y es la encargada de
traducir los bytecodes al lenguaje de mquina. Con las mquinas poderosas que tenemos en la actualidad, este
paso extra no afecta al desempeo de las aplicaciones.
Las aplicaciones Android se ejecutan en una mquina virtual especial llamda Dalvik VM. Gracias a Dalvik, no nos
tenemos que preocupar por si nuestro programa va a ser ejecutado en un Samsung Galaxy S4 o en un Motorolla
Milestone 1.
Orientado a objetos
La orientacin a objetos es un estilo de programacin que se basa en la definicin de estructuras llamadas
objetos. Mediante el uso de clases, que pueden ser pensadas como un tipo de datos que generamos para un
propsito especfico, podemos crear objetos de esa clase para definir la estructura de nuestro proyecto. Sobre la
orientacin a objetos existen libros enteros, por lo cual no voy a detenerme mucho en este punto, ya que no es el
objetivo de este artculo.
int edad = 18;
if (edad >= 16)
{
votar();
}
else
{
esperarProximaEleccion();
}
www.nebaris.com 12
En Java casi todo es un objeto y una de las fortalezas de este lenguaje son las libreras que contiene, las cuales
estn llenas de clases y objetos que nos facilitan tareas bsicas y nos abstraen de funcionalidades realmente
complicadas.
Requerimientos
Para poder crear aplicaciones con Java es necesario contar con la JDK. Despus pods hacer uso de un IDE para
simplificar el desarrollo. Existen dos IDE muy populares dentro de la comunidad Java:
Eclipse
NetBeans
Especficamente para Android, Google present el Android Studio, el cual probablemente sea el nuevo IDE favorito
para el robot verde.
Sintaxis
Comentarios
Existen bsicamente 3 tipos de comentarios:
1) De una lnea
2) De lneas mltiples
3) Javadoc, que permite crear documentacin del cdigo.
Variables
Las variables en Java se engloban en dos categoras:
Primitivas: int, float, double, char, etc.
Objetos: instancias de una clase
Las variables slo son vlidas dentro del mbito en el que se declaran (generalmente entre llaves).
int edad = 18; // comentario de una lnea
/*
comentario de lneas
mltiples
*/
/** Este mtodo hace algo
*
* @param valorImportante necesario para el proceso
* @return el resultado del proceso
*/
public int hacerAlgo(int valorImportante) {

}
www.nebaris.com 13
A las variables que son miembros de una clase se las denomina atributos, campos o propiedades.
Java tiene los clsicos operadores unarios, binarios y el operador ternario, para operar con ellas.
String
Muy probablemente, los objetos de la clase String sean los que con mayor frecuencia se crean. La Clase String es
utilizada para encapsular texto. Java crea un arreglo de caracteres de forma similar al lenguaje C++.
Es posible crear un string explcitamente
O implcitamente
if else
Si necesitamos que un cdigo se ejecute en base a cierta condicin, podemos utilizar la declaracin if else para
realizar dicho control.
switch
Cuando las posibilidades son muy grandes, utilizar if else no es recomendable. Para esos casos Java nos provee
de la estructura switch, con la cual buscamos un caso que se d con una condicin dada.
int a = 3;
int b = 9;
int c = 5;
int resultado = (a + b) / c;
resultado++;
int total = (resultado > 0) ? resultado : 0;
String str = new String ("Hola mundo");
String str = "Hola mundo";
if(i == 0) {
// cdigo
} else if (i > 0) {
// cdigo
} else {
// cdigo
}
char caracter = 'r';
switch(caracter) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
// el caracter es una vocal
break;
default:
// el caracter es una consonante
www.nebaris.com 14
Bucles
Para cuando necesitamos ejecutar un cdigo repetida cantidad de veces, Java nos permite utilizar tres estructuras:
1) While: El cdigo se va a ejecutar hasta que la condicin deje de ser cierta.
2) Do while: La condicin se evala despus de la primer iteracin, con lo cual al menos se ejecutar una vez.
3) For: Nos permite iterar una cantidad definida de veces, indicando el valor inicial, la condicin y el incremento.
Los tres bloques realizan la misma tarea.
Arreglos
Un arreglo (o array) es una estructura de datos que se utiliza para guardar una lista ordenada de tems. Los
arreglos se declaran de un tipo de dato y se puede acceder a sus elementos a travs de un ndice.
Los arreglos en Java son objetos (de la clase Array), con lo cual tenemos acceso a funcionalidad como la
siguiente:
Clases
Una clase es un molde del que luego se pueden crear mltiples objetos. Define atributos (variables) y mtodos
(funciones) comunes para todos los objetos que se instancien de esa clase, luego cada objeto tendr sus propios
valores.
Se puede controlar la visibilidad de los miembros de una clase indicando un modificador de acceso. Los niveles de
acceso son:
break;
}
int cantidadDeVeces = 10;
while(cantidadDeVeces > 0) {
// procesar
cantidadDeVeces--;
}
int cantidadDeVeces = 10;
do {
// procesar
cantidadDeVeces--;
} while(cantidadDeVeces > 0);
for(int i = 10; i > 0; i--) {
//procesar
}
char vocales[] = {'a','e','i','o','u'};
int cantidadDeVocales = vocales.length;
char i = vocales[2];
www.nebaris.com 15
public: se puede acceder desde afuera de la clase
protected: se accede dentro de la clase y sus herederos
private: slo se puede acceder dentro de la clase
default: cuando no se indica un nivel de acceso y se puede acceder de cualquier clase dentro del mismo
package.
Se les puede agregar un mtodo constructor a las clases (que debe tener el mismo nombre que la clase), que se
ejecutar al momento de crear un objeto. La funcin de los constructores es dejar al objeto en estado consistente.
En este ejemplo creamos una clase Persona, que tiene un constructor y dos mtodos: uno para obtener el nombre
y otro para establecerlo (el cual es privado). Si quisieramos crear un objeto de esta clase, deberamos hacer lo
siguiente:
public class Persona {
private String nombre;
public Persona(String nom) {
setNombre(nom);
}
private void setNombre(String nom) {
nombre = nom;
}
public String getNombre() {
return nombre;
}
}
Persona nuevaPersona = new Persona("Gabriel");
www.nebaris.com 16
Introduccin al desarrollo para iOS
Antes de poder crear aplicaciones para iOS, es necesario seguir un par de pasos, as que manos a la obra.
Comprar una Mac
Es el requerimiento nmero 1 a la hora de hablar de desarrollo para iOS. Es necesario tener una Mac con
procesador basado en Intel corriendo Mac OS X 10.7 o superior. La opcin ms accesible es una Mac Mini.
Registrar una cuenta de desarrollador Apple
Las cuentas de desarrollador Apple son gratuitas, al registrarla nos permiten descargar el programa Xcode (el IDE
creado por Apple), acceder a la documentacin del SDK de iOS, recursos y videos.
Para poder crear tu cuenta, tens que registarte en esta pgina: https://developer.apple.com/register/index.action
Instalar Xcode
Para empezar a desarrollar aplicaciones para iPhone o iPad, es necesario tener Xcode instalado. Posee todo lo
necesario, como un editor de cdigo, un editor grfico, herramientas de debugging, un simulador de iPhone y iPad,
etc.
Pods descargar Xcode desde la App Store.
Inscribirse en el Programa de Desarrolladores de iOS (opcional)
Xcode incluye un simulador de iPhone y iPad para probar tus aplicaciones, pero sin inscribirte en el Programa de
Desarrolladores de iOS, no pods hacer un deploy de tu aplicacin a tus dispositivos, ni enviarla a la App Store. O
sea, no podrs venderla.
Una cosa a tener en cuenta, es que este programa cuesta u$s99 por ao, por lo que si recin ests aprendiendo,
no tiene sentido pagarlo. Pods esperar a que tus conocimientos sean fuertes y cuando tengas tu aplicacin lista
,ingresar al programa.
Hola mundo
La primera vez que ejecutes Xcode vas a ver la siguiente pantalla. En la cual tenemos que hacer click sobre
"Create a new Xcode project".
www.nebaris.com 17
Aparecer esta segunda pantalla, la cual nos permite elegir el tipo de plantilla que vamos a utilizar para nuestra
aplicacin. En este caso elegiremos "Single View Application".
www.nebaris.com 18
En la tercer pantalla empezaremos a configurar nuestra aplicacin.
www.nebaris.com 19
Product Name: El nombre de nuestra aplicacin.
Organization Name: El nombre de nuestra organizacin.
Company Identifier: Tambin conocido como namespace, evita que existan problemas con dos aplicaciones
que tengan el mismo nombre. Una prctica comn es indicar el dominio de la pgina de tu empresa al revs,
pero pods utilizar cualquier cosa.
Bundle Identifier: La combinacin del nombre del producto con el identificador de la compaa, el cual es
necesario para preparar la aplicacin para el App Store.
Devices: Indicamos en qu dispositivos se va a poder utilizar nuestra aplicacin
Finalmente Xcode se cargar y podremos ver las tres reas principales, las cuales podemos mostrar u ocultar
utilizando las opciones de vista que se encuentran en la esquina superior derecha.
www.nebaris.com 20
Sobre el rea de navegacin, tenemos un rbol de directorios. Si hacemos un click sobre el archivo
MainStoryboard.storyboard, se nos mostrar una pantalla de iPhone, con una barra superior y el cono de la
batera.
www.nebaris.com 21
En la parte inferior del rea de utilidades, vamos a verificar que est seleccionada la Object Library y escribimos
"label".
Arrastramos el label hacia el diseo y nos quedar algo as.
www.nebaris.com 22
Para cambiarle el texto, pods hacer doble click sobre l o utilizar el inspector de atributos (parte superior del rea
de utilidades).
Hacemos click sobre el archivo de proyecto, en el rbol de directorio para volver a la pantalla del principio.
www.nebaris.com 23
Y nos dirigimos a la seccin "App icons" para agregarle un cono a nuestra aplicacin. Las imgenes a utilizar para
los conos deben estar en formato PNG y ser de 57x57 pxeles (pantallas normales) y 114x114 pxeles (pantallas
retina).
Para finalizar hacemos un click sobre el botn Run que est en la esquina superior izquierda y esperamos a que el
simulador de iPhone se ejecute.
www.nebaris.com 24
Si queremos ver cmo queda nuestra aplicacin en el escritorio, podemos apretar el botn central del iPhone.
www.nebaris.com 25
www.nebaris.com 26
Introduccin a Objective-C
Objective-C es el lenguaje de programacin utilizado por Apple para su sistema operativo OS X y los dispositivos
iOS. Es un lenguaje compilado y de propsito general y nos permite adentrarnos en el mundo de iPhone y iPad. En
esta serie de artculos vamos a aprender las bases para poder desarrollar aplicaciones en Objective-C.
Introduccin
Al igual que C++, Objective-C se cre para aadir caractersticas de la orientacin a objetos al lenguaje C, aunque
cada lenguaje utiliza una filosofa distinta. Objective-C es ms dinmico y difiere la mayor parte de las decisiones
hacia el momento de la ejecucin, en lugar de hacerlo al momento de la compilacin.
Objective-C es bastante conocido por la verborragia que utiliza al momento del nombrado de funciones. El
resultado es tan descriptivo, que es casi imposible malinterpretar su funcionamiento.
En el siguiente ejemplo podemos ver un objeto llamado gabriel y una llamada al mtodo pagar, utilizando C++ y
Objective-C.
En general, Objective-C se parece ms al lenguaje humano. Una vez que uno se acostumbra, es bastante sencillo
codificar.
Existen diferentes frameworks, pero Cocoa (OS X) y Cocoa Touch (iOS) son los ms populares. Estos incluyen
diferentes libreras, pero en estos artculos slo vamos a utilizar la librera Foundation; la cual define los tipos de
datos orientados a objetos bsicos.
Hola mundo
Para programar, vamos a utilizar el programa para Mac Xcode, en caso que no lo tengas instalado, te recomiendo
el artculo Introduccin al desarrollo para iOS. A pesar que existen otras formas de compilar cdigo Objective-C,
Xcode es la ms simple de todas ellas.
Xcode nos provee muchos tipos de plantillas, para este primer ejemplo vamos a seleccionar en el men de la
izquierda "Application" y en el de la derecha "Command Line Tool", es decir, vamos a crear un programa que se
ejecute en lnea de comandos.
// C++
gabriel->pagar(200, "Alquiler");
// Objective-C
[gabriel pagar:200 enConceptoDe:@"Alquiler"]
www.nebaris.com 27
Para crear un nuevo proyecto, tenemos que hacer File > New > Proyect o apretar Shift+Command+N.
Al utilizar una aplicacin de consola, nos centraremos en el lenguaje y no tanto en el dispositivo o framework.
El siguiente paso, es darle nombre a nuestra nueva aplicacin.
Podemos utilizar cualquier nombre en "Product name" (nombre del producto) y en "Organization" (organizacin).
Para aplicaciones reales, es necesario conseguir un identificador de compaa, cosa que obtenemos al
registrarnos como desarrolladores.
Vamos a utilizar varias clases del framework Foundation, por lo cual es importante que en Type lo seleccionemos.
Por ltimo, "Automatic Reference Counting" (tambin conocido como ARC) debe estar seleccionado.
Presionamos siguiente y guardamos el proyecto en una carpeta de nuestra preferencia. Se abrir el proyecto en
Xcode y podremos ver que se han creado algunos archivos bsicos.
www.nebaris.com 28
En este momento, el que nos interesa es el archivo "main.m", la extensin ".m" se utiliza para los archivos de
Objective-C. Al hacer un click podremos ver el siguiente cdigo:
Si apretamos el botn "Run" que est en la esquina superior izquierda, el cdigo se compilar y se ejecutar el
programa; mostrando la siguiente pantalla:
Donde veremos la lnea "Hello, World!" mostrndose por pantalla.
Explicacin del cdigo
Al igual que C, todos los programas escritos con Objective-C deben poseer una funcin main(), como funcin
principal. La mayora de las plantillas de Xcode, crean un archivo llamado "main.m", el cual define dicha funcin.
Todo lo que querramos experimentar, debe hacerse dentro del bloque de cdigo autoreleasepool, en nuestro caso,
encontramos una llamada a la funcin NSLog(), la cual se define en el framework Foundation. Esta funcin muestra
un string en la consola. Un dato interesante, es que en Objective-C, los strings siempre deben poseer el prefijo
"@".
En las aplicaciones reales, no se modifica la funcin main, ya que su nica funcin es la de pasar el control del
programa a la aplicacin.
Lenguaje C
Como ya dijimos, Objective-C es un super conjunto del lenguaje C, lo que significa que es posible combinar ambos
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here
NSLog(@"Hello, World!");
}
return 0;
}
www.nebaris.com 29
en el mismo archivo. Por dicho motivo, es importante tener una idea (al menos bsica) del lenguaje C.
Comentarios
Existen dos formas de incluir comentarios en C, en forma de lnea y de bloque.
Como los comentarios son ignorados por el compilador, podemos incluir en ellos informacin extra, que ayude a
entender el cdigo.
Variables
Las variables son contenedores que pueden guardar valores. C es un lenguaje fuertemente tipado, lo que significa
que, cuando creamos una variable, tenemos que indicarle qu tipos de valores puede contener. Para declarar una
variable se utiliza la siguiente sintaxis:
Si es necesario interpretar una variable como un tipo diferente, es posible hacer un "cast" poniendole de prefijo el
nuevo tipo entre parntesis. En el siguiente ejemplo, podemos ver cmo se realiza un cast de un tipo de datos a
otro.
Para mostrar valores dentro de un string, se utiliza el % seguido de una letra, la cual depende segn el tipo de
dato a mostrar (para int "d", para double "f"). Al incluir ".3" estamos indicando que se deben mostrar 3 espacios
despus de la coma.
C define muchos tipos de datos primitivos, los ms utilizados son:
int: valores enteros (valor mximo 2147483648)
short: valores enteros (valor mximo 32768)
long: valores enteros (valor mximo 9223372036854775808)
char: 1 caracter
float: valores decimales
double: valores decimales de presin doble
// este es un comentario en forma de lnea
/* Este es un comentario en forma
de bloque /*
<tipo> <nombre> = <valor>
// creamos una variable del tipo double
// es decir, un nmero real que puede ser muy grande
double valorDouble = 5413.816;
// creamos una variable del tipo int
// es decir, un nmero entero
int valorInt = (int)valorDouble
// mostrar 5413.816
NSLog(@"Valor en double: %.3f", valorDouble);
// mostrar 5413
NSLog(@"Valor en int: %d", valorInt);
www.nebaris.com 30
C define el tipo "bool" que puede poseer los valores "true" o "false", sin embargo, en Objective-C se utiliza el tipo
de datos "BOOL" el cual puede poseer los valores "YES" o "NO".
Constantes
La palabra reservada const puede utilizarse para indicarle al compilador que una variable no va a modificar nunca
su valor. Si uno intenta modificar una variable constante, obtiene un error de compilacin.
Condicionales
El lenguaje C provee el condicional "if" que se encuentra en la gran mayora de los lenguajes, el mismo nos
permite bifurcar la ejecucin de un programa.
A su vez, tambin nos proporciona la declaracin "switch", para decidir caminos en los cuales una variable puede
tomar muchos valores diferentes y utilizar instrucciones del tipo "if" sera muy engorroso. Hay que aclarar que
"switch" slo puede utilizarse con variables del tipo int.
double const pi = 3.1415;
pi = 3; // error
int edad = 19;
if (edad > 18) {
NSLog(@"Mayor de edad");
}
else {
NSLog(@"Menor de edad");
}
int calificacion = 7;
switch (edad) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
NSLog(@"Insuficiente");
break;
case 6:
case 7:
NSLog(@"Bueno");
break;
case 8:
case 9:
NSLog(@"Muy bueno");
break;
case 10:
NSLog(@"Excelente");
break;
default:
NSLog(@"No rendido");
www.nebaris.com 31
Bucles
Los bucles "while" y "for" pueden utilizarse para que el programa repita secciones de cdigo. Por ejemplo:
Los dos cdigos produciran la misma respuesta: 5 lneas de "Hola mundo".
Macros
Los macros, son una forma de definir constantes. Se utiliza la directiva #define para mapear un valor con un
cdigo. Antes que el compilador intente parsear el cdigo, el preprocesador reemplaza las ocurrencias del macro
con el cdigo asociado.
break;
}
int i = 0;
while (i < 5) {
NSLog(@"Hola mundo");
i++;
}
for(int j=0; j<5; j++) {
NSLog(@"Hola mundo");
}
#import <Foundation/Foundation.h>
#define SUELDO_MAXIMO 20000
#define SUELDO_MAXIMO_NETO(sueldo) (sueldo * 0.83)
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here
NSLog(@"Sueldo mximo: %d", SUELDO_MAXIMO); // 20000
NSLog(@"Sueldo mximo neto: %.2f", SUELDO_MAXIMO_NETO(SUELDO_MAXIMO)); // 16600
}
return 0;
}
www.nebaris.com 32
Typedef
El lenguaje Objective-C nos provee la palabra reservada typedef, la cual podemos usar para darle un nuevo
nombre a un tipo de dato. Por ejemplo:
Con esto, cambiamos el nombre del tipo int a ENTERO. Una vez que hicimos esto, podemos crear una variable de
la siguiente forma:
Por convencin, se utilizan letras en mayscula para recordar al usuario que el tipo de dato es en realidad una
abreviatura simblica.
En realidad, no suele utilizarse typedef de esa forma, sino, que se lo utiliza para definir estructuras o
enumeraciones.
Structs
Una estructura (struct) es como un objeto primitivo de C. Nos permite agregar variables, pero no provee ninguna
de las caractersticas de la orientacin a objetos. En el ejemplo creamos una estructura llamada Color, la cual
posee tres variables del tipo short, que nos servirn para indicar los 3 canales del tipo RGB (red, green, blue).
Luego creamos una variable de esta estructura, le cargamos valores y los mostramos por pantalla.
Las variables dentro de la estructura se acceden utilizando el operador punto y al inicializar la variable, los valores
se cargan en el mismo orden en que fueron definidas dentro de la estructura.
typedef int ENTERO;
ENTERO miEntero = 4;
#import <Foundation/Foundation.h>
typedef struct {
short rojo;
short verde;
short azul;
} Color;
int main(int argc, const char * argv[])
{
@autoreleasepool {
Color naranja = {255, 165, 0};
NSLog(@"El color naranja se forma con los valores (R: %d, V: %d, A: %d)",
naranja.rojo, naranja.verde, naranja.azul);
}
return 0;
}
www.nebaris.com 33
Enum
Los enum se utilizan para crear tipos enumerados, o sea, una coleccin de constantes relacionadas. En este
ejemplo creamos una enumeracin con los das de la semana, luego creamos una variable de dicha enumeracin
y utilizamos un switch para mostrar un texto dependiendo de qu da hayamos elegido.
Las variables que pertenezcan a una enumeracin slo pueden contener valores de dicha enumeracin.
Las enumeraciones nos ayudan a tener un cdigo ms fcil de leer y a evitar errores, ya que el compilador nos
avisar de cualquier error de sintaxis.
Arreglos primitivos
Como Objective-C es un super conjunto de C, tenemos acceso a los arreglos primitivos de este lenguaje. En
#import <Foundation/Foundation.h>
typedef enum {
DOMINGO,
LUNES,
MARTES,
MIERCOLES,
JUEVES,
VIERNES,
SABADO
} Dias;
typedef int ENTERO;
int main(int argc, const char * argv[])
{
@autoreleasepool {
Dias hoy = VIERNES;
switch (hoy) {
case LUNES:
case MARTES:
case MIERCOLES:
case JUEVES:
case VIERNES:
NSLog(@"Dia de semana");
break;
case SABADO:
case DOMINGO:
NSLog(@"Fin de semana");
break;
}
}
return 0;
}
www.nebaris.com 34
general, se utilizan las clases NSArray y NSMutableArray (en el framework Foundation); sin embargo, en ambientes
donde la performance es muy importante, los arreglos primitivos siguen siendo importantes.
Cuando creamos un arreglo, debemos indicar el tamao que contendr el mismo en los corchetes. Luego podemos
acceder a sus datos, indicando un ndice en los mismos.
Punteros
Un puntero es una referencia directa a una direccin de memoria. Mientras que una variable acta como
contenedor transparente para un valor, los punteros remueven una capa de abstraccin y nos permiten ver cmo
se almacena dicho valor.
Para usar punteros, es necesario conocer dos operadores nuevos:
El operador de referencia (&): Retorna la direccin de memoria de una variable normal.
El operador de desreferencia (* ): Retorna el contenido de la direccin de memoria de un puntero.
En el siguiente ejemplo vemos cmo declarar, crear y desreferenciar punteros.
Este ejemplo se puede explicar de la siguiente forma:
La variable almacena el valor sin tener nocin de la direccin de memoria
Se usa el operador de referencia para obtenerla y asignrsela al puntero
Se utiliza el operador de desreferencia para acceder al valor almacenado en la direccin de memoria
Punteros en Objective-C
int fibonacci[10] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34};
for (int i=0; i<10; i++) {
NSLog(@"%d, ", fibonacci[i]);
}
// variable normal
int anio = 1984;
// puntero que apunta a un entero
int *punteroDeAnio;
// obtener la direccin de memoria de la variable
punteroDeAnio = &anio;
// desreferenciar la direccin de memoria
// para obtener el valor
NSLog(@"%d", *punteroDeAnio);
// asignar un nuevo valor a la direccin de memoria
*punteroDeAnio = 1985;
// corroborar que se modific el valor
NSLog(@"%d", anio);
www.nebaris.com 35
Es muy importante entender que en Objective-C, todos los objetos se referencian como objetos. Por ejemplo, si
creamos un string (NSString) debemos hacerlo como un puntero y no como una variable normal:
En C, existe el operador nulo, que no apunta a ningn lado. Se utiliza la macro NULL para referenciarlo y sirve para
indicar variables vacas.
Cuando se trata de punteros nulos, Objective-C define su propio macro: nil. En general, se utiliza nil con
variables que almacenen objetos de Objective-C y NULL cuando trabajamos con punteros de C.
Ms all de la declaracin de variables, la sintaxis de Objective-C est diseada para trabajar con punteros. Por lo
tanto, luego de definir un puntero, podemos olvidarnos del hecho que es un puntero y trabajar como si fuera una
variable normal.
NSString *dia = @"Lunes";
// objeto de Objective-C
NSString *texto;
// funciona
texto = NULL;
// pero es preferible utilizar esta forma
texto = nil;
// puntero de C
int *punteroEntero;
// no funciona
punteroEntero = nil;
// funciona
punteroEntero = NULL;
www.nebaris.com 36
Sintaxis bsica
Las funciones en C estn compuestas de cuatro partes:
valor de retorno
nombre
parmetros
bloque de cdigo asociado
Veamos un ejemplo de una funcin llamada sumar que toma dos enteros como parmetro y devuelve la suma de
los mismos.
Vemos que primero creamos la funcin dentro de nuestro archivo main.m y luego, en la funcin main, hacemos
una llamada hacia dicha funcin para obtener su resultado.
En las funciones se pueden utilizar punteros tanto para los parmetros, como para los datos que devuelve, con lo
cual podemos integrar las funciones a Objective-C ya que todos los objetos son representados como punteros.
Declaracin e implementacin
Las funciones deben ser definidas antes de poder ser usadas. Si la anterior funcin sumar la hubiramos definido
debajo de la funcin main, el compilador nos habra advertido con un error.
Esto puede ser un problema a la hora de organizar aplicaciones grandes. A pesar de ello, C nos permite separar
la declaracin de una funcin, de su implementacin.
La declaracin de una funcin le dice al compilador cmo es la firma de la funcin. Provee los tipos de datos de
los parmetros y argumentos, con lo cual el compilador sabe cmo trabajar con ella.
La implementacin posee el bloque de cdigo de la funcin.
La definicin y la implementacin, juntas, forman la definicin de la funcin.
Veamos cmo queda el anterior ejemplo separando la declaracin de la implementacin:
#import <Foundation/Foundation.h>
int sumar(int nro1, int nro2)
{
return nro1 + nro2;
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
int resultado = sumar(3, 5);
NSLog(@"El resultado es %d", resultado);
}
return 0;
}
#import <Foundation/Foundation.h>
www.nebaris.com 37
El resultado es totalmente el mismo, pero ahora podemos tener la funcin main definida al principio.
Static
La palabra reservada static nos permite alterar la disponibilidad de una funcin o variable.
Funciones static
Por defecto, todas las funciones tienen un mbito global, lo que significa que en cuanto las definimos en un archivo
son accesibles desde cualquier lado. El especificar static nos permite limitar el mbito de la funcin al archivo
actual, lo cual es til para crear funciones privadas y evitar conflictos de nombres.
Vamos a modificar el anterior ejemplo, para hacer que la funcin sumar sea static; con esto, no vamos a poder
llamarla desde otro archivo.
int sumar(int, int);
int main(int argc, const char * argv[])
{
@autoreleasepool {
int resultado = sumar(3, 5);
NSLog(@"El resultado es %d", resultado);
}
return 0;
}
int sumar(int nro1, int nro2)
{
return nro1 + nro2;
}
#import <Foundation/Foundation.h>
static int sumar(int, int);
int main(int argc, const char * argv[])
{
@autoreleasepool {
int resultado = sumar(3, 5);
NSLog(@"El resultado es %d", resultado);
}
return 0;
}
static int sumar(int nro1, int nro2)
{
www.nebaris.com 38
Algo muy importante, es que hay que agregar la palabra static tanto en la declaracin como en la implementacin.
Variables static
Las variables declaradas dentro de una funcin son reiniciadas cada vez que se llama a dicha fucin. Si nosotros
indicamos que una variable es static, la funcin recordar el valor de la misma a travs de las invocaciones.
En este ejemplo, creamos una variable static y le asignamos el valor inicial. Luego indicamos el incremento y
mostramos en la consola que el valor permanece con las llamadas.
La palabra static en las variables no afecta el mbito de las variables y las variables locales slo pueden
accederse desde dentro de la funcin.
return nro1 + nro2;
}
#import <Foundation/Foundation.h>
void mensaje();
int main(int argc, const char * argv[])
{
@autoreleasepool {
mensaje(); // 1
mensaje(); // 2
mensaje(); // 3
mensaje(); // 4
}
return 0;
}
void mensaje()
{
static int veces = 0;
veces += 1;
NSLog(@"Esta funcin se llam %d veces", veces);
}
www.nebaris.com 39
Creando clases
Es muy recomendable entender la orientacin a objetos antes de seguir con este artculo. En caso que tengas
dudas en este enlace encontrars respuestas.
Objective-C es similar a C++ en que separa la interface de la clase de la implementacin de la misma. La interface
declara las propiedades y mtodos pblicos y la implementacin define el cdigo que poseen las propiedades y
mtodos.
En este ejemplo vamos a crear una clase llamada Auto cuya interface reside en el archivo Auto.h (h es por header
o cabecera) y la implementacin en el archivo Auto.m. La cabecera es utilizada por otras clases cuando necesitan
interactuar con la clase y la implementacin es utilizada slo por el compilador.
Xcode provee una forma simple de crear clases, para ello vamos a File > New > File, seleccionamos la categora
"iOS - Cocoa Touch" y elegimos "Objective-C class".
Indicamos el nombre de nuestra clase y dejamos "NSObject" como la clase padre. La clase NSObject es la clase
padre de casi todas las clases en Objective-C.
www.nebaris.com 40
Luego verificamos que nuestro proyecto est seleccionado y apretamos el botn "Create".
www.nebaris.com 41
Con esto podremos ver que los archivos ahora estn incluidos en nuestro proyecto. Adems, si hacemos un click
en el nombre del proyecto y vamos a la pestaa "Build Phases", en la seccin "Compile Sources" veremos que el
archivo "Auto.m" ahora aparece.
Si abrimos el archivo Auto.h veremos el siguiente cdigo
#import <Foundation/Foundation.h>
@interface Auto : NSObject
www.nebaris.com 42
Mientras que en el archivo Auto.m encontraremos el siguiente cdigo
Getters y Setters
Supongamos que queremos agregar una variable llamada modelo, para ello, en el archivo Auto.h haramos lo
siguiente:
Con eso, la clase Auto posee una variable privada, la cual no puede accederse desde el exterior, por lo que
tenemos que crear mtodos pblicos que nos permitan acceder desde afuera a dicho dato. Estos tipos de mtodos
reciben el nombre de "getters y setters". Los mtodos setter se utilizan para dar un valor a las variables privadas y
por norma llevan la palabra "set" como prefijo. Los mtodos getter nos permiten leer variables privadas de la clase.
No se les antepone la palabra "get".
Entonces modificamos nuestra clase:
@end
#import "Auto.h"
@implementation Auto
@end
#import <Foundation/Foundation.h>
@interface Auto : NSObject
{
// los miembros privados de la clase van entre llaves
NSString *modelo;
}
@end
// Auto.h
#import <Foundation/Foundation.h>
@interface Auto : NSObject
{
NSString *modelo;
}
// el guin indica que el mtodo es de instancia
-(NSString *) modelo;
-(void) setModelo:(NSString *)nombreModelo;
@end
// Auto.m
www.nebaris.com 43
Instanciar un objeto
Slo nos falta probar el ejemplo, creando un objeto de nuestra clase y usando los mtodos creados.
Lo primero a tener en cuenta es que en nuestro archivo "main.m" tenemos que importar la cabecera de nuestra
clase Auto, ya que sino no podremos usarla.
Para poder instanciar un objeto tenemos que utilizar la forma alloc/init, que consta de dos pasos:
1. Se reserva memoria para el objeto llamando al mtodo alloc
2. Se inicializa el objeto para que est listo
En Objective-C, todos los objetos deben ser almacenados como punteros, por lo cual utilizamos el asterisco al
momento de darle nombre a nuestro objeto.
Al momento de llamar al setter lo hacemos utilizando los corchetes, separando el objeto del mtodo con un
espacio. Los argumentos se pasan precedidos por los dos puntos.
Si ya programaste en J ava, C#, etc; la lnea:
#import "Auto.h"
@implementation Auto
-(NSString *) modelo
{
return modelo;
}
-(void) setModelo:(NSString *)nombreModelo
{
modelo = nombreModelo;
}
@end
// main.m
#import <Foundation/Foundation.h>
#import "Auto.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Auto *miAuto = [[Auto alloc] init];
[miAuto setModelo:@"Clio"];
NSLog(@"El modelo de mi auto es: %@", miAuto.modelo);
}
return 0;
}
www.nebaris.com 44
Se traducira a:
Constructor
En otros lenguajes, los constructores son definidos como una forma especial de mtodo, los cuales se ejecutan
automticamente al crear un objeto, y se utiliza para inicializar los valores del mismo.
Como vimos antes, la creacin de objetos en Objective-C es un proceso de dos pasos, primero se reserva
memoria y luego se llama al mtodo llamado initializer, que es una especie de equivalente al constructor (pero
en realidad es un mtodo comn).
Creamos un mtodo llamado init que devuelve una referencia al objeto mismo. Lo primero que hacemos es
asignar el valor de self (que es la instancia del objeto) al valor de su clase padre (en este caso NSObject), con lo
cual dejamos que el padre pueda inicializar sus variables, antes de que las usemos. Si algo llega a salir mal, el
valor de self ser nil.
Luego le damos un valor a la variable y retornamos self, con lo cual el objeto estar listo para usarse.
[miAuto setModelo:@"Clio"];
miAuto.setModelo("Clio");
// Auto.m
#import "Auto.h"
@implementation Auto
- (id)init
{
self = [super init];
if (self) {
modelo = @"Clio";
}
return self;
}
@end
www.nebaris.com 45
Mtodos y variables de clase
Los mtodos de clase lucen igual que los de instancia, slo que en lugar de llevar un menos "-" como prefijo, se
les antepone un ms "+". Por ejemplo:
Tcnicamente no existen las variables de clase, pero podemos emularlas declarando la variable como static
antes de definir la implementacin:
La llamada [modelo copy] crea una copia del parmetro, en lugar de asignar el valor directamente.
Los mtodos de clase utilizan tambin los corchetes, pero hay que recordar que deben llamarse directamente en la
clase; no pueden ser llamados desde una instancia de la misma.
Propiedades
En un programa orientado a objetos, bien diseado, no debe ser posible acceder a los atributos internos de una
clase directamente; sino que se debe hacer a travs de los mtodos de acceso "getter" y "setter".
El objetivo de las propiedades es facilitar el acceso a los atributos de una clase, generando automticamente los
mtodos de acceso.
Las propiedades se utilizan de la siguiente forma:
// Auto.h
+(void) setModeloPorDefecto:(NSString *)modelo;
// Auto.m
+(void) setModeloPorDefecto:(NSString *)modelo {
...
}
// Auto.m
#import "Auto.h"
static NSString * _modeloDefecto;
@implementation Auto
+(void) setModeloPorDefecto:(NSString *)modelo {
_modeloDefecto = [modelo copy];
}
@end
[Auto setModeloPorDefecto:@"Logan"];
// Auto.h
#import <Foundation/Foundation.h>
@interface Auto : NSObject
@property NSString* modelo;
www.nebaris.com 46
Con esto, Xcode (desde la versin 4.5) nos crear:
una variable de instancia llamada _modelo
El mtodo getter modelo
El mtodo setter setModelo
De esta forma, no tenemos que crear nosotros mismos los mtodos de acceso.
Luego podemos utilizarlos de la siguiente forma:
Modificar el nombre de un mtodo de acceso
Si no nos gusta la forma en que Xcode da nombre a los mtodos de acceso, podemos modificarlos con los
atributos getter= y setter=. Por ejemplo, podemos modificar el getter por obtenerModelo:
Ahora los mtodos de acceso se llaman: setModelo y obtenerModelo. La propiedad se sigue llamando modelo y es la
que se debe utilizar al usar el operador punto.
@end
// Auto.m
#import "Auto.h"
@implementation Auto
@end
// main.m
#import <Foundation/Foundation.h>
#import "Auto.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Auto *miAuto = [[Auto alloc] init];
[miAuto setModelo:@"Renault"];
NSLog(@"El modelo de mi auto es: %@", miAuto.modelo);
}
return 0;
}
// Auto.h
#import <Foundation/Foundation.h>
@interface Auto : NSObject
@property (getter = obtenerModelo) NSString* modelo;
@end
www.nebaris.com 47
Propiedad de slo lectura
Es posible agregar el atributo readonly a la creacin de una propiedad para evitar que se le asigne un valor desde
afuera. Con eso no se crear el mtodo setter y se prohibir el uso del operador punto.
Primero indicamos en la propiedad que debe ser de slo lectura:
Luego utilizamos un constructor para darle un valor inicial a la variable (recordar que la propiedad nos crea la
variable _modelo).
// main.m
#import <Foundation/Foundation.h>
#import "Auto.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Auto *miAuto = [[Auto alloc] init];
[miAuto setModelo:@"Renault"];
NSLog(@"El modelo de mi auto es: %@", [miAuto obtenerModelo]);
}
return 0;
}
// Auto.h
#import <Foundation/Foundation.h>
@interface Auto : NSObject
@property (getter = obtenerModelo, readonly) NSString* modelo;
@end
// Auto.m
#import "Auto.h"
@implementation Auto
-(id)init
{
self = [super init];
if (self) {
_modelo = @"Logan";
}
return self;
}
@end
www.nebaris.com 48
Finalmente podemos utilizarla y no podremos asignarle un valor.
// main.m
#import <Foundation/Foundation.h>
#import "Auto.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Auto *miAuto = [[Auto alloc] init];
NSLog(@"El modelo de mi auto es: %@", [miAuto obtenerModelo]);
}
return 0;
}
www.nebaris.com 49
Introduccin a PhoneGap
PhoneGap es una plataforma de cdigo abierto, que permite desarrollar aplicaciones mviles multiplataformas con
HTML, J avaScript y CSS. Para poder interactuar con el hardware del equipo, PhoneGap nos provee una API
escrita en J avaScript, la cual har de interfaz para acceder a la cmara, el GPS, el acelermetro, etc.
Hoy vamos a realizar una aplicacin "Hola mundo" en PhoneGap, para empezar a utilizar esta plataforma.
Introduccin
PhoneGap nos permite reusar las habilidades que ya tenemos como desarrolladores web, para que la experiencia
de uso tenga una curva de aprendizaje ms corta y el desarrollo sea realmente rpido.
La forma ms simple de pensar en PhoneGap, es en un contenedor web que se ejecuta al 100% de ancho y alto,
con una interfaz J avaScript que nos permite acceder a las caractersticas del sistema operativo. Creamos la
interfaz utilizando HTML, CSS y J avaScript y usamos el contenedor PhoneGap para hacer deploy a diferentes
ecosistemas y dispositivos. Una vez hecho el deploy, la aplicacin PhoneGap es un archivo binario distribuible a
travs de los markets (iTunes, Google Play, App Market, Amazon Market, etc.).
En una aplicacin PhoneGap podemos utilizar frameworks de UI como jQuery UI, Kendo UI, Sencha, Bootstrap,
Skeleton, etc., como as tambin utilizar themes CSS para copiar el estilo de aplicaciones iOS, Android o
BlackBerry. Si no utilizamos ningn estilo CSS, los elementos de la interfaz grfica sern por defecto los que use
el navegador.
Para la mayora de las aplicaciones realizadas con PhoneGap, slo es necesario un editor de textos. PhoneGap se
puede integrar a varios entornos de desarrollo (Eclipse, Visual Studio, XCode, etc.) de forma muy simple, pero
como en general se desarrollan aplicaciones que son en realidad web, no es necesario nada especial.
Arquitectura
La arquitectura de una aplicacin PhoneGap es similar a la de una aplicacin web. La diferencia es que los
archivos HTML se encuentran de manera local, en vez de en un servidor remoto. Como PhoneGap est basado en
un navegador, se pueden cargar mltiples pginas, sin embargo, al cargar y descargar pginas se pueden perder
datos almacenados en memoria a travs de J avaScript.
Arquitectura de una sola pgina
En esta forma de arquitectura existe un solo archivo HTML que dinmicamente se actualiza basado en el envo de
datos o por la interaccin con el usuario. Toda la lgica del lado del cliente se realiza con cdigo J avaScript, y se
pueden pedir datos y actualizar la vista sin tener que recargar la pgina actual. Usar este tipo de arquitectura
permite mantener datos en memoria.
Las aplicaciones PhoneGap pueden utilizar cualquier framework J avaScript de arquitectura (Angular, Ember,
Backbone, Mustache, etc).
Markets
PhoneGap permite hacer deploy de las aplicaciones como si se trataran de aplicaciones nativas. Podemos
compilar las aplicaciones por nosotros mismos para cada plataforma, o podemos utilizar PhoneGap Build.
PhoneGap Build es un servicio web que nos permite compilar nuestra aplicacin, para obtener el archivo binario
necesario para publicarla en el market (App Store, Google Play, etc.).
www.nebaris.com 50
Creando la aplicacin
Vamos a hacer una aplicacin simple que muestre el logo de Nebaris, diga "Hola mundo" y tenga un enlace a la
pgina de Nebaris. Vamos a utilizar Bootstrap, para demostrar que podemos agregar un framework CSS al cdigo
de nuestra aplicacin.
Empezamos con el cdigo HTML:
Podemos ver que estamos agregando el archivo CSS y J avaScript de Bootstrap, as como tambin una hoja de
estilos propia y finalmente un script de PhoneGap (este archivo no hay que descargarlo, al compilar a travs de
Build se incluye).
Utilizamos la grilla de Bootstrap para disear el layout y tambin indicamos que la imagen debe ser responsiva,
con lo cual en dispositivos pequeos el logo de Nebaris se va a achicar.
Este documento lo tenemos que guardar como index.html, para que la compilacin no produzca problemas.
Codificamos nuestra hoja de estilos:
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Hola mundo</title>
<link rel="stylesheet" href="bootstrap.min.css">
<link rel="stylesheet" href="style.css">
<script charset="utf-8" src="bootstrap.min.js" type="text/javascript"></script>
<script charset="utf-8" src="phonegap-2.9.0.js" type="text/javascript"></script>
</head>
<body>
<div class="row text-center">
<div class="col-md-12 container">
<img src="logo.jpg" alt="logo" class="img-responsive">
</div>
</div>
<div class="row text-center">
<div class="col-md-12 container">
<h1>Hola mundo</h1>
<h2><a href="http://www.nebaris.com">www.nebaris.com</a></h2>
</div>
</div>
</body>
</html>
body {
background-color: #222933;
}
img {
border: white 10px solid;
margin: 0 auto;
}
h1 {
www.nebaris.com 51
Ahora que ya tenemos nuestro ejemplo codificado, tenemos que incluir todos los archivos en un ZIP.
Para poder compilar nuestra aplicacin, vamos a usar el servicio PhoneGap Build. Para eso, vamos a la siguiente
pgina: build.phonegap.com
Para registrarnos tenemos dos opciones: una gratis (1 aplicacin privada) y una de pago (hasta 25 aplicaciones
privadas). Una vez que nos registramos, vamos a poder empezar a subir nuestros programas. Podemos elegir si
es una aplicacin open-source o privada y desde dnde queremos subir el fuente (un repositorio Github o un zip).
color: white;
}
.row {
margin-top: 15px;
}
a {
color: #84be74;
}
a:hover {
color: #84be74;
}
www.nebaris.com 52
Subimos nuestro archivo zip y luego indicamos los datos de nuestra aplicacin.
Apretamos el botn "Ready to build" y esperamos a que finalice la compilacin.
Podemos ver que la compilacin para iOS gener un error (est en rojo), eso es porque hacen falta algunas cosas
para poder hacer la compilacin para iOS, les recomiendo este artculo que explica como obtenerlas.
www.nebaris.com 53
Si tenemos un dispositivo que no sea iOS, podemos probar nuestra aplicacin escaneando el cdigo QR,
descargando la aplicacin con el navegador integrado y finalmente instalando la aplicacin en nuestro dispositivo.
www.nebaris.com 54

También podría gustarte