Escolar Documentos
Profissional Documentos
Cultura Documentos
aplicaciones
mviles II - iOS
CIBERTEC
ndice
Presentacin
Red de contenidos
5
7
Unidad de Aprendizaje 1
:
:
:
:
:
:
9
11
11
12
15
15
16
32
32
35
37
39
41
Unidad de Aprendizaje 2
DESARROLLO DE PANTALLAS
2.1 Tema 3 : Navegacin bsica
2.1.1 : Manejo de StoryBoards
2.1.2 : Creacin de flujo de pantallas por ViewControllers
2.1.3 : Ciclo de vida del UIViewController (ViewDidLoad,
ViewDidAppear, ViewWillAppear, etc.)
2.1.4 : Manejo de pantallas por UINavigationController
2.1.5 : Manejo de pantallas por UITabBarController
45
47
47
50
53
57
61
66
66
2.3 Tema 5
2.3.1
2.3.2
2.3.3
2.3.4
90
90
90
92
93
:
:
:
:
:
Constrains
Fundamentos sobre Constrains
Creacin de Constrains por StoryBoard
Creacin de Constrains por cdigo
Manejo de Constrains en tiempo de ejecucin
68
70
75
79
86
Unidad de Aprendizaje 3
ACCESO A DATOS
3.1 Tema 6 : Implementacin de un API y Servicios Rest
3.1.1 : Creacin de un Rest Api Manager
3.1.2 : Consumo de servicios Rest
CIBERTEC
97
99
99
101
:
:
:
:
Almacenamiento de Datos
Implementacin de UserDefaults
Implementacin de Base de datos en Core Data
Implementacin del KeyChain para datos protegidos
101
105
105
105
112
CIBERTEC
Presentacin
En la actualidad, el uso de los dispositivos mviles se ha vuelto una tendencia entre
las personas. Estos forman parte de las actividades rutinarias y de empleabilidad. La
tecnologa ha avanzado al nivel de crear una dependencia, tanto laboral como social
por parte de las personas y sus comunidades.
En el pasado, la globalizacin de la informacin permiti a muchas personas tener
acceso a la informacin desde todas partes del mundo, siempre que tuviesen un punto
de acceso al internet. Ahora, en la actualidad, los puntos de acceso al internet estn
al alcance de nuestras manos, los dispositivos mviles poseen la gran capacidad de
mantenernos conectados a la informacin global en todo momento y en todo lugar.
Las aplicaciones mviles permiten a los usuarios dar una interfaz grfica y de mayor
comodidad a esta informacin. Las empresas buscan crear aplicaciones que integren
las actividades diarias de las personas, que ofrezcan soluciones a sus necesidades y
que posean una experiencia de usuario distintiva de las dems.
Apple es una empresa que dedic gran parte de su tiempo en desarrollar un
dispositivo que permita al usuario no solo poseer una distincin econmica y social
respecto a otros usuario, tambin buscaba otorgarles una experiencia de usuario
cmoda y que les facilite la implementacin de aplicaciones en sus vidas cotidianas.
El desarrollo de aplicaciones mviles para usuario de iOS trata de buscar complacer al
usuario dndole la informacin que requiere de forma rpida y agradable.
CIBERTEC
CIBERTEC
Red de contenidos
Unidad 1
Introduccin
a iOS y Swift
CIBERTEC
Unidad 2
Desarrollo de
Pantallas
Unidad 3
Acceso a
Datos
CIBERTEC
UNIDAD
1
INTRODUCCIN A iOS Y SWIFT
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno podr reconocer el flujo de vida de una
aplicacin mvil iOS, tambin podr crear ambientes de desarrollo en XCode y
dar uso a las herramientas CocoaPods y Playground.
TEMARIO
1.1 Tema 1
1.1.1
1.1.2
1.1.3
1.1.4
1.1.5
:
:
:
:
:
:
1.2 Tema 2
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
:
:
:
:
:
:
ACTIVIDADES PROPUESTAS
CIBERTEC
10
CIBERTEC
1.1
11
1.1.1 Qu es el iOS?
iOS es un sistema operativo mvil creado por la multinacional Apple Inc.
Originalmente, desarrollado para el iPhone y, posteriormente, utilizado en dispositivos,
como el iPod touch y el iPad. Es exclusivo de la marca Apple y no permite la
instalacin en terceros.
<Wikipedia>
CIBERTEC
12
desde la barra de estado hacia abajo. Al hacer toque en una notificacin, el sistema
abrir la aplicacin.
Multitarea Opcional.
Permite el uso de varias aplicaciones en simultneo.
Antiguamente, estaba reservado nicamente para aplicaciones por defecto del
sistema, debido al consumo de la batera. Esto nicamente estaba permitido para
dispositivos de tercera generacin en adelante.
Game Center. Es la aplicacin que integra todos los juegos mviles del dispositivo,
permitiendo la integracin entre usuarios y dando facilidades a los desarrolladores,
como tablas de posicin y tablas de puntuacin. Esto permite, tambin, el uso de un
servidor para juegos entre varios jugadores y el guardado de la informacin de los
usuarios en la nube para poder acceder a ellos desde cualquier dispositivo Apple.
Tecnologas no admitidas. Las versiones anteriores a iOS 8 no permiten el uso de la
Plataforma Java y Adobe Flash por su gran inseguridad, y su gran consumo de
batera, medida muy criticada. Posteriormente, se permiti el uso de Adobe Flash
para dispositivos iOS 8 y posteriores.
CIBERTEC
13
La funcin main
Estados de ejecucin
CIBERTEC
14
CIBERTEC
15
CIBERTEC
16
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Program
ming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309
En este manual, podremos encontrar toda la informacin sobre la sintaxis a utilizar
para el cdigo en Swift.
CIBERTEC
17
Una vez que nos encontremos en la interfaz de inicio de sesin, escogemos la opcin
Create Apple ID. Despus de esto, aparecer un formulario donde debemos llenar
nuestros datos para crear la cuenta.
CIBERTEC
18
CIBERTEC
19
Una vez que hayamos validado el correo electrnico, nos redirigirn a la pantalla de
inicio de sesin, en donde podemos usar nuestro nuevo AppID y clave para ingresar.
CIBERTEC
20
CIBERTEC
21
Ahora, se nos presentarn los requisitos para poder unirnos al programa, como
desarrolladores independientes o como una organizacin (empresa). Procedemos a
presionar el botn Start Your Enrollment.
CIBERTEC
22
CIBERTEC
23
CIBERTEC
24
CIBERTEC
25
Ahora, nos aparecer un formulario que nos solicitar la informacin de nuestra tarjeta
de crdito y la informacin de facturacin. La informacin otorgada, en estos
formularios, es de carcter importante, porque debe ser totalmente verdica y privada.
Asimismo, si se desea hacer los pagos con una tarjeta ajena a la del desarrollador, se
recomienda hacer el pago con una tarjeta de crdito propia. En todo caso, si utilizara
la tarjeta de crdito de una persona ajena, se le solicitar que enve una carta notarial
firmada y con copia de algunos documentos para validar la compra. Este proceso
demora una semana extra de tiempo para la validacin de los datos.
Luego de ingresar los datos, presionamos Continue.
CIBERTEC
26
CIBERTEC
27
El correo de activacin llegar con un link para poder activar nuestra inscripcin al
programa de desarrolladores de Apple. Presionamos en este link.
CIBERTEC
28
Ahora, cada vez que ingresemos a nuestra cuenta de desarrolladores, podemos ver
que se ha activado una serie de secciones nuevas, que son las herramientas para
poder trabajar como desarrolladores de Apple. Estas herramientas nos permitirn
crear certificados para nuestras aplicaciones y, a su vez, entrar al iTunes Connect,
donde podemos administrar nuestras aplicaciones y subirlas al AppStore.
iTunes Connect
El iTunes Connect es el centro de administracin de nuestras aplicaciones. Desde
este, vamos a poder organizar nuestras aplicaciones para poder subirlas al AppStore.
Podemos definir un precio de venta y cobrar por ello, organizar un grupo de testing,
generar versionar nuestros despliegues, etc.
CIBERTEC
29
Para ello, lo primero es ingresar al iTunes Connect. Podemos hacerlo por medio de
nuestro Member Center en el portal de desarrolladores o a travs del siguiente enlace:
https://itunesconnect.apple.com.
Se nos pide iniciar sesin. Si no formamos parte del Equipo de Desarrollo de Apple,
no podremos ingresar.
La primera vez que ingresemos, se nos presentarn los trminos y condiciones del
servicio, el cual debemos leer antes de ingresar.
CIBERTEC
30
Una vez dentro, podemos ver las diferentes secciones donde se podrn administrar
para generar las diferentes funcionalidades del iTunes Connect. Para poder hacer un
correcto uso de la herramienta, se recomienda leer el manual del lugar, investigar y
hacer un uso correcto del mismo.
CIBERTEC
31
Resumen
1. iOS es el sistema operativo de Apple para dispositivos iPhone, iPad y Ipod touch.
2. Las aplicaciones de iOS poseen un flujo de vida que pasa por varios estados, tales
como Not Running, Inactive, Active, Background, Suspended.
3. La arquitectura de una aplicacin en iOS se basa en el diseo MVC: Modelo
Vista - Controlador.
4. Swift es un nuevo lenguaje de programacin utilizado para las aplicaciones de
Apple que busca implementar lo mejor de Objective-C y C sin las limitantes de
programar en C.
5. Para poder desarrollar para Apple, solo se necesita disponer de un AppleID; sin
embargo, para poder subir aplicaciones al AppStore, se necesita pertenecer al
programa de desarrolladores que s posee un costo anual.
6. El iTunes Connect es la herramienta que nos permitir subir nuestras aplicaciones
al AppStore y nos permitir administrarlas.
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhon
eOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_P
rogramming_Language
https://developer.apple.com
CIBERTEC
1.2
32
Conociendo el XCode
Luego de obtener el XCode del App Store, este se instalar de forma automtica en
las aplicaciones de su Mac OS. Procedemos a abrir la aplicacin. Para ello, nos
dirigimos al LauncPad en la parte inferior de nuestro OSX. Luego, escogemos del
grupo de aplicacin el XCode y la seleccionamos.
CIBERTEC
33
XCode nos presentar una interfaz donde podremos seleccionar un modelo de plantilla
para el tipo de aplicacin que deseamos realizar. Esto nos entregar un proyecto pre
configurado con las bases para nuestra aplicacin. Todo esto, posteriormente, puede
ser configurado manualmente si se desea realizar un ajuste.
Para fines acadmicos, seleccionamos Single View Application. Es la plantilla bsica
para realizar aplicaciones a dispositivos mviles.
CIBERTEC
34
Ahora, se nos presentar una interfaz para poner la informacin de nuestro proyecto.
En esta parte, debe destacarse que el bundle identifier es el string identificador nico
de la aplicacin. Este se utilizar en el App Store para poder diferenciar la aplicacin
de otras. Asimismo, se va a seleccionar el lenguaje de programacin que se utilizar y
el dispositivo al cual estar dirigida la aplicacin. Para las dems opciones, se debe
leer el manual del desarrollador para poder hacer modificaciones especficas para
cada proyecto.
Finalmente, nos solicitar que indiquemos en qu carpeta deseamos crear el proyecto
dentro de nuestra Mac OS. Hecho esto, ya disponemos de un proyecto listo para ser
trabajado.
CIBERTEC
35
CIBERTEC
36
Creacin de un PlayGround
Para la creacin de un PlayGround, al momento de abrir el XCode y ver la pantalla de
bienvenida, marcamos la opcin Get started with PlayGround, tambin podemos ir a
File / New / Playground en el mismo XCode.
CIBERTEC
37
Una vez que se haya terminado de crear el archivo, se nos mostrar el ambiente de
trabajo. En la zona principal, podemos observar que se importa por defecto una
librera para que podamos empezar a programar y una primera variable String como
parte del saludo. A la mano derecha, podemos observar una zona donde aparecer el
resultado en tiempo real de las frmulas y cdigos que desarrollemos. En la parte
inferior, podemos activar una consola para manejar variables y respuestas en tiempo
de ejecucin y, tambin, encontraremos nuestro Run button para poder hacer correr el
cdigo.
Para ms informacin sobre cmo utilizar el PlayGround y los alcances que puede uno
llegar a tener, se debe revisar la documentacin en la pgina de desarrolladores:
https://developer.apple.com/library/ios/recipes/Playground_Help/Chapters/AboutPlaygr
ounds.html#//apple_ref/doc/uid/TP40015166-CH28-SW1
CIBERTEC
38
CIBERTEC
39
Luego de ello, en la carpeta del proyecto, podemos observar el archivo Podfile, el cual
vendr a indicar al proyecto qu libreras deseamos utilizar.
CIBERTEC
40
Lo nico que falta es crear el WorkSpace. Para ello, nos dirigimos nuevamente al
Terminal. Por medio del Terminal, nos ubicamos en la carpeta que contiene el Podfile
y mandamos el comando pod update, el cual proceder a crear el WorkSpace.
CIBERTEC
41
Una vez que hemos ingresado al WorkSpace, lo principal que podemos notar, en la
parte inferior izquierda de la pantalla, es un segundo proyecto, el cual contendr a las
libreras Pod y se encargar de administrarlos por nosotros y volverlas accesibles a
todas partes de nuestro proyecto.
Ahora, con nuestro archivo Podfile configurado, procedemos a actualizarlo. Para ello,
nos dirigimos a nuestro Terminal y ubicndonos en la carpeta del proyecto donde est
el Podfile procedemos a mandar el comando pod update.
CIBERTEC
42
CIBERTEC
43
Resumen
1. XCode es el IDE de desarrollo de Apple y es gratuito en el AppStore de las OSX.
2. Playground es un ambiente de pruebas que permite programar sin necesidad de
un proyecto.
3. Cocoa Pods es una herramienta que nos permitir manejar libreras para nuestros
proyectos.
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
https://guides.cocoapods.org/using/getting-started.html
https://developer.apple.com/library/ios/recipes/Playground_Help/Chapters/Abou
tPlaygrounds
CIBERTEC
44
CIBERTEC
45
UNIDAD
2
DESARROLLO DE PANTALLAS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno podr crear un flujo de navegacin para su
aplicacin y dispondr de elementos como tablas y colecciones .
TEMARIO
2.1 Tema 3
2.1.1
2.1.2
2.1.3
:
:
:
:
Navegacin bsica
Manejo de StoryBoards
Creacin de flujo de pantallas por ViewControllers
Ciclo de vida del UIViewController (ViewDidLoad, ViewDidAppear,
ViewWillAppear, etc.)
2.1.4 : Manejo de pantallas por UINavigationController
2.1.5 : Manejo de pantallas por UITabBarController
:
:
:
:
:
Constrains
Fundamentos sobre Constrains
Creacin de Constrains por StoryBoard
Creacin de Constrains por cdigo
Manejo de Constrains en tiempo de ejecucin
ACTIVIDADES PROPUESTAS
CIBERTEC
46
CIBERTEC
2.1
47
NAVEGACIN BSICA
CIBERTEC
48
CIBERTEC
49
Una vez que hayamos desactivado esta opcin, se nos mostrar una interfaz donde se
nos indicar para qu tipo de dispositivo deseamos trabajar, iPhone o iPad.
Una vez que hayamos escogido una opcin (en este caso, escogeremos iPhone),
veremos cmo el ViewController, dentro de nuestro StoryBoard, se ver de forma
rectangular y vertical. Este cambio no solo se aplica al ViewController sino a todos los
ViewControllers dentro del StoryBoard, y debe hacerse por cada StoryBoard dentro del
proyecto. De esta forma, podemos disear StoryBoards para cada dispositivo si lo
deseamos y llamar a los ViewControllers por cdigo segn identifiquemos el
dispositivo mediante la programacin del cdigo. Debemos tomar en cuenta que esto
CIBERTEC
50
no limita que podamos crear la aplicacin para varios dispositivos, solo nos indica
cmo se ver dentro del IDE de desarrollo. Para poder realizar un correcto diseo, lo
ms recomendable es probar la aplicacin en todos los dispositivos en que se va a
utilizar y condicionar el diseo para cada pantalla. No es necesario tener todos los
dispositivos, ya que contamos con un emulador de todos los dispositivos en nuestro
entorno de desarrollo.
CIBERTEC
51
Una vez que tenemos nuestro View Controller, procedemos a crear otros
ViewControllers segn el diseo de nuestra aplicacin. Una vez hecho esto,
procedemos a crear el flujo de la aplicacin.
Primero, seleccionamos un
ViewController. Luego de ello, en la seccin de Utilitarios, seleccionamos la opcin
Connections, que es la que se encuentra a la derecha de las dems.
En esta ventana, encontramos los Triggered Segues. Estos se utilizaban hace tiempo
para indicar a dnde debe dirigirse una pantalla segn una accin determinada. Sin
embargo, esto se plante como una mala prctica, debido a que una ventana no debe
estar limitada por el StoryBoard para indicar el flujo de la aplicacin, ya que el
desarrollador debera controlar esto por cdigo. Buscamos la propiedad manual y la
enlazamos al ViewController al que debera seguir el flujo de la aplicacin.
Podemos, adicionalmente, enlazar el ViewController con ms de un ViewController,
pero esto no limita al desarrollador a solo utilizar estos enlaces. El desarrollador
puede llamar a cualquier ViewController que se encuentre en los StoryBoards segn lo
desee, adems puede crear manualmente ViewControllers por cdigo si as lo desea.
Una vez que se haya hecho el enlace nos indicar qu tipo de enlace deseamos. En
este caso, marcaremos la opcin push. Una vez hecho esto, podemos visualizar el
segue en pantalla.
CIBERTEC
52
Existen varios tipos de View Controllers en las herramientas del Cocoa. Varios de
ellos vienen con funciones ya realizadas por defecto para facilitarnos el trabajo; sin
embargo, estos no se vern en el Manual debido a que los objetivos del curso
requieren que uno pueda desarrollar sus propios View Controllers desde uno ms
bsico y as tener mayor control por cdigo.
Por ltimo, debemos indicar cul es el primer View Controller que se va a llamar. El
programa por defecto indica que el View Controller creado por defecto en el Main
StoryBoard sea el primero en llamarse. Esto lo indica poniendo una flecha a su lateral
izquierdo. Esta flecha indica el StoryBoard Entry Point, que viene a ser el primer
ViewController en mostrarse.
Esta flecha, que vemos en pantalla, podemos asignarla a cualquier View Controller
dentro de los StoryBoards. Esta indica el punto de ingreso al StoryBoard. Cuando
designemos cul StoryBoard es el que debe cargarse primero, el programa sabr cul
es el primer ViewController en mostrar. Para poder asignarla, podemos seleccionarla
y arrastrarla adentro del StoryBoard o a otro ViewController, o tambin podemos
seleccionar el ViewController que deseamos sea nuestro StoryBoard Entry Point. En
la seccin de Utilitarios, seleccionamos la cuarta opcin Attributes y buscamos la
opcin Is Initial View Controller, la marcamos y automticamente se va a desmarcar
de cualquier otro View Controller que tenga esta opcin activada. Luego de ello,
podemos ver que la flecha del StoryBoard Entry Point se ubica al lateral izquierdo de
nuestro View Controller indicando que ser el primero en mostrarse y donde empezar
toda nuestra aplicacin.
CIBERTEC
53
2.1.3
CIBERTEC
54
CIBERTEC
55
CIBERTEC
56
CIBERTEC
57
El uso adecuado de estas funciones del ciclo de vida es de suma importancia para
poder manejar la informacin de la aplicacin. Adicionalmente, existen ms funciones
del ciclo de vida. Para ello, habr que leer la documentacin en la pgina de
desarrolladores y saber cundo debemos utilizarlos.
Finalmente, nos queda nicamente asignar la Clase al ViewController de nuestro
StoryBoard. Para ello, seleccionamos el ViewController dentro de nuestro StoryBoard
y, en la tercera pestaa de la seccin de Utilitarios, Identity, en la opcin Clase,
ponemos el nombre de la Clase que hemos creado.
Una vez hecho esto, podemos ver que al ViewController se le asign la Clase en el
nombre que lo representa en el StoryBoard. Ahora, nuestro ViewController est
conectado a la Clase que hemos creado.
CIBERTEC
58
El Navigation Controller, al ser creado, viene por defecto con un UIViewController, que
posee un TableView, como su RootViewController. El RootViewController viene a ser
el primer ViewController que ser mostrado por el Navigation View. Si nuestro inters
es el de dar uso al ViewController que viene por defecto, lo conservamos; en caso
contrario, lo eliminamos y asignamos otro ViewController como el RootViewController.
Para poder asignarle al Navigation View un RootViewController, nos dirigimos a la
seccin de utilitarios y, en la pestaa de Connections, la que se encuentra ms a la
derecha, buscamos la opcin root view controller. Conectamos esta opcin
presionando la tecla Control y arrastrando la propiedad hasta el ViewController que
deseemos sea el nuevo RootViewController.
Es recomendable indicar que el NavigationViewController es el StoryBoard Entry Point.
De esta forma, podemos organizar las transiciones de pantalla de nuestra aplicacin
desde el inicio de la aplicacin.
CIBERTEC
59
Ahora, procedemos a presionar el botn Build y podemos ver que primero se cargar
una pantalla blanca que pertenece al Launch Screen seguida de la pantalla roja que
pertenece a nuestro DemoViewController. (Podemos utilizar un simulador o un
dispositivo).
CIBERTEC
60
La funcin primero define un String para el ttulo del NavigationBar. Luego de ello,
configura el botn izquierdo, el cual no ser utilizado; por ello, lo llenamos con un texto
vaco. Adems, al botn derecho, que s posee un texto, le configuramos el tamao, la
fuente y el color de texto. A ambos botones, les agregamos una funcin por medio de
un Targuet, de esta forma, al ser presionados, llamarn a las funciones respectivas
de cada uno.
Ahora, ponemos la funcin en el ViewDidLoad y veremos cmo se configura el
NavigationBar cuando damos Build al proyecto.
CIBERTEC
61
CIBERTEC
62
El TabBar se crea con 2 ViewControllers por defecto, los eliminamos. Luego de ello,
procedemos a indicar el TabBar como el nuevo StoryBoard Entry Point. Ahora,
cuando empieze la aplicacin, podemos ver primero el TabBar.
Retiramos el RootViewController del NavigationController y los segues de los 3
ViewControllers. Luego de ello, procedemos a insertar los 3 ViewControllers en el
TabBar. Para ello, en la seccin de Utilitarios, buscamos la pestaa ms a la derecha,
connections, y buscamos la propiedad view controllers. Presionando la tecla
Control, arrastramos esta propiedad a los 3 ViewControllers, esto los aadir al arreglo
de ViewControllers del TabBar. Recordemos que el orden en que son ingresados es
el mismo orden en que se mostrarn en la parte inferior del TabBar.
CIBERTEC
63
Ahora, debemos indicar qu ttulo y qu imagen deben llevar cada uno de los
ViewControllers en el TabBar.
Para ello, escogemos la opcin tem en los
ViewControllers.
CIBERTEC
64
CIBERTEC
65
Resumen
1. Los StoryBoards son los archivos que nos ayudarn a manejar el flujo de pantallas
y las herramientas que implementaremos en cada ViewController.
2. El ciclo de vida de un ViewController est definido por varias funciones que
disparan eventos en momentos cruciales del ViewController.
3. El Navigation Controller es una herramienta que nos facilita la transicin entre
pantallas de forma ordenada y presenta una barra superior donde podemos poner
tems personalizados.
4. El TabBar es una herramienta que nos facilita la transicin entre pantallas de forma
directa. Los tems inferiores son personalizables y no requiere de cdigo para su
implementacin.
5. Tanto el TabBar como el Navigation Controller, no son herramientas excluyentes.
Depende del desarrollador combinarlas de forma eficiente.
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
https://www.raywenderlich.com/113388/storyboards-tutorial-in-ios-9-part-1
https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptu
al/ViewControllerCatalog/Chapters/TabBarControllers.html
https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptu
al/ViewControllerCatalog/Chapters/NavigationControllers.html
CIBERTEC
2.2
66
Todas estas herramientas deben ser referenciadas en nuestra Script del View
Controller. Para ello, habilitamos el Asistant Editor, se encuentra encima de la seccin
de Utilitarios y tiene la imagen de dos circunferencias interseccionndose. Cuando lo
CIBERTEC
67
habilitamos, vemos que se abren dos ventanas. En una de ellas, ubicamos nuestro
StoryBoard y, en el otro, la Clase DemoViewController.
CIBERTEC
68
CIBERTEC
69
Lo ms importante es el manejo de las medidas del frame y del contenido. Para esto,
debemos recordar que, si deseamos que el Scroll funcione, el contenido debe ser
mayor al frame en alguna de las dimensiones, height o width. Para que el contenido
se vea completamente dentro del ScrollView, debemos calcular matemticamente la
totalidad de elementos y definir el tamao del contenido dependiendo de ello.
Para poder indicar todo esto, poseemos dos variables dentro del ScrollView: el frame y
el contentsize. El frame nos dar el tamao y la ubicacin de la herramienta, mientras
que el contentsize nos dar las medidas para el alto y ancho del contenido.
CIBERTEC
2.2.3 Configuracin
de
(UITableViewController)
70
tablas
con
celdas
dinmicas
Para poder crear una tabla, debemos, primero, tener un ViewController. Para ello,
usaremos nuestro DemoTableViewController.
Buscamos el TableView en las
herramientas del Cocoa y, luego de ello, procedemos a arrastrarlo al
DemoTableViewController. Hecho esto, agrandamos la tabla a la medida deseada; sin
embargo, notaremos que viene sin celdas. Para poder agregar una celda, debemos
buscar en las herramientas del Cocoa una llamada Table View Cell, la arrastramos y la
ponemos dentro de la Tabla.
CIBERTEC
71
CIBERTEC
72
Podemos crear la Clase de la misma forma que creamos otros Script, indicando que
herede de la Clase TableViewCell.
CIBERTEC
73
Ahora que tenemos la celda asociada a su Clase, debemos poder indicar, en la tabla,
qu informacin deseamos ponerle y cundo. Para ello, debemos indicarle a la tabla
dos atributos importantes: Delegate y DataSource. El Delegate indica qu Clase es la
encargada de manejar los eventos relacionados a la tabla; y el DataSource, qu
informacin debe ser presentada en la tabla.
Para poder asociar estos atributos a la Clase, seleccionamos el TableView. Nos
dirigimos a la seccin de Utilitarios y, en la pestaa de conecciones, podemos ver los
atributos Delegate y DataSource. Seleccionamos cada uno de los atributos y los
conectamos con el DemoTableViewController.
CIBERTEC
74
Ahora que hemos asociado la tabla, debemos preparar nuestro Script para que pueda
proporcionar la informacin necesaria a la tabla. Primero que nada, procedemos a
heredar las Clases necesarias: UITableViewDelegate y UITableViewDataSource.
Ambas Clases, poseen protocolos con una gran variedad de funciones que nos
permiten implementar diversas funcionalidades a nuestra tabla. Un protocolo es un
grupo de propiedades y mtodos que conforman una tarea particular para una
funcionalidad. Estos pueden ser adoptados por Clases, estructuras o enumeradores
para proveer implementaciones adicionales a los delegados de una Clase.
Para ms informacin sobre protocolos, podemos leer la teora en la pgina de
desarrolladores de Apple en el siguiente link:
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Program
ming_Language/Protocols.html
Ahora, podemos notar que aparece un error al heredar estas funciones. Para
solucionarlo, debemos cumplir con el protocolo necesario para la herencia. Es
necesario que llamemos a un grupo de funciones para cada caso.
UITableViewDataSource:
Existen 4 funciones bsicas que debemos configurar para presentar la tabla con los
datos mnimos.
numberOfRows: Esta funcin nos indica cuntas filas tendr cada seccin.
CIBERTEC
75
UITableViewDelegate
Existe una funcin que debemos manejar, es la que se usa cuando una persona
realiza un clic en una celda determinada.
Esta funcin nos permite realizar un bloque de cdigo cuando una de las celdas sea
presionada.
Existen muchas ms funciones para el DataSource y el Delegate. Para hacer uso de
ellas, debemos investigar sobre las mismas y darles el uso adecuado.
2.2.4 Configuracin
de
colecciones
(UICollectionViewController)
con
tems
dinmicos
CIBERTEC
76
CIBERTEC
CIBERTEC
77
78
Estas funciones son iguales a las del TableView, la nica diferencia es la llamada de la
celda a poner.
UICollectionViewDelegateFlowLayout
CIBERTEC
79
UICollectionViewDelegate
CIBERTEC
80
CIBERTEC
81
Ahora, tenemos un contenedor para el PageView (el view amarillo). Lo que debemos
hacer, ahora, es otorgar los StoryBoards a los respectivos ViewControllers y al
PageView. Luego de ello, debemos crear los Scripts respectivos para cada uno de
ellos y asociarlos.
CIBERTEC
82
CIBERTEC
83
Una vez hecho esto, creamos una variable que pueda contener nuestro
PageViewController. Luego de ello, llevamos la referencia del PageViewController del
StoryBoard por cdigo, le indicamos su DataSource, su Delegate, un tamao y una
posicin. Finalmente, lo introducimos al ViewContainer.
Ahora, es necesario heredar las dos Clases para el DataSource y el Delegate. Por
temas de orden, realizaremos esta parte de la herencia y protocolo en una extensin
de la Clase, en el mismo Script al final de la Clase MainViewController.
CIBERTEC
84
CIBERTEC
85
Estas funciones revisan del ViewController actual cul es su ndice, del cual habamos
guardado previamente la referencia en su Tag. Luego de ello, segn el ndice, indican
cul debera ser el siguiente ViewController o el anterior.
Para cumplir con el protocolo del DataSource, hacen falta dos funciones, las cuales
devolveremos con un valor de 0.
CIBERTEC
86
Finalmente, para poder ubicar el PageControl (los puntos inferiores que indican el
avance del PageView), podemos hacerlo por medio de los mtodo del DataSource o
preferible por medio de la creacin de un PageControl. Esto debe ser indicado
durante las horas de Clase por el profesor.
CIBERTEC
87
Para poder indicar el tamao del View, nos dirigimos a la opcin de atributos en la
seccin de Utilitarios. En estos, ubicamos la opcin size y la configuramos como
FreeForm.
Una vez hecho esto, podemos cambiar el tamao del CustomView a una medida ms
conveniente para trabajarlo. Para ello, vamos al Size Inspector y, en la opcin Width y
Height, indicamos las medidas convenientes.
CIBERTEC
88
CIBERTEC
89
Resumen
1. El UIScrollView nos permite mostrar informacin al usuario con una herramienta
que permite deslizar informacin ms all de los lmites de la pantalla.
2. Las tablas nos permiten mostrar al usuario informacin ordenada en forma, solo es
posible configurar la altura de la celda ms no las otras dimensiones.
3. Las colecciones nos permiten mostrar al usuario una serie de tems con un orden
definido por el desarrollador. Las dimensiones de los tems son configurables.
4. El PageView nos permite mostrar al usuario un grupo de ViewControllers al
usuario, los cuales podr deslizar uno tras otro sin abarcar necesariamente el total
de la pantalla.
5. Los CustomViews nos permiten configurar Views para luego ser llamados por
cdigo segn la conveniencia del desarrollador.
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewC
ontroller_Class/index.html
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPageV
iewControllerClassReferenceClassRef/index.html
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITable
View_Class/
https://developer.apple.com
CIBERTEC
2.3
90
CONSTRAINTS
El dispositivo rota.
El AutoLayout, tambin, se activa cuando uno realiza un cambio interno sobre los
ViewControllers. Estos cambios se activan cuando sucede uno de los siguientes
eventos:
CIBERTEC
91
Por otro lado, si deseamos crear un Constraint del View consigo mismo, debemos
arrastrar el View a s mismo presionando la tecla Control, mostrando otro panel que
permitir agregar otro grupo de Constraints.
Ahora que hemos agregado los Constraints en nuestros Views, podemos configurarlos
en el panel de Utilitarios. Seleccionamos el View respectivo, vamos a la seccin de
Utilitarios y, en el Size Inspecter, podemos encontrar los Constraints relacionados al
View seleccionado. Hacemos doble clic en el Constraint y abriremos una interfaz para
poder modificarlo.
CIBERTEC
92
De esta forma, podemos crear y configurar Constraints por medio del StoryBoard.
CIBERTEC
93
CIBERTEC
94
Si bien al tener nuestra referencia del Constraint nos permite cambiar el valor del
Constraint en cualquier momento, existe un momento en el ciclo de vida del
ViewController en que se deben reasignar los Constraints de ser necesario. La
funcin ViewDidLayoutSubviews se activa cada vez que se realiza un evento que
afecte al ViewController. Estos eventos fueron explicados con anterioridad. En esta
funcin, podemos reasignar los Constraints y configurarlos segn sea necesario.
CIBERTEC
95
Resumen
1. El AutoLayout es el sistema que se encarga de reasignar las medidas del View de
forma dinmica por medio de los Constraints.
2. Los Constraints pueden ser creados por medio del StoryBoard de formas
diferentes. Todas estas permiten que se relacione un View con su contenedor, con
otro View o consigo mismo.
3. Los Constraints pueden ser creados por medio de cdigo, ser referenciados a una
variable y de esta forma agregados a un View.
4. Los Constraints pueden ser modificados por cdigo en tiempo de ejecucin,
siempre que se tenga una referencia al Constraint en una variable.
5. El evento del ciclo de vida del ViewController, que es llamado cuando un
ViewController es afectado por eventos internos o externos, se llama
ViewDidLayoutSubviews y permite que se vuelvan a configurar los Constraints.
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
https://developer.apple.com/library/ios/documentation/UserExperience/Concept
ual/AutolayoutPG/
https://developer.apple.com
CIBERTEC
96
CIBERTEC
97
UNIDAD
3
ACCESO A DATOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno podr acceder a servicios REST, manejar archivos
JSON, almacenar informacin en el dispositivo y acceder a la informacin de forma
ordenada.
TEMARIO
3.1 Tema 6
3.1.1
3.1.2
3.1.3
:
:
:
:
3.2 Tema 7
3.2.1
3.2.2
3.2.3
3.2.4
:
:
:
:
:
Almacenamiento de Datos
Implementacin de UserDefaults
Implementacin de Base de datos en Core Data
Implementacin del KeyChain para datos protegidos
Consumo de datos guardados
ACTIVIDADES PROPUESTAS
CIBERTEC
98
CIBERTEC
99
CIBERTEC
100
Ahora que tenemos nuestro WorkSpace con el Pod de Alamofire, necesitamos crear
un Script que nos permita manejar las llamadas Rest. Creamos un archivo Swift con
nombre NetworkManager. En este, crearemos una Clase NetworkManager y, dentro
de ella, una funcin con la cual podremos hacer llamado a un servicio Rest.
CIBERTEC
101
En el ejemplo, vemos que la primera variable a enviar es la URL que concatena con la
URL base que tenemos registrada en la Clase esttica. Como parmetro, deberamos
enviar un Dictionary; sin embargo, esto lo hacemos solo si es necesario. Esta opcin
tambin acepta un nulo. Finalmente, el CompletionBlock est definido por una
respuesta manejada por dos variables: el boleano finished y el diccionario result.
En caso se haya logrado finalizar con xito el llamado al Api, entonces se llamar al
CompletionBlock y el valor del booleano finished determinar si se complet o no con
xito. De ser exitoso, vendr con valor true; en caso contrario, vendr con valor
false. Luego de ello, podemos procesar la informacin como mejor creamos
conveniente. Tomemos en cuenta que la informacin relevante, que nos devuelva el
servicio, se encuentra en el diccionario result, el cual procesaremos en nuestra
aplicacin.
A esta URL raz, debemos agregarle un comando de bsqueda. Para fines didcticos,
utilizaremos el siguiente comando:
CIBERTEC
102
La siguiente URL har un llamado al Api Rest y nos devolver las bsquedas en el
iTunes. Estas sern hechas en el store de Per con la palabra britney.
La respuesta nos traer un diccionario con 2 valores: uno es resultCount, que nos
indica la cantidad de resultados que se encontraron; y result, que viene a ser un
arreglo que contiene varios diccionarios, cada diccionario con la informacin de cada
cancin encontrada con dichos parmetros.
Ahora, analicemos a detalle los parmetros enviados por el servicio de iTunes.
CIBERTEC
103
CIBERTEC
104
Resumen
1. Alamofire es la librera Pod que nos ayudara a realizar el consumo de servicios
Rest.
2. La librera alamofire se encarga de encriptar y desencriptar la data enviada y nos la
otorga en formato JSON.
3. Es importante que se posea una funcin esttica que nos permita consumir los
servicios Rest desde cualquier parte de nuestra aplicacin.
4. Los servicios Rest, el JSON otorgado por la librera, se otorgara en formato
Dictionary, el cual debe ser procesado por el usuario para obtener la data y
presentarla.
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
https://github.com/Alamofire/Alamofire
https://www.raywenderlich.com/121540/alamofire-tutorial-getting-started
https://developer.apple.com
CIBERTEC
105
En este caso, vamos a guardar un String (dato a guardar) bajo la key the_key. El
dato puede ser cualquier otro, recordemos que este diccionario acepta cualquier tipo
de objeto. Es importante sincronizar la data luego de haber hecho algn cambio en el
diccionario del NSUserDefaults. Como se trata de una Clase esttica, podemos
acceder desde cualquier parte de nuestra aplicacin para guardar los datos que
necesitemos. A continuacin, se muestra un ejemplo de cmo obtener informacin del
NSUserDefault.
Ahora que hemos obtenido el dato del NSUserDefaults, es muy importante saber qu
tipo de dato estamos obteniendo, para poder castearlo adecuadamente y para que no
nos traiga problemas al implementarlo.
CIBERTEC
106
Hecho esto, podemos visualizar, en nuestro proyecto, un archivo que nos permitir la
creacin de tablas y relacin entre ellas. En este ejemplo, solo realizaremos la
creacin de una tabla simple y el almacenamiento de datos. Busquemos en nuestro
proyecto el archivo .xcdatamodeid.
CIBERTEC
107
Este archivo nos mostrar una interfaz para la creacin de una tabla. Presionamos la
opcin Add Entity y veremos cmo se agrega una entidad en la parte superior
derecha. Luego de ello, podremos editar el nombre de la entidad hacindole doble
clic.
CIBERTEC
108
CIBERTEC
109
Ahora que tenemos nuestros atributos creados, procedemos a crear un objeto que
maneje nuestra entidad por medio de cdigo. Para ello, en la barra de herramientas,
escogemos la opcin Editor / Create NSManageObject Subclass.
CIBERTEC
110
Una vez que hemos creado los Script, previamente escogiendo la entidad que
deseamos enlazar a los Scripts, podemos llamar la referencia a ellos por medio de la
Clase creada.
Ahora, debemos crear una Clase que nos permita acceder a la base de datos, guardar
datos y poder acceder a nuestros datos guardados. Creamos un archivo Swift, este lo
generamos desde a File / New / File. Importamos la librera MagicaRecord y creamos
la Clase DataBaseManager.
CIBERTEC
111
Esta Clase tiene su propia referencia esttica para poder ingresar a ella desde
cualquier parte de nuestro proyecto. Ahora, crearemos una funcin que nos permita
crear una entidad y agregarla a nuestra base de datos.
La funcin CreateEntity nos permite crear una nueva entidad. Esta se inicializa con
valores predeterminados y nos devuelve dicha entidad para utilizarla como
consideremos. Ahora, cuando creamos una entidad, esta se agrega a la base de
datos; sin embargo, para guardar los cambios realizados a la tabla, debemos crear
una funcin que nos permita guardar dichos cambios.
Esta funcin nos permite guardar los cambios realizados en la tabla de la base de
datos. Lo siguiente que deseamos es crear una funcin que nos devuelva las
entidades de la tabla.
Estas 3 funciones nos permiten obtener entidades de la base de datos, la primera nos
devuelve todas las entidades dentro de la tabla DemoTable; la segunda, la primera
entidad encontrada con un valor definido en un atributo; y la ltima, un arreglo de
entidades con un valor definido en un atributo.
Finalmente, necesitamos un par de funciones para eliminar entidades de la tabla,
CIBERTEC
112
Estas dos ltimas funciones nos permitirn eliminar entidades de la tabla, la primera
nos permite borrar una entidad mientras que la segunda borra todas las entidades de
la tabla. Todas estas funciones son accesibles desde cualquier parte del proyecto,
debido a que se encuentran en una referencia esttica, y depende del orden que
maneje el desarrollador para hacer buen uso de ellas.
Para la importacin de esta librera, debemos tomar en cuenta que la versin 3.0 es
funcional con Swift 2.2 y la versin 4.0 es funcional con Swift 3.0. Se debe tomar en
cuenta esto para hacer la exportacin adecuada.
CIBERTEC
113
Ahora, debemos recordar que los valores guardados en el KeyChain deben ser String,
Bool o NSData, y podemos utilizar estas funciones para administrar estos valores
guardados.
La primera funcin nos permite guardar un dato especfico bajo una llave en el
KeyChain. La segunda funcin nos permite obtener un dato especfico bajo una llave
tomando en cuenta que se conoce el tipo de dato para castearlo. Finalmente, la ltima
funcin borra todas las variables guardadas en el KeyChain. Utilizar estas funciones
adecuadamente permite el uso correcto de los datos del KeyChain.
CIBERTEC
114
Resumen
1. El NSUserDefaults es un sistema de guardado de datos de las aplicaciones,
generalmente usado para informacin de configuracin de la aplicacin.
2. Para el uso de la base de datos en Core Data, utilizamos la librera MagicalRecord
que nos facilitar el almacenar y obtener data de nuestras tablas.
3. El KeyChain es un sistema de guardado de datos protegidos en nuestro
dispositivo. Estos datos permanecen en el dispositivo aun despus de eliminar la
aplicacin; asimismo, utilizamos la librera KeyChainSwift para facilitar su
utilizacin.
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
https://github.com/magicalpanda/MagicalRecord
https://github.com/marketplacer/keychain-swift
https://developer.apple.com
CIBERTEC