Académique Documents
Professionnel Documents
Culture Documents
Table of Contents
1. Ionic
2. Sobre Ionic
i. Que es Ionic, y donde encaja?
ii. Por que fue construido Ionic?
iii. Desarrollando aplicaciones hbridas con Ionic
iv. Empecemos a desarrollar!
3. Instalacin
i. Intro
ii. Sobre las distintas plataformas
iii. Instalando Ionic
iv. Creando un proyecto
v. Agregando las diferentes plataformas
vi. A Testear
vii. Lo que viene
4. Empezando nuestra app
i. Intro
ii. Inicializando nuestra app
iii. Testeando nuestra app
5. Testeando nuestra app
i. Intro
ii. Testeo en un browser
iii. Testeando en el simulador
iv. Testeo en navegadores mviles
v. Testeando como una app nativa
6. Construyendo nuestra app
i. Intro
ii. Creando tareas
iii. Agregando proyectos
7. Publicando nuestra app
i. Intro
ii. Publicando aplicaciones Android
iii. Google Play Store
iv. Actualizando nuestra aplicacin
ioinic
El libro de Ionic
Bienvenidos al libro de Ionic, donde vamos a recorrer el proceso de instalacin de Ionic y todas sus dependencias , la
creacin de un proyecto nuevo, el diseo y la construccin de la interfaz de usuario, aadiendo la lgica, pruebas,
instalacin en el dispositivo, y la publicacin en los diferentes stores.
Ionic
ioinic
Sobre Ionic
Que es Ionic, y donde encaja?
Por que fue construido Ionic?
Desarrollando aplicaciones hbridas con Ionic
Empecemos a desarrollar!
Sobre Ionic
ioinic
ioinic
ioinic
ioinic
Empecemos a desarrollar!
Ahora que hemos entendido que es ionic y por que existe, estamos listo para empezar a crear nuestra primera aplicacin
con este increble framework. En el siguiente capitulo vamos a instalar todo lo necesario y vamos a empezar a desarrollar
con ionic.
Empecemos a desarrollar!
ioinic
Instalacin
Intro
Sobre las distintas plataformas
Instalando Ionic
Creando un proyecto
Agregando las diferentes plataformas
A Testear
Lo que viene
Instalacin
ioinic
Intro
En este capitulo, vamos a ir a travs del proceso de descarga de ionic y de la instalacin de todas sus dependencias.
Intro
10
ioinic
Si estamos utilizando windows no hace falta que escribamos "sudo". Dependiendo de la plataforma en la que deseamos
desarrollar, necesitaremos instalar herramientas especificas. Afortunadamente, necesitaremos realizar estos pasos solo
una vez.
En linux
Si estamos corriendo Ubuntu 64-bits, va a ser necesario que instalemos las librerias de 32-bits por que Android corre solo
en 32-bits hasta el momento.
$ sudo apt-get install ia32-libs
Si estamos en Ubuntu 13.04 o mayor, las ia32-libs han sido removidas del repositorio. Alternativamente podemos
instalar los siguientes paquetes:
$ sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Java JDK
Instalemos la ultima versin del Java JDK(No solo el JRE).
Despus, creemos una variable de entorno que se llame JAVA_HOME y que apunte al directorio raz donde el Java JDK fue
instalado. Por lo tanto, si instalamos el JDK en C:\Program Files\Java\jdk7 , setearemos JAVA_HOME a ese path. Despus
de eso, agreguemos el directorio bin del JDK al path. Seguramente sea %JAVA_HOME%\bin o el path completo C:\Program
Sobre las distintas plataformas
11
ioinic
Files\Java\jdk7\bin .
Apache Ant
Para instalar Ant, descarguemos el siguiente zip desde aqu, lo descomprimimos, y moveremos el primer directorio en el
zip al lugar donde queramos, despus de esto tenemos que agregar este directorio a la variable de entorno PATH. Por
ejemplo, si movimos el directorio de Ant al c:/ , nosotros vamos a querer agregar el mismo a la variable de entorno
PATH(C:\apache-ant-1.9.2\bin) .
Android SDK
Instalar el Android SDK es tambin necesario. El SDK te provee de una API de libreras, y herramientas de desarrollo para
construir, testear y depurar aplicaciones android.
Cordova requiere que setiemos la variable de entorno ANDROID_HOME. La misma deber apunta hacia el directorio
[ANDROID_SDK_DIR]\android-sdk , por ejemplo c:\android\android-sdk.
Luego, deberemos incluir en la variable PATH el directorio tools y platform-tools. Por lo tanto, en ANDROID_HOME , tendremos
%ANDROID_HOME%\tools y %ANDROID_HOME%\platform-tools .
12
ioinic
Instalando Ionic
Ionic viene con una CLI que sirve para crear, compilar, y empaquetar Ionic apps.
Para instalar Ionic correremos el siguiente comando:
$ sudo npm install -g ionic
Instalando Ionic
13
ioinic
Creando un proyecto
Ahora necesitamos crear un proyecto Cordova en el directorio que queramos, para hacerlo necesitamos ejecutar el
siguiente comando:
$ ionic start todo blank
Este comando creara un directorio llamado "todo" en donde ejecutamos el comando anterior. Luego, entraremos al
directorio creado y veremos la estructura resultante. El comando anterior deber crear una estructura similar a esta:
$ cd todo && ls
bower.json // dependencias de bower
config.xml // configuracin de cordova
gulpfile.js // tareas de gulp
hooks
ionic.project // configuracin de ionic
package.json // dependencias de nodejs
platforms // compilaciones de iOS/Android estarn en este dir
plugins // Plugins de cordova y ionic
scss // cdigo scss, que compilara a css y lo guardara en www/css/
www // la aplicacin propiamente dicha(codigo javascript, css, html, imagenes, etc)
Creando un proyecto
14
ioinic
Si aparecen errores al ejecutar estos comandos, asegrate de haber seguido los pasos anteriores.
Android en OS X
Si aparece este error: [Error: ERROR : Make sure JAVA_HOME is set, as well as paths to your JDK and JRE for java.]
Probemos correr este comando antes de agregar la plataforma Android:
$ export JAVA_HOME=$(/usr/libexec/java_home)
15
ioinic
A Testear
Para asegurarnos de que el proyecto funciona, probemos compilar y correr el proyecto(para ios deberemos correr los
siguientes comandos, pero si estamos en android solo reemplazaremos ios por android en el comando):
A Testear
16
ioinic
Por supuesto, podemos probar nuestra app directo en un dispositivo Android real, y es la manera recomendada para
desarrollar en Android debido a la lentitud del emulador. Para hacer eso, debemos ejecutar "run" en vez de "emulate" y
asegurarnos de tener nuestro dispositivo Android conectado a nuestra computadora.
A Testear
17
ioinic
Lo que viene
Ahora estamos listo para empezar con el desarrollo de nuestra aplicacin, que es lo que vamos a empezar en el prximo
capitulo.
Lo que viene
18
ioinic
19
ioinic
Intro
Ahora que tenemos instalado todo lo necesario, y que tenemos creado un proyecto Cordova, empecemos a construir una
aplicacin real!.
El "todo" es una app muy comn cuando empezamos con un framework nuevo, en este tutorial vamos a recorrer el
proceso del desarrollo.
Debido a que una ionic app es bsicamente una pagina web, necesitamos tener un index.html que es lo primero que se
va a cargar cuando inicie nuestra aplicacin. Empecemos creando www/index.html y agregando el siguiente contenido:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Todo</title>
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<script src="lib/ionic/js/ionic.bundle.js"></script>
<!-- Needed for Cordova/PhoneGap (will be a 404 during development) -->
<script src="cordova.js"></script>
</head>
<body>
</body>
</html>
En el cdigo anterior, estamos incluyendo los css de ionic, y los js(tanto el core de ionic, como el paquete
ionic.bundle.js ). Ionic viene con ngAnimate , y ngSanitize incluidos por defecto, pero para poder utilizar otros mdulos
Intro
20
ioinic
Para crear side menus en Ionic, haremos uso de la directiva <ion-side-menus> . El cdigo para crear este tipo de mens es
sencillo. Agreguemos en el index.html , dentro del tag <body> el siguiente cdigo:
<body>
<ion-side-menus>
<ion-side-menu-content>
</ion-side-menu-content>
<ion-side-menu side="left">
</ion-side-menu>
</ion-side-menus>
</body>
En el cdigo de arriba, nosotros hemos aadido la directiva <ion-side-menus> , que se encarga de manejar el evento de
arrastrar y tambin nos mostrara el side menu. Dentro de la misma nosotros tenemos la directiva llamada <ion-side-menucontent> que es el contenedor principal de nuestra app, y otra directiva llamada <ion-side-menu side="left"> que es un
Intro
21
ioinic
Esta es la manera de crear una aplicacin en angularjs, entre corchetes le estamos diciendo que queremos incluir el
modulo de ionic, el mismo incluye todo el core de ionic, como as tambin el cdigo que va a interpretar las directivas que
vimos hasta ahora.
Ahora, volvamos al index.html , y justo despus de <script src="cordova.js"></script> agreguemos la siguiente linea:
<script src="js/app.js"></script> Con esta linea incluimos el cdigo recin creado.
Para poder correr la app angularjs que recin creamos tenemos que agregar un atributo al tag <body> , que tendra que
quedar as:
<body ng-app="todo">
Todava no vamos a poder ver nada si ejecutamos nuestra app, para eso tenemos que agregar algo de contenido a la app.
Agregemos el header para el side menu, y tambin para el contenedor central.
Actualicemos el body para que se vea as:
<body ng-app="todo">
<ion-side-menus>
<!-- Center content -->
<ion-side-menu-content>
<ion-header-bar class="bar-dark">
<h1 class="title">Todo</h1>
</ion-header-bar>
<ion-content>
</ion-content>
</ion-side-menu-content>
<!-- Left menu -->
<ion-side-menu side="left">
<ion-header-bar class="bar-dark">
<h1 class="title">Projects</h1>
</ion-header-bar>
</ion-side-menu>
</ion-side-menus>
</body>
22
ioinic
23
ioinic
24
ioinic
Intro
Ahora que tenemos algo de contenido para ver en nuestra aplicacin, vamos a hablar acerca del proceso de testeo y
desarrollo. Hay 4 maneras de testear nuestra aplicacin mientras estamos en el proceso de desarrollo: en un browser,
mediante el emulador, en el browser de un dispositivo mvil, o como una app nativa en nuestro telfono.
Intro
25
ioinic
Testeo en un browser
Testear nuestra app en una computadora es tan simple como correr siguiente comando en directorio base de nuestro
proyecto
$ ionic serve
Este comando va a iniciar un servidor con live-reload para tu proyecto. Cuando hagamos cualquier cambio en un html, css,
o javascript el browser va a recargar la app automticamente.
Arrastra desde el centro de la pantalla hacia la derecha para que aparezca el side menu.
Testeo en un browser
26
ioinic
Testeando en el simulador
Nosotros podemos testear directo en el simulador. Para testear nuestra app en ios usaremos los siguientes comandos:
Para testear en android cambia ios por android en los comandos de arriba.
Testeando en el simulador
27
ioinic
28
ioinic
Si esto no funciona, tenemos que asegurarnos de que tenemos activado el debug por USB en nuestro dispositivo.
29
ioinic
30
ioinic
Intro
Ahora que sabemos todo lo que hay que saber sobre app testing en ionic, y que tenemos ionic instalado en nuestro
sistema, llego la hora de empezar a codear.
Este es el mockup que sera nuestra gua:
Podemos ver que tanto el contenedor central como el side menu tiene listas. Las listas en ionic son un elemento UI muy
poderoso, y vienen con muchas caractersticas diferentes comnmente vistas en aplicaciones nativas. Afortunadamente,
usar listas en ionic es una tarea muy simple.
Desde que estamos usando angularjs, vamos a hacer uso de la directiva ng-repeat para crear un tem por cada tarea en
un proyecto dado:
No entendes angularjs?
No te hagas problema, estos son 2 de lo muchos recursos que hay en la web para aprender angularjs:
egghead.io
Thinkster.io
Intro
31
ioinic
Pero esto todava no hace nada, por que todava no tenemos ninguna tarea o cdigo que haga algo en nuestra app.
Para llevar a cabo esto, necesitamos crear un controlador en angularjs y agregarlo a la pagina. Vamos a necesitar
solo un controlador para esta app, y lo vamos a llamar TodoCtrl. Y lo vamos a agregar como un atributo del tag
<body> :
Despus, tenemos de definir este controlador en el archivo app.js , y podemos agregar algunas tareas para testing:
angular.module('todo', ['ionic'])
.controller('TodoCtrl', function($scope) {
$scope.tasks = [
{ title: 'Collect coins' },
{ title: 'Eat mushrooms' },
{ title: 'Get high enough to grab the flag' },
{ title: 'Find the Princess' }
];
});
Ahora corramos la app, y veremos una lista con tareas muy importantes!
Intro
32
ioinic
Intro
33
ioinic
Creando tareas
Excelente, ahora tenemos datos de prueba para las tareas, pero como hacemos para crear nuevas?, necesitamos alguna
manera de hacer eso, vamos a aadir una ventana modal, que nos permitir agregar una tarea nueva usando un pequeo
formulario. Agreguemos en el index.html despus del cierre de la directiva </ion-side-menu> dentro del <body> el
siguiente cdigo:
Hay un montn de informacin en el cdigo de arriba. En primer lugar, estamos definiendo un template de angular usando
<script id="new-task.html" type="text/ng-template"> . Lo bueno de los templates en angularjs es que los podemos cargar
desde cualquier lado: localmente o remota. La URL del template es su id, y si el template es definido a nivel local, este va
a ser buscado de manera local. Templates son una excelente manera de separar layouts y estructurar nuestras vistas, as
que los vamos a usar mucho.
A continuacin, establecimos un header con un botn para cerrar el modal, como as tambin establecimos una rea de
contenido. Con respecto al formulario, nosotros estamos llamando a la funcion createTask(task) al enviar el formulario. La
tarea que estamos pasando como parmetro a createTask es el objeto que almacena los valores del formulario.
Con el fin de activar el modal, necesitamos agregar un botn a la barra de navegacin en nuestro contenedor principal,
que quedara como sigue:
Creando tareas
34
ioinic
angular.module('todo', ['ionic'])
.controller('TodoCtrl', function($scope, $ionicModal) {
// No need for testing data anymore
$scope.tasks = [];
// Create and load the Modal
$ionicModal.fromTemplateUrl('new-task.html', function(modal) {
$scope.taskModal = modal;
}, {
scope: $scope,
animation: 'slide-in-up'
});
// Called when the form is submitted
$scope.createTask = function(task) {
$scope.tasks.push({
title: task.title
});
$scope.taskModal.hide();
task.title = "";
};
// Open our new task modal
$scope.newTask = function() {
$scope.taskModal.show();
};
// Close the new task modal
$scope.closeNewTask = function() {
$scope.taskModal.hide();
};
});
Ahora ejecutemos el cdigo e intentemos agregar una tarea. Deber deslizarse desde abajo hacia arriba una ventana
modal, y despus de enviar el form deber aparecer la tarea nueva en la lista.
Creando tareas
35
ioinic
Agregando proyectos
Ahora necesitamos agregar las funcionalidades de seleccionar y agregar proyectos. Para realizar esto, necesitamos
agregar bastante cdigo similar al que utilizamos para creacin y seleccin de tareas. Ahora vamos a agregar una lista
para mostrar nuestros proyectos y un botn para crear proyectos nuevos. Tambin vamos a abstraer el modelo del
proyecto dentro de un servicio de angularjs, este servicio se va a encargar de guardar y devolvernos nuestros proyectos
desde el local storage.
Vamos a agregar la funcionalidad que nos va a permitir que cuando seleccionemos un proyecto aparezca como
seleccionado.
As debe quedar el cdigo para el contenedor central:
Este cdigo nos permite ver en el side menu la lista de proyectos, tambin nos permite crear nuevos proyectos a travs del
boton que agregamos, como as tambin que el proyecto seleccionado figure como resaltado.
Para agregar, guardar, y cargar los proyectos, tenemos que agregar un poco de cdigo en el controlador. As deber
quedar el archivo app.js :
Agregando proyectos
36
ioinic
angular.module('todo', ['ionic'])
/**
* The Projects factory handles saving and loading projects
* from local storage, and also lets us save and load the
* last active project index.
*/
.factory('Projects', function() {
return {
all: function() {
var projectString = window.localStorage['projects'];
if(projectString) {
return angular.fromJson(projectString);
}
return [];
},
save: function(projects) {
window.localStorage['projects'] = angular.toJson(projects);
},
newProject: function(projectTitle) {
// Add a new project
return {
title: projectTitle,
tasks: []
};
},
getLastActiveIndex: function() {
return parseInt(window.localStorage['lastActiveProject']) || 0;
},
setLastActiveIndex: function(index) {
window.localStorage['lastActiveProject'] = index;
}
}
})
.controller('TodoCtrl', function($scope, $timeout, $ionicModal, Projects, $ionicSideMenuDelegate) {
// A utility function for creating a new project
// with the given projectTitle
var createProject = function(projectTitle) {
var newProject = Projects.newProject(projectTitle);
$scope.projects.push(newProject);
Projects.save($scope.projects);
$scope.selectProject(newProject, $scope.projects.length-1);
}
Agregando proyectos
37
ioinic
return;
}
$scope.activeProject.tasks.push({
title: task.title
});
$scope.taskModal.hide();
// Inefficient, but save all the projects
Projects.save($scope.projects);
task.title = "";
};
$scope.newTask = function() {
$scope.taskModal.show();
};
$scope.closeNewTask = function() {
$scope.taskModal.hide();
}
$scope.toggleProjects = function() {
$ionicSideMenuDelegate.toggleLeft();
};
Si ejecutamos nuestro cdigo, veremos que hemos logrado una app bastante pulida. y funcional.
Agregando proyectos
38
ioinic
39
ioinic
Intro
Ahora que tenemos un app funcional, estamos listos para lanzarla al mundo. Sabiendo que el equipo de Ionic ya ha subido
esta aplicacin "todo" al app store, seguramente quieras seguir este capitulo con un app que hayas hecho por tu cuenta.
En principio, necesitamos compilar una versin de lanzamiento de nuestra app, dirigida a cada una de las plataformas en
las que queremos que nuestra app funcione. Antes de lanzar nuestra app, tenemos que hacer ciertos ajustes en los
plugins que utilizamos durante el desarrollo, pero que no queremos que estn presentes en nuestra versin de produccin.
Por ejemplo, seguramente no queramos que nuestra aplicacin utilice el plugin de consola de depuracin, as que
debemos removerlo antes de generar la versin de lanzamiento:
$ cordova plugin rm cordova-plugin-console
Intro
40
ioinic
Este comando generar una versin de lanzamiento basada en la configuracin del archivo config.xml . Nuestra
aplicaciones tomara los valores por defecto de ese archivo, pero si necesitamos personalizar el compilado de nuestra
aplicacin, necesitaremos editar el archivo para adaptarse a nuestras preferencias. Para mas informacin del archivo
config.xml hace click aqui.
A continuacion, vamos a encontrar nuestra APK sin firmar en el directorio platforms/android/build/outputs/apk . En nuestro
ejemplo, la el APK se encontraba en platforms/android/build/outputs/apk/HelloWorld-release-unsigned.apk . Ahora,
necesitamos firmar nuestra APK, y ejecutar un comando que la optimiza y la prepara para subir al app store. Si ya hemos
firmado nuestra APK podemos pasar por alto estos pasos.
Generemos nuestra clave privada utilizando el comando keytool que viene con el JDK. Si no tenemos este comando,
volvamos al capitulo de instalacion:
$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
Al ejecutar este comando se nos va pedir que creemos un password para el keystore . Despus de terminar de responder
todas las preguntas que nos haga el comando este creara un archivo que se llamara my-release-key.keystore (en el mismo
directorio que se ejecuto el comando).
Importante: Guardemos este archivo en algn lugar seguro, si perdemos este archivo no podremos enviar actualizaciones
de nuestra aplicacin.
Para firmar nuestra aplicacin necesitamos ejecutar un comando que viene incluido en el JDK, se llama jarsigner :
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore HelloWorld-releaseunsigned.apk alias_name
Esto firmara la app. Por ultimo, necesitamos ejecutar el comando zipalign que optimiza nuestra APK. Es comando se
encuentra en /path/to/Android/sdk/build-tools/VERSION/zipalign . Por ejemplo, en OS X con android studio instalado,
zipalign se encuentra en ~/Library/Android/sdk/build-tools/VERSION/zipalign :
Finalmente, tenemos nuestra versin de lanzamiento llamada HelloWorld.apk y estamos listo para subir nuestra aplicacin
al Google Play Store.
41
ioinic
A continuacin, hagamos click en el botn para editar el listado(vamos a subir el APK luego). Tenemos que llenar todos los
campos, as es como tendra que quedar:
42
ioinic
Cuando estemos listos, vamos a subir nuestra APK para publicar la versin de lanzamiento.
43
ioinic
44