Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de...

77
Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de Telecomunicación Aplicación de Detección de Presencia para iOS Autor: Francisco Ortiz Abril Tutor: Antonio José Estepa Alonso Departamento de Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2014

Transcript of Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de...

Page 1: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

!

Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de Telecomunicación

Aplicación de Detección de Presencia para iOS

Autor: Francisco Ortiz Abril Tutor: Antonio José Estepa Alonso

Departamento de Telemática Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2014

Page 2: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

!

!!

Page 3: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

!Trabajo Fin de Grado

Grado en Ingeniería de Tecnologías de Telecomunicación !!!!!

Aplicación de Detección de Presencia para iOS !

!Autor:

Francisco Ortiz Abril

!!

Tutor:

Antonio José Estepa Alonso

Profesor titular !!!

Departamento de Telemática Escuela Técnica Superior de Ingeniería

Universidad de Sevilla Sevilla, 2014

Page 4: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

!

Trabajo Fin de Grado: Aplicación de Detección de Presencia para iOS !!!!!

!!El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente: !!!Vocales:!

!!!!Secretario: !!!!

Acuerdan otorgarle la calificación de:

!

Sevilla, 2014 !!!

El Secretario del Tribunal

Autor: Francisco Ortiz Abril

Tutor: Antonio José Estepa Alonso

Page 5: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Sobre el autor

Francisco Ortiz AbrilGrado en Ingenierıa de Tecnologıas de Telecomunicacion

Universidad de [email protected]

Page 6: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

ResumenEste documento presenta una aplicacion movil para localizacion y deteccion de presencia enespacios interiores basado en la red wifi, por lo que la unica infraestructura necesaria es la

instalacion de esta. Esta tecnologıa puede ser util para tareas como deteccion de intrusos, casasinteligentes o proteccion de algunas fronteras. La aplicacion presenta la localizacion deldispositivo en funcion del punto de acceso al que se encuentre conectado, y produce

notificaciones si se produce una entrada o salida de la zona donde se quiere detectar lapresencia del terminal. Ha sido probada en un entorno real con las condiciones habituales del

mismo.

Palabra clave: Localizacion interiores, Wifi, deteccion presencia, aplicacion movil.

Page 7: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Indice

1. Introduccion 51.1. Motivacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3. Estructura del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2. Estado del arte 72.1. Evolucion de Desarrollo en Aplicaciones Moviles . . . . . . . . . . . . . . . . . . 72.2. Localizacion en interiores mediante redes Wifi . . . . . . . . . . . . . . . . . . . . 72.3. Detectores de presencia mediante redes Wifi . . . . . . . . . . . . . . . . . . . . . 92.4. Conclusiones sobre el Estado del Arte . . . . . . . . . . . . . . . . . . . . . . . . 10

3. Planificacion del proyecto 103.1. Diagrama de Gantt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4. Desarrollo de la aplicacion 124.1. Descripcion general del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4.1.1. Plataforma en la que se desarrolla: iOS . . . . . . . . . . . . . . . . . . . 124.1.2. Caracterısticas del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.1.3. Requisitos funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.1.4. Requisitos de interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2. Diseno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154.2.1. Diseno Modelo - Vista - Controlador . . . . . . . . . . . . . . . . . . . . . 15

4.3. Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.3.1. Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164.3.2. Controladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.3.3. Vistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.3.4. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5. Plan de pruebas 255.1. Pruebas para validacion de requisitos . . . . . . . . . . . . . . . . . . . . . . . . . 25

6. Conclusion y lıneas futuras 28

Apendices 31

A. Proceso de desarrollo 31A.1. Empezar a desarrollar en iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31A.2. Probar aplicaciones en dispositivo real . . . . . . . . . . . . . . . . . . . . . . . . 32A.3. Xcode. Programacion en Xcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

A.3.1. Objective-C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

B. Sendgrid 41B.1. Importacion de Sendgrid al proyecto Xcode . . . . . . . . . . . . . . . . . . . . . 41

C. Codigo de la aplicacion 42

Page 8: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Indice de figuras

1. Localizacion en interiores mediante AP . . . . . . . . . . . . . . . . . . . . . . . . 52. Evolucion de App Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73. Diagrama de Gantt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114. Arquitectura iOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125. Comunicacion entre los campos del diseno MVC . . . . . . . . . . . . . . . . . . 166. Vista de MainViewController. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207. Vista de SettingsViewController. . . . . . . . . . . . . . . . . . . . . . . . . . . . 218. Vista de RecordViewController. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229. Ejemplo de ajustes para monitorizacion . . . . . . . . . . . . . . . . . . . . . . . 2210. Ejemplo de vista principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2311. Historial de estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2312. Notificacion en primer plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2413. Notificacion en segundo plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2414. Notificacion de correo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2515. Registro Apple Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3116. Member Center . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3217. Descarga Xcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3218. Solicitar certificado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3319. Subida de certificado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3320. Descargar certificado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3421. Certificado de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3422. Device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3423. Anadir dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3524. Generacion de AppID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3525. Creacion de Provisioning Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . 3626. Descargar Provisioning Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3627. Ejemplo Provisioning Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3628. Xcode para MAC OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3729. Entorno de desarrollo Xcode 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 3730. Seleccionar dispositivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3831. Interfaz en Objective-C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3932. Implementacion en Objective-C . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3933. Podfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4134. Instalacion de Pods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Page 9: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

1. Introduccion

1.1. Motivacion

En la actualidad, los dispositivos moviles cada vez ofrecen mas funcionalidades debido alrapido aumento de potencia de sus procesadores. Esta evolucion permite que a traves de ellostengamos, entre otras cosas, una mayor posibilidad de comunicacion inalambrica.

Por otra parte, otro area en constante evolucion es el area de la domotica. En Espana,las primeras iniciativas en este campo se empiezan a llevar en el ano 1990, principalmente en elInstitut Cerda. A partir de ahı, se ha producido un avance hasta la actualidad, donde la domoticase esta implantando en el 60 por ciento de los hogares de nueva construccion. La funcionalidadexpuesta anteriormente de comunicacion inalambrica en los dispositivos moviles permite poderllevar a su campo el sector de la domotica, con posibilidades como control de la iluminacion enedificios, climatizacion o deteccion de presencia o movimiento.

Debido al auge de las dos areas expuestas, en este proyecto se desarrolla un sistema paradeteccion de presencia en una zona determinada a traves de una aplicacion movil, utilizandopara ello la infraestructura wifi existente en el edificio donde se aplique. El sistema estima laposicion del terminal en funcion del punto de acceso wifi (AP) al que se encuentre conectadodentro de un determinado espacio interior, estando asociado cada punto de acceso a una zonadeterminada del edificio. La aplicacion producira notificaciones en caso de entrada o salida dela zona donde se quiere detectar la presencia del dispositivo.

1.2. Objetivos

El objeto del presente trabajo es proporcionar a traves de una aplicacion movil una meto-dologıa para controlar la presencia de personas en una zona determinada. Para ello se utiliza lalocalizacion en interiores sobre redes wifi, y la persona a controlar debera estar provista de undispositivo movil.

Figura 1: Localizacion en interiores mediante AP

5

Page 10: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Como se puede ver en la figura anterior, el edificio a controlar debe estar provisto de variosAP, siendo el objetivo de la aplicacion monitorizar la presencia del terminal en la zona decobertura de uno de ellos. Para controlar la presencia de un dispositivo en un determinado areadel edificio se debe introducir el SSID[1] del AP que cubre dicha zona. El sistema es configurable,con posibilidad de modificar el SSID a controlar, la persona a la que notificar ante cambios yalgunos otros parametros de monitorizacion.

Una vez puesto en marcha el sistema, este obtiene periodicamente el SSID de la red a lacual el terminal esta conectado, comprobando si es el que se esta vigilando. En caso de queel terminal cambie de localizacion y entre o salga de esta red, la aplicacion notificara con unaalarma y con un email a la persona seleccionada. La aplicacion sera compatible con terminalesde sistema operativo iOS, desde la version iOS 7.1 en adelante.

1.3. Estructura del proyecto

Esta memoria esta estructurada en seis capıtulos, segun se indica a continuacion:

En el capıtulo 1 se presenta una introduccion del tema a tratar, ademas de definir losobjetivos y la estructura del proyecto.

En el capıtulo 2 se realiza una revision del Estado del Arte:

• En primer lugar se presenta la evolucion y la situacion actual de las aplicacionesmoviles.

• A continuacion se presentan algunas tecnicas utilizadas por detectores de presenciapara estimar la localizacion.

• Por ultimo, se describen de manera breve dos trabajos que realizan la deteccion depersonas mediante infraestructuras wifi.

En el capıtulo 3 se presenta la planificacion del proyecto, a traves de un diagrama de Gantt.

En el capıtulo 4 se describe el desarrollo de la aplicacion, el cual se divide en los siguientespuntos:

• Descripcion general del sistema: se describen las caracterısticas y los requisitos quedebe satisfacer la aplicacion.

• Diseno de la aplicacion.

• Implementacion de la aplicacion.

En el capıtulo 5 se enumeran las pruebas que se han realizado a la aplicacion para verificarsu funcionamiento y se presentan los resultados obtenidos.

En el capıtulo 6 se describiran las conclusiones y lıneas futuras de la aplicacion.

Por ultimo, se detalla la biografıa utilizada para el desarrollo del proyecto y se incorporanalgunos apendices.

6

Page 11: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

2. Estado del arte

En esta seccion se da a conocer el estado actual del tema de este proyecto, y algunas publi-caciones y trabajos previos relacionados con su objetivo, la deteccion de presencia. En primerlugar se presenta la evolucion que ha tenido durante los ultimos anos el desarrollo de aplicacionesmoviles. A continuacion se exponen algunas tecnicas utilizadas para conseguir la localizacion enespacios interiores mediante wifi, y en la seccion 2.3 se expone algun trabajo donde, al igual queen el presente proyecto, se utiliza este metodo para desarrollar un detector de presencia.

2.1. Evolucion de Desarrollo en Aplicaciones Moviles

Cuando el 23 de Noviembre de 1992 es presentado en sociedad el IBM Simon[2], consideradoel primer smartphone de la historia, muy pocos imaginaban la rapida evolucion[3] que tendrıanestos terminales en los anos siguientes a su aparicion. Aunque aparecen en 1992, en sus primerosanos de historia los smartphones no tienen gran popularizacion, unicamente son utilizados poraltos ejecutivos. El auge de estos dispositivos se produce cuando en el ano 2007 Apple empieza acomercializar su iPhone. La llegada del iPhone trae consigo la aparicion de la App Store, serviciodonde los desarrolladores publican aplicaciones y los usuarios las descargan. Durante los ultimosanos han ido en gran aumento tanto la aparicion de nuevos y mas potentes smartphones comoel desarrollo de nuevas aplicaciones. En la siguiente figura se muestran las cifras del aumento dela App Store.

Figura 2: Evolucion de App Store

2.2. Localizacion en interiores mediante redes Wifi

Para este trabajo se ha utilizado 802.11 en lugar de otras soluciones por razones como:

El alcance de los puntos de acceso no es elevado, permitiendo diferenciar entre zonassituadas a distancias, como maximo, de pocas decenas de metros.

No es necesario anadir ningun hardware adicional a los dispositivos ya existentes.

A continuacion se exponen algunas tecnicas utilizadas para localizacion que usan esta tec-nologıa:

7

Page 12: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

ToA (Time of Arrival - Tiempo de llegada)

Esta tecnica se basa en el hecho de que una senal electromagnetica tarda un tiempoen llegar de emisor a receptor. Hay una relacion lineal entre tiempo de propagacion ydistancia recorrida y, mediante tecnicas de triangulacion, se puede determinar la distanciaentre emisor y receptor.

Ademas, existe tambien la tecnica DToA (Di↵erential Time of Arrival), similar a ToApero hace uso de dos senales con diferentes velocidades de propagacion. La primera es unasenal de radio cuyo tiempo de propagacion se expresa como Tr ; y la segunda es una senalacustica que tiene un tiempo de propagacion Ts.

Como la distancia que tarda en llegar una senal de radio de un transmisor a un recep-tor situado a pocos metros es muy pequena, se puede asimilar a un tiempo 0. Por ello,observaremos cuanto tiempo mas ha tardado la recepcion de la senal acustica, y multi-plicandolo por la velocidad de propagacion de la senal acustica tendremos una medidabastante correcta de la distancia.

La ventaja del DToA respecto del ToA es que al medir primero el tiempo de forma relativafrente a la medida absoluta del ToA se puede disminuir el error porque se puede usar unaresolucion temporal mayor.

AoA (Angle of Arrival)

Las tecnicas AoA son comunes en el procesado de senales con arrays. En lugar del usode una sola antena se despliegan varias de forma que se pueda determinar el angulo dellegada de la senal. Despues de esto, la estimacion de la localizacion se basa en la triangu-lacion de estos angulos. Aunque es un sistema preciso, el inconveniente es que no se puedeimplementar sin hardware adicional, ya que los dispositivos 802.11 no incluyen arrays deantenas.

Localizacion basada en RSS (Received Signal Strength)

La tecnica RSS usa la atenuacion de la senal recibida para determinar la localizacion delterminal movil. En base a esta atenuacion se puede estimar la distancia que separa alterminal de cada punto de acceso. La relacion distancia/potencia de senal recibida no esmuy clara ya que hay factores como el multitrayecto, reflexiones, difracciones..., pero estasolucion es mas simple y mas economica que las anteriores.

Hay algunas tecnicas basadas en RSS:

• Triangulacion

Este metodo funciona de forma similar a los anteriores ToA y DToA, ya que asimilapotencia recibida a distancia. Sin embargo, al no ser precisa esta relacion en interiores,se obtienen unos metodos poco precisos.

El metodo se basa en la suposicion de que las antenas generan un patron de radiacionen forma de esfera con centro en la propia antena. Con cuatro de estas esferas, cadauna de ellas con un radio estimado en base a la potencia recibida de cada una de lascuatro antenas, se puede obtener la estimacion de la localizacion al intersecar las esfe-ras. Esto parte de la suposicion de que las antenas tengan patron de radiacion esferico,pero las reales no generan este patron. Por ello, se usan antenas omnidireccionales,que tienen un patron de radiacion en forma de donut.

Lo mas habitual es que los puntos de acceso tengan instaladas por defecto antenasomnidireccionales, ya que aunque no se consigue con estas un patron esferico, se

8

Page 13: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

puede controlar el plano donde se coloca el donut poniendo el mismo paralelo a lahorizontal. Por lo tanto, la aproximacion anterior es valida si el terminal movil sesitua en la misma planta que el AP o en sus proximidades.

La ventaja de este metodo es que es de aplicacion directa en cualquier entorno. Elinconveniente de este es que al tratar RSS como distancia no tienen en cuenta lasparedes, mobiliario, suelos, etc.

• Reconocimiento de patrones

La tecnica de reconocimiento de patrones intenta encajar el vector de potencias reci-bidas (RSS) de varios puntos de acceso, con una muestra de calibracion sin necesidadde usar algoritmos geometricos. Para usar este metodo, primero hay que obtener unradio mapa patron, que en este caso es una base de datos con los siguientes datos:

� 1) Posiciones en el edificio.

� 2) Niveles RSS de cada punto de acceso en esas posiciones.

La RSS se puede calcular de forma teorica, con el uso de un modelo de prediccion depotencias, o de forma practica, viendo en cada punto de interes la potencia recibida.

La ventaja de este metodo frente a la triangulacion es que los calculos son mas simples;el inconveniente es que no es posible obtener una localizacion que no se haya definidoanteriormente.

2.3. Detectores de presencia mediante redes Wifi

WLAN Device-free Passive (DfP)

Una de las tecnologıas que usa el protocolo 802.11 para la localizacion y la deteccionde presencia es WLAN Device-free Passive (DfP). DfP es una tecnologıa emergente quepermite la localizacion de entidades que no llevan consigo ningun dispositivo, usando lainfraestructura inalambrica ya instalada. Esta tecnologıa es util para aplicaciones comodeteccion de intrusos, hogares inteligentes y proteccion de las fronteras.

Algunos ejemplos de trabajos que usan esta tecnologıa son:

• Robust WLAN Device-free Passive Motion Detection

Este trabajo[4] presenta una tecnica precisa y de baja carga para la deteccion depresencia humana sobre la base de la deteccion de anomalıas estadısticas. Esta tecnicaconstruye perfiles de captura de caracterısticas de la fuerza de la senal cuando ningunser humano esta presente dentro de la zona de interes, utilizando despues estos perfilespara identificar cualquier anomalıa en la intensidad de la senal debido a la actividadde movimiento humano. Para adaptarse a los cambios del medio ambiente, los perfilesconstruidos son actualizados periodicamente por las lecturas de intensidad de senalcon baja probabilidad de anomalıas. Por tanto, el sistema trabaja en dos fases:

� Training : perıodo de tiempo de pocos minutos durante el que se construye elperfil de silencio, es decir, cuando ningun ser humano esta presente.

� Monitoring : el sistema recibe senales y las compara con el perfil de silencio paradetectar comportamientos anomalos, es decir, presencia humana.

• RASID

RASID[5], al igual que el trabajo anterior, combina diferentes modulos para la de-teccion de anomalıa estadıstica y funciona tambien mediante las dos mismas fases,mientras que, en este caso, la adaptacion a los cambios del medio ambiente paraproporcionar una deteccion mas precisa y robusta se hace mediante hardware wifi.

9

Page 14: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

2.4. Conclusiones sobre el Estado del Arte

Se ha explicado la evolucion del desarrollo de aplicaciones moviles y se han expuesto algunostrabajos que consiguen la deteccion de presencia mediante localizacion en interiores a traves dewifi, el mismo objetivo que se persigue en este proyecto.

Con respecto a los sistemas expuestos de deteccion de personas, la ventaja que tienen lospresentados con respecto al presente trabajo es que tienen una precision mayor en la localizacion.Ademas, la persona vigilada no necesita estar provista de ningun dispositivo. La principal mo-tivacion de este trabajo con respecto a ellos ha sido poder incorporar la deteccion de presenciaal emergente mercado de las aplicaciones moviles.

3. Planificacion del proyecto

En este apartado se expone el proceso llevado a cabo para la realizacion de este proyecto,mostrandose las diferentes fases a traves de un Diagrama de Gantt[6].

3.1. Diagrama de Gantt

A continuacion se muestra el Diagrama de Gantt del proyecto:

10

Page 15: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura

3:Diagram

adeGan

tt

11

Page 16: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

4. Desarrollo de la aplicacion

En el presente apartado se describe el proceso de desarrollo de la aplicacion. En primer lugarse presenta una descripcion general del sistema, con algunas caracterısticas y requisitos que estedebe cumplir. A continuacion, se detalla el diseno del sistema para cumplir estas caracterısticasy requisitos, y, por ultimo, se describe el proceso de implementacion de la aplicacion.

4.1. Descripcion general del sistema

4.1.1. Plataforma en la que se desarrolla: iOS

Para el desarrollo de las aplicaciones en iOS se usa Xcode como plataforma de desarrollo, ypara instalar estas aplicaciones en dispositivos iOS es necesario unirse al programa de desarrollode Apple. En esta seccion se presenta una introduccion al sistema operativo iOS, mientras queen los apendices A.2 y A.3 se entra en mas profundidad en Xcode y el programa de desarrollo.

El sistema operativo iOS[7] es el utilizado por Apple Inc. en sus plataformas moviles. iOSpuede ejecutar tanto aplicaciones nativas como aplicaciones web, siendo necesario para ejecutarlas primeras el uso del iOS SDK (iOS Software Development Kit).

iOS es el sistema operativo que actua de intermediario entre el hardware y las aplicaciones.En cuanto a su arquitectura, es un sistema estructurado en capas, abordando las capas inferioresservicios y tecnologıas fundamentales, mientras que las superiores se apoyan en las inferiores yofrecen tecnologıas y servicios mas sofisticados. Cuando se programa, se puede utilizar cadacapa aunque las capas superiores suelen ofrecer abstracciones de las capas inferiores y su uso sesimplifica.

Figura 4: Arquitectura iOS

Core OS: contiene las prestaciones de mas bajo nivel. Son usadas en su mayorıa por lascapas superiores. Para temas de seguridad o tratar con dispositivos hardware externos, esnecesario usar esta capa.

Core Services: contiene servicios de sistema fundamentales. Prestaciones de alto nivel.

Media Layer: aquı estan incluidas las tecnologıas de graficos, audio y vıdeo.

Cocoa Touch: contiene los frameworks fundamentales para el desarrollo de las aplicacio-nes.

La tecnologıa iOS esta empaquetada en Frameworks. Un Framework es un directorio quecontiene una librerıa compartida dinamica y los recursos (ficheros de cabecera, imagenes y apli-caciones de ayuda) que soportan esa biblioteca. Para usar los Frameworks hay que anadirlos al

12

Page 17: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

proyecto de aplicacion que se este desarrollando, teniendo ası acceso a las caracterısticas queeste soporta.

4.1.2. Caracterısticas del sistema

Infraestructura necesaria

Para el correcto funcionamiento de la aplicacion, sera necesario disponer de un punto deacceso o una radiobaliza que emita senal wifi con un determinado SSID. La presencia delterminal en el area de cobertura de este punto de acceso o radiobaliza sera el objeto demonitorizacion.

Restricciones

Con respecto a restricciones de hardware, el sistema unicamente funcionara en dispositivoscuyo sistema operativo sea iOS, desde iOS 7 en adelante.

Gestion de la informacion

Sera necesario almacenar los diferentes estados de conexion a la red por los que pasa elterminal, junto con el instante en que ha sido conectado/desconectado. A estos datos sedebe poder acceder desde la aplicacion.

4.1.3. Requisitos funcionales

Obtencion del estado de red del terminal

Sera necesario obtener el estado de conexion a red del telefono. Se consideraran dos estados,dividiendose uno de ellos en dos:

• Not using wifi : el terminal no esta conectado a ninguna red wifi.

• Wifi : en este estado puede haber dos situaciones:

� Not target SSID : el terminal esta conectado a una red wifi, pero no es la red enla cual se quiere detectar su presencia.

� Target SSID : el terminal esta conectado a la red wifi en la cual se esta monitori-zando su presencia.

En cualquier instante la aplicacion debe mostrar el estado actual del terminal.

El sistema debe ser configurable

El sistema debe proveer la posibilidad de configuracion de algunos parametros de busquedadel estado actual de red. Los parametros que se pueden configurar son:

• Nombre del SSID de la red en la que se quiere monitorizar la presencia del terminal.

• Frecuencia con la que se escanea el estado actual de conexion a red del terminal.

• Mensaje que aparece en la notificacion que se genera cuando el terminal sale de lazona de cobertura de la red que se esta monitorizando.

• Tiempo mınimo en un estado de conexion a la red para que se considere que el telefonoesta en ese estado. Este campo es necesario porque a veces el telefono puede perderla conectividad a la red durante un corto perıodo de tiempo y producirse oscilacionesentre los diferentes estados sin que haya modificado su localizacion. A menos que elterminal permanezca este tiempo en un estado no se considerara que se encuentra enel.

13

Page 18: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

• Direccion de correo donde se enviara un email notificando de cambios de estado en laaplicacion.

Notificaciones

Sera necesario programar notificaciones ante algunos cambios de estado. Debera saltar unanotificacion en alguno de los dos siguientes casos:

• El terminal entra en la zona donde se esta monitorizando su presencia: al entrar enla zona de cobertura de ese SSID se entrara en el estado Target SSID. En este casodebera saltar una notificacion mostrando el mensaje que se haya introducido en losajustes de la aplicacion para esta situacion, ya que este es un parametro configurable.

• El terminal sale de la zona donde se monitoriza su presencia: al salir de esta zonael terminal puede entrar en dos posibles estados: Not target SSID o Not using wifi.En cualquier caso, debera saltar una notificacion mostrando el mensaje que se hayaintroducido en los ajustes de la aplicacion para esta situacion.

Ademas de mostrar el mensaje de alerta, ambas notificaciones deben producir una vibracionen el terminal, una alerta sonora en caso de que la aplicacion no se encuentre en primerplano y se debe enviar un email al destinatario que se haya introducido en los ajustes. Comose ha expuesto anteriormente en esta seccion, para que el terminal entre en cualquier estadosera necesario llevar en el un tiempo superior al introducido en los ajustes.

Funcionamiento en background

La aplicacion debera funcionar del mismo modo tanto en primer plano como en background,sin modificar el habitual funcionamiento del terminal cuando este en el segundo de los casos.En cualquier caso, el terminal debe avisar cuando corresponda ante cambios de estado. Encaso de estar en segundo plano, debera saltar una notificacion sonora con un mensaje quenos permita ir a la aplicacion al pulsarlo.

Datos a mostrar

En cualquier instante el usuario debe poder acceder a los siguientes datos:

• Estado actual de conexion de red: la aplicacion debe indicar en que estado se encuentrael terminal. Como se ha expuesto anteriormente hay tres estados: Not using wifi, Nottarget SSID y Target SSID.

• Historial de estados: se debe mostrar una lista con los diferentes estados por los queha pasado el terminal, mostrando su SSID junto con la hora en la que se produjo elcambio.

• Ajustes introducidos: es necesario poder visualizar los parametros introducidos parala actual monitorizacion.

4.1.4. Requisitos de interfaces

La aplicacion constara de tres interfaces:

Interfaz principal: en esta interfaz se mostrara:

• Estado actual del terminal.

• Hora actual.

• Hora en que comenzo la monitorizacion.

14

Page 19: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Interfaz de ajustes: en esta interfaz se podran introducir los parametros configurablesexpuestos anteriormente.

Interfaz de historial de estados: esta interfaz debe mostrar el historial de estados porlos que ha pasado el telefono.

Desde la interfaz principal se debe poder acceder a cualquiera de las tres interfaces.

4.2. Diseno

En esta seccion se muestra el patron de diseno que se ha seguido para cumplir con losrequisitos especificados en la seccion anterior, el patron de diseno Modelo-Vista-Controlador.

4.2.1. Diseno Modelo - Vista - Controlador

El patron Modelo-Vista-Controlador (MVC) divide los objetos de nuestro programa en 3campos.

Modelo: es la representacion especıfica de la informacion, con la cual va a operar laaplicacion (datos de la aplicacion).

Vista: objeto subordinado del Controlador que es presentado al usuario de forma grafica(ventanas y otros elementos).

Controlador: responde a eventos, usualmente acciones del usuario, e invoca peticiones alModelo y a la Vista (logica de la interfaz de usuario).

La comunicacion entre estos tres campos no es absoluta. El Controlador puede comunicarsecon el Modelo sin ningun problema y puede obtener toda la informacion que necesite cuando lorequiera, ya que es el encargado de poner en pantalla el Modelo. Al igual que con el Modelo, elControlador puede comunicarse con la Vista, haciendolo a traves de Outlets, que son propiedadesespeciales que permiten conectar la Vista con el Controlador. La comunicacion entre el Modeloy la Vista no se deberıa contemplar, debido a que el Modelo es independiente de la interfaz deusuario.

La comunicacion entre Vista y Controlador se puede realizar de tres maneras:

La Vista comunica al Controlador lo que el usuario esta realizando en la interfaz. Esto serealiza a traves de acciones (actions). Un ejemplo de action serıa pulsar la pantalla.

El Controlador tiene el control de lo que pasa en la Vista a traves de delegados (delega-te). En este caso, la Vista no es la propietaria de los datos que esta mostrando, y en lamayorıa de los casos es el Controlador el que actua como origen de datos, no el Modelo.El Controlador interpreta y formatea la informacion del Modelo para proporcionarsela ala Vista.

La delegacion es un patron simple de la Programacion Orientada a Objetos (POO), en elque un objeto actua en nombre de, o en coordinacion con otro objeto. El objeto que delegalas funciones (en este caso la Vista) mantiene una referencia al otro objeto, el delegado (eneste caso el Controlador), y en el momento apropiado envıa un mensaje a dicha referencia.El mensaje informa al delegado de un evento que el objeto que delega esta a punto demanejar o ha manejado. La principal ventaja de la delegacion es que permite personalizarel comportamiento de varios objetos en un objeto central.

15

Page 20: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

El Controlador gestiona la informacion que quiera mostrar la vista a traves de una fuentede datos (data source). Este comportamiento es analogo al anterior.

La comunicacion entre el Modelo y el Controlador no es directa. Cuando el Modelo necesitaactualizar informacion debe utilizar notificaciones y KVO (Key Value Observing), paranotificarle al Controlador los nuevos cambios.

En la siguiente figura se puede visualizar mejor la comunicacion entre los diferentes camposdel diseno MVC.

Figura 5: Comunicacion entre los campos del diseno MVC

4.3. Implementacion

Siguiendo el diseno Modelo - Vista - Controlador explicado en la seccion 4.2.1, se han cons-truido 2 modelos, 3 vistas y 4 controladores. En esta seccion se explica la implementacion decada uno de ellos.

4.3.1. Modelos

Como se ha expuesto anteriormente, el modelo es la representacion de la informacion con laque opera nuestra aplicacion. En la aplicacion se crean dos modelos, uno se encarga de obtenerel estado actual de conexion de red del telefono, y otro define la estructura de cada ıtem que sealmacenara con los estados de conexion.

Modelo para obtener el estado actual de conexion de red

Este modelo recibe peticiones de los controladores para obtener el estado del telefono.Como se ha explicado en la seccion 4.1.3, debe haber dos estados: 3G o Wifi. Para suimplementacion se ha creado la clase PDAvailabilityNetwork, la cual utiliza la clase SCNet-workReachability [8] de Apple.

Esta clase tiene las siguientes propiedades y metodos:

• Propiedades:

� NetworkStatus: de tipo enumerado con los dos posibles estados: Use3G o UseWifi.

� ReturnLocalWifiStatus: de tipo BOOL, tomando el valor YES cuando haya co-nexion wifi.

� reachabilityRef : instancia de la clase SCNetworkReachabilityRef de Apple.

16

Page 21: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

• Metodos:

� availabilityWithAddress: Acepta como parametro una estructura de tipo soc-kaddr, que sera una determinada direccion de internet. Devuelve un objeto dela misma clase, PDAvailabilityNetwork, dando el valor que corresponda a las pro-piedades citadas anteriormente: NetworkStatus, ReturnLocalWifiStatus y reacha-bilityRef. Su funcion es escanear la disponibilidad de la direccion que recibe comoparametro.

� availabilityForInternetConnection: Su funcion es monitorizar la disponibilidad delrouter por defecto de la red a la que el terminal este conectado. Para ello utilizael metodo availabilityWithAddress con la direccion que corresponda.

� localWifiStatusForFlags: el objetivo de este metodo es determinar si hay algunared wifi disponible. Acepta como parametro una instancia de la clase SCNetwor-kReachabilityFlags[9], y devuelve como parametro una variable de tipo NetworkS-tatus con el valor UseWifi si la bandera recibida como parametro lo provoca.

� networkStatusForFlags: tiene la misma funcion que el metodo anterior pero parala conexion 3G del telefono.

� currentAvailabilityStatus: utiliza los dos metodos anteriores para devolver unavariable del tipo NetworkStatus con el estado que corresponda.

Modelo con los Items a almacenar con los diferentes estados de conexion

Este modelo define la estructura de cada elemento que se almacena con el estado deltelefono. Para su implementacion se ha creado la clase PDItemsTable. Esta clase tieneunicamente tres propiedades:

• Propiedades:

� changeTime: de tipo NSString. En esta variable se guarda la hora en que se entraen el estado que corresponda.

� value: de tipo NSString. Aquı se guarda el valor de estado que corresponda (3G,Target SSID o Not Target SSID).

� ssid : propiedad de tipo NSString. En esta variable se guarda el nombre del SSIDde la red a la que se esta conectado en un determinado instante.

4.3.2. Controladores

Los controladores responden a las acciones del usuario e invocan peticiones a los Modelos. Enla presente aplicacion se crean cuatro controladores, uno para cada vista y otro para gestionarel envıo de correos electronicos.

Controlador para la interfaz principal

Controlador de tipo UIViewController [10] que realiza peticiones al modelo PDAvailability-Network para obtener la disponibilidad de conexiones de red, y tambien utiliza el modeloPDItemsTable para ir rellenando el historial de estados del terminal. Para implementaresto se ha creado la clase PDMainViewController, que controla la vista principal de laaplicacion. Algunas de las propiedades y metodos mas importantes de esta clase son:

17

Page 22: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

• Propiedades:

� targetSSID : variable de tipo NSString, utilizada para guardar el SSID actual alque esta conectado el terminal.

� wifiAvailability : instancia de la clase PDAvailabilityNetwork, utilizada para guar-dar el estado actual de las redes wifi al alcance del telefono.

� timer : de tipo NSTimer, variable utilizada para poner en marcha el temporizadorque se utiliza para monitorizar. Este temporizador actualizara el estado actualdel telefono cada cierto intervalo de tiempo, dependiendo de la frecuencia demonitorizacion introducida en los ajustes.

� ssidResul : variable de tipo float utilizada para determinar si el terminal estaconectado a la red wifi monitorizada en ese instante de tiempo o a otra diferente.

� currentssid : IBOutlet [11] de tipo UILabel [12] en el que se muestra el SSID actualal que esta conectado el telefono, o la cadena Not using wifi en caso de que noeste conectado a ninguno.

� startTime: IBOutlet de tipo UILabel donde se muestra la hora (formato hh:mm)en que comenzo la monitorizacion en proceso en ese momento.

� currentHour : variable del mismo tipo que la anterior donde se muestra la horaactual de la zona horaria del terminal.

� finalResult : al igual que las anteriores, IBOutlet de tipo UILabel, donde, al termi-nar una monitorizacion, se muestra el porcentaje de tiempo en el que el terminalha estado en el estado Target SSID.

• Metodos:

� currentSSID : metodo que devuelve una variable NSString con el SSID al que estaconectado el telefono.

� getHour : metodo que devuelve una variable de tipo NSString con la hora actualen la zona horaria del terminal.

� startMonitorize: IBAction[13] que pone en marcha el temporizador del sistemapara comenzar la monitorizacion. Cada cierto intervalo de tiempo, cuyo valor seintroduce en los ajustes de la aplicacion, se llama al metodo start, cuya funcionse expone a continuacion.

� start : como se ha expuesto en el metodo anterior, este metodo es llamado porel NSTimer cada cierto intervalo de tiempo, y su funcion es actualizar el estadoactual del sistema.

� configureInterfaceWithAvailability : metodo que acepta un parametro de tipo PDA-vailabilityNetwork con el que determina el estado actual del sistema. Este metodoes llamado periodicamente por el metodo anterior para actualizar la interfaz prin-cipal en funcion del estado en el que se encuentre el telefono (use3G, Target SSID,Not target SSID).

� localNotification: metodo llamado por el metodo anterior cuando se entra o sesale del estado Target SSID.

� stopMonitorize: IBAction que para el temporizador y termina con la monitoriza-cion. Ademas pone en la variable finalResult el porcentaje de tiempo en el estadoTarget SSID.

Controlador para la interfaz de ajustes

Controlador de tipo UIViewController que se encarga de la vista de ajustes y de mandar losparametros introducidos por el usuario al controlador de la interfaz principal para comenzar

18

Page 23: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

la monitorizacion. Para esta tarea se ha creado la clase PDSettingsViewController, con lassiguientes propiedades y los siguientes metodos:

• Propiedades

� mySSID : IBOutlet de tipo UITextField [14] donde se introduce el SSID de la redwifi en cuya area de cobertura se quiere monitorizar la presencia del terminal.

� ssidScanFrequency : IBOutlet de tipo UITextField donde se introduce la frecuenciade monitorizacion.

� minInterval : variable del mismo tipo que las anteriores donde se introduce eltiempo mınimo que debe pasar el terminal en un estado para que se considereque ha pasado por el y se introduzca en la lista de historial de estados. Con esteparametro se evita que se registren falsos cambios de localizacion ante oscilacionesde la red con breves perdidas de senal.

� alertMessage: al igual que las variables anteriores, de tipo UITextField. En estavariable se introduce el mensaje de alerta que aparece cuando el terminal sale oentra de la zona donde el estado es Target SSID.

� email : propiedad de tipo UITextField donde se introduce la direccion de correoa la que se envıa una alerta cuando es necesario.

• Metodos

� applySettings: IBAction para enviar los valores introducidos en las variables defi-nidas anteriormente al controlador de la vista principal, PDMainViewController.

Controlador para la interfaz de historial de estados

Controlador de tipo UITableViewController [15] encargado de la vista que muestra el his-torial de estados por los que ha pasado el telefono en la monitorizacion que se este llevandoa cabo en cualquier instante de tiempo. Para esto se ha creado la clase PDRecordTable-ViewController, que consta unicamente del siguiente metodo:

• Metodos

� resetRecord : IBAction para limpiar el historial de estados.

Controlador para email

Controlador de tipo UIViewController que se encarga del envıo de emails cuando es necesa-rio. Para ello se ha creado la clase PDMailComposeViewContoller, que consta del siguientemetodo:

• send : metodo que no devuelve nada y admite como parametro el cuerpo del email.Para enviar emails este metodo utiliza el servicio Sendgrid, cuyo funcionamiento seexpone en la seccion B.

4.3.3. Vistas

Las vistas son objetos del controlador presentados de forma grafica al usuario. En este pro-yecto hay tres vistas, las cuales tienen asociada un controlador cada una, encontrandose las tresen el Storyboard [16] de la aplicacion, Main.storyboard. En las vistas se presentan los elementosque se exponen en la seccion correspondiente de requisitos, la seccion 4.1.4.

19

Page 24: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Vista principal

Vista de tipo UIView [17] que muestra la interfaz principal de la aplicacion. Esta vista esobjeto de la clase PDMainViewController. En la siguiente figura se puede ver su aspectoy a continuacion se explica la funcion de cada elemento.

Figura 6: Vista de MainViewController.

• Navigation Bar : la clase UINavigationBar [18] permite poner tıtulo a la vista y algunosbotones para ir a otras vistas. En esta se observa que la barra de navegacion tieneel tıtulo My Situation y a ambos lados tenemos dos botones para desplazarnos a lasotras dos vistas de la aplicacion.

• Start : elemento de tipo UIButton[19] asociado al IBAction startMonitorize. Si losajustes han sido introducidos correctamente, al pulsar sobre este boton comienza lamonitorizacion. En caso contrario saltarıa una alerta pidiendo que se ingresen losparametros necesarios.

• Stop: elemento de tipo UIButton asociado al IBAction stopMonitorize. Al pulsar sobreeste boton se detiene la monitorizacion y aparecerıa el porcentaje de tiempo pasadoen el estado Target Wifi.

• Los demas elementos de la vista se puede observar que son etiquetas de texto, UILabelpara mostrar la situacion de la monitorizacion.

Vista de ajustes

Vista de tipo UIScrollView[20] que muestra la interfaz donde se introducen los parametrosde ajustes de la aplicacion. Esta vista es objeto de la clase PDSettingsViewController. Enla siguiente figura se muestra esta vista y a continuacion se explican sus elementos:

20

Page 25: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura 7: Vista de SettingsViewController.

• Target SSID : UITextField donde se introduce el SSID de la red en la cual queremosmonitorizar la presencia del telefono. Para empezar a monitorizar es obligatorio queeste y los siguientes campos esten rellenos.

• SSID Scan Frequency : UITextField donde se introduce la frecuencia de monitoriza-cion, es decir, la frecuencia con la que se actualiza el estado actual del telefono. Elvalor por defecto de este campo es de 15 segundos.

• Alert Message: UITextField para introducir el mensaje de alerta que salta en lassituaciones expuestas en la seccion 4.1.3.

• Minimum Time in Status: de tipo UITextField, tiempo mınimo que debe permanecerel telefono en un estado para que se considere que ha estado en el.

• Alert e-mail : UITextField donde se introduce la direccion de correo que recibira lasnotificaciones que produzca la aplicacion.

Vista de historial de estados

Vista de tipo UITableView[21] donde se pueden visualizar todos los estados por los que hapasado el telefono desde que comienza una monitorizacion, junto con la hora de comienzode cada uno de ellos. Esta vista es objeto de la clase PDRecordTableViewController. En lasiguiente figura se muestra esta vista:

21

Page 26: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura 8: Vista de RecordViewController.

Cada estado en el que permanezca el telefono un tiempo mayor al parametro MinimumTime in Status sera anadido a esta tabla de estados.

4.3.4. Funcionamiento

En este punto se detalla como se lleva a cabo el proceso para poner en funcionamiento laaplicacion. Son unicamente dos pasos:

Dar valores a los parametros de monitorizacion en la vista de ajustes:

Figura 9: Ejemplo de ajustes para monitorizacion

22

Page 27: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Dar comienzo a la monitorizacion pulsando el boton ’Start’.

En el momento en que la aplicacion comienza a monitorizar, actualizara el estado delterminal y la interfaz grafica periodicamente, con un perıodo igual al parametro introducidoen ajustes SSID Scan Frequency. En la siguiente figura se puede ver el estado del terminalen un determinado instante. Si se pulsa sobre el boton ’Stop’, la monitorizacion terminaray aparecera el porcentaje de tiempo en el que el terminal ha estado dentro de la zonavigilada.

Figura 10: Ejemplo de vista principal

A partir del instante de comienzo de la monitorizacion, se puede ir consultando el historialde estados por los que ha pasado la aplicacion.

Figura 11: Historial de estados

Cuando el terminal entra en la zona monitorizada o sale de ella, hay distintas notificacionesdependiendo de si la aplicacion se encuentra en primer plano o en background.

Notificacion en primer plano: aparecera una alerta con el mensaje que se haya intro-ducido en los ajustes.

23

Page 28: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura 12: Notificacion en primer plano

Notificacion en background : se recibira una notificacion sonora indicando el mensajeintroducido en los ajustes de la aplicacion y pulsando sobre ella se accedera a la aplicacion.

Figura 13: Notificacion en segundo plano

Email: al mismo tiempo que se generan las notificaciones en el terminal, se manda unemail a la direccion de correo introducida en los ajustes.

24

Page 29: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura 14: Notificacion de correo

5. Plan de pruebas

El objetivo de esta seccion es comprobar que el software desarrollado cumple correctamentecon los requisitos especificados en la seccion 4.1.3. Para ello, se ha sometido a pruebas de diversaındole.

5.1. Pruebas para validacion de requisitos

Validacion de requisitos de interfaces

• ID prueba: 1

• Tıtulo: Validacion de requisitos de interfaces.

• Objetivo del test: Comprobar que existen las tres interfaces de usuario requeridasen la seccion 4.1.4, ası como verificar que la comunicacion entre ellas se producecorrectamente.

• Pasos del test: Acceder desde el terminal a la aplicacion y navegar entre las distintasinterfaces, comprobando que las tres muestran los campos requeridos.

• Resultados del test: El test es correcto si aparecen las tres interfaces y desde lainterfaz principal tenemos acceso a las otras dos, pudiendo regresar desde cada unade ellas en cualquier momento.

• Estado: Correcto.

Validacion de obtencion del estado de conexion a red del terminal

• ID prueba: 2

• Tıtulo: Validacion de obtencion del estado de conexion a red del terminal.

• Objetivo del test: Comprobar que en el campo Current SSID de la interfaz principalaparece correctamente el estado del terminal, pudiendo ser alguno de los nombradosen la seccion 4.1.3.

• Pasos del test: Poner en marcha la aplicacion rellenando los ajustes necesariosy comprobar que se muestra correctamente el estado del telefono. Se conectara adistintas redes para verificar el correcto funcionamiento.

25

Page 30: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

• Resultados del test: El test es correcto si, al conectarnos a distintas redes wifio mediante 3G, el campo Current SSID cambia correctamente mostrando el quecorresponda.

• Estado: Correcto.

Validacion de requisitos de configuracion

• ID prueba: 3

• Tıtulo: Validacion de requisitos de configuracion.

• Objetivo del test: Comprobar que podemos configurar los parametros especificadosen la seccion 4.1.3.

• Pasos del test: Poner en marcha la aplicacion con distintos parametros de configu-racion y comprobar que la monitorizacion se produce segun los campos rellenados.

• Resultados del test: El test es correcto si la monitorizacion cambia segun los pa-rametros introducidos y la aplicacion entra en el estado Target SSID cuando se estaconectado a la red introducida como objetivo.

• Estado: Correcto

Validacion de requisitos de notificaciones

• ID prueba: 4

• Tıtulo: Validacion de requisitos de notificaciones (I).

• Objetivo del test: Comprobar que, con la aplicacion funcionando en primer plano, alconectar o desconectar el terminal de la red donde se esta monitorizando su presencia,en adelante la red objetivo, aparece una alerta donde se notifica del cambio de estado.

• Pasos del test: Con la aplicacion abierta, conectar el terminal a la red objetivo.Cuando haya pasado un tiempo determinado, mayor o igual al parametro MinimumTime in Status, desconectarse de la red.

• Resultados del test: El test es correcto si al entrar o salir del estado Target SSIDsalta una alerta notificando del cambio y se produce una vibracion en el telefono.

• Estado: Correcto

• ID prueba: 5

• Tıtulo: Validacion de requisitos de notificaciones(II).

• Objetivo del test: Comprobar que, con la aplicacion funcionando en primer plano,al conectar o desconectar el terminal de la red objetivo, se envıa un email a la direccionde correo introducida en la interfaz de ajustes.

• Pasos del test: Idem a la prueba 4.

• Resultados del test: El test es correcto si al entrar o salir del estado Target SSIDse recibe un email en la direccion de correo que corresponda.

• Estado: Correcto.

• ID prueba: 6

26

Page 31: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

• Tıtulo: Validacion de requisitos de notificaciones(III).

• Objetivo del test: Comprobar que, con la aplicacion funcionando en segundo plano,background, al conectar o desconectar el terminal de la red objetivo, se produce unaalerta sonora con un mensaje notificando del cambio. Si pulsamos en el mensaje, nosdebe llevar a la aplicacion.

• Pasos del test: Idem a la prueba 4, con la diferencia de que en este caso la aplicaciondebe estar funcionando en segundo plano.

• Resultados del test: El test es correcto si conectar o desconectar el terminal de lared se recibe la notificacion de la aplicacion.

• Estado: Correcto.

• ID prueba: 7

• Tıtulo: Validacion de requisitos de notificaciones(IV).

• Objetivo del test: Comprobar que, con la aplicacion funcionando en segundo plano,se recibe un correo en el mismo caso que en la prueba 5.

• Pasos del test: Idem a la prueba 6.

• Resultados del test: Idem prueba 5.

• Estado: Correcto.

Validacion de funcionamiento en background

• ID prueba: 8

• Tıtulo: Validacion de funcionamiento en background.

• Objetivo del test: Comprobar que la aplicacion funciona igualmente en primer comosegundo plano.

• Pasos del test: Abrir la aplicacion y poner en marcha una monitorizacion. En algunmomento dejar la aplicacion funcionando en segundo plano y verificar que todo siguefuncionando igualmente.

• Resultados del test: El test es correcto si, en background, la monitorizacion conti-nua del mismo modo que en primer plano.

• Estado: Correcto.

Validacion de recoleccion de historial de estados

• ID prueba: 9

• Tıtulo: Validacion de recoleccion de historial de estados.

• Objetivo del test: Comprobar que la aplicacion almacena todos los estados porlos que ha pasado el terminal en la monitorizacion que se esta produciendo en undeterminado instante.

• Pasos del test: Con la aplicacion en funcionamiento, variar los estados por los quepasa el terminal y comprobar que en la interfaz de historial de estados se almacenantodos correctamente.

• Resultados del test: El test es correcto si en la interfaz correspondiente aparecentodos los estados por los que ha pasado el terminal.

27

Page 32: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

• Estado: Correcto.

Validacion de requisitos de Datos a Mostrar

• ID prueba: 10

• Tıtulo: Validacion de requisitos de Datos a Mostrar.

• Objetivo del test: Verificar que la aplicacion muestra los datos especificados en laseccion 4.1.3.

• Pasos del test: Con la aplicacion en funcionamiento, comprobar que se muestranlos campos requeridos.

• Resultados del test: El test es correcto si es posible acceder a la informacion quese requiere.

• Estado: Correcto.

6. Conclusion y lıneas futuras

En este trabajo se ha presentado un sistema de deteccion de presencia en zonas determinadasbasado en la conexion a redes Wifi. Para ello se ha implementado una aplicacion movil parasistema operativo iOS, por lo que el unico hardware necesario es un terminal con dicho sistema.De esta manera, la adaptacion de la aplicacion a cualquier entorno resulta muy sencilla.

Los pruebas realizadas a la aplicacion demuestran que puede ser candidata para empezar allevar sistemas de deteccion de presencia al mundo de las aplicaciones moviles.

Como trabajo futuro, algunas lıneas de avance son:

Mejorar la precision de la localizacion mediante algoritmos mas complejos, indicando alusuario la localizacion con coordenadas. Actualmente no es ası porque el principal objetivode este trabajo era desarrollar la deteccion de presencia en una zona.

Establecer distintos perfiles de usuario, para que la persona a vigilar provista del terminalno pueda cambiar los ajustes de monitorizacion.

28

Page 33: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Referencias

[1] Wikipedia http://es.wikipedia.org/wiki/SSID

[2] Molera Codina, Juan Manuel. Arquitectura de diseno de accesorios inalambricos para dis-positivos moviles. http://hdl.handle.net/10317/3569

[3] Mejores Aplicaciones Android http://www.mejoresaplicacionesandroid.org/

smartphone-la-evolucion/

[4] Dept. of Comp. and Sys. Eng., Alexandria Univ., Alexandria, Egypt. Robust WLANDevice-free Passive motion detection http://ieeexplore.ieee.org/xpl/login.jsp?

tp=&arnumber=6214375&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.

jsp%3Farnumber%3D6214375

[5] Ahmed E. Kosba, Ahmed Saeed, Moustafa Youse↵, RASID: Device-free Passive MotionDetection http://arxiv.org/pdf/1105.6084v2.pdf

[6] Wikipedia. http://es.wikipedia.org/wiki/Diagrama_de_Gantt

[7] Melissa Correa Rios. Composicion de Sistema Operativo Movil iOS de Apple y el Hardwarey el Software que lo utilizan. http://200.21.98.67:8080/jspui/handle/10785/1984

[8] Apple. https://developer.apple.com/library/ios/documentation/

SystemConfiguration/Reference/SCNetworkReachabilityRef/Reference/reference.

html

[9] Apple. https://developer.apple.com/library/ios/documentation/

SystemConfiguration/Reference/SCNetworkReachabilityRef/Reference/reference.

html#//apple_ref/c/func/SCNetworkReachabilityGetFlags

[10] Apple. https://developer.apple.com/library/ios/documentation/uikit/

reference/UIViewController_Class/Reference/Reference.html

[11] Apple. https://developer.apple.com/library/ios/documentation/general/

conceptual/CocoaEncyclopedia/Outlets/Outlets.html

[12] Apple. https://developer.apple.com/library/ios/documentation/uikit/

reference/UILabel_Class/Reference/UILabel.html

[13] Apple. https://developer.apple.com/library/ios/documentation/general/

conceptual/Devpedia-CocoaApp/TargetAction.html

[14] Apple. https://developer.apple.com/library/ios/documentation/uikit/

reference/UITextField_Class/Reference/UITextField.html

[15] Apple. https://developer.apple.com/library/ios/documentation/uikit/

reference/UITableViewController_Class/Reference/Reference.html

[16] Apple. https://developer.apple.com/library/ios/documentation/general/

conceptual/Devpedia-CocoaApp/Storyboard.html

[17] Apple. https://developer.apple.com/library/ios/documentation/uikit/

reference/uiview_class/uiview/uiview.html

29

Page 34: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

[18] Apple. https://developer.apple.com/library/ios/documentation/uikit/

reference/uinavigationbar_class/Reference/UINavigationBar.html

[19] Apple. https://developer.apple.com/library/ios/documentation/uikit/

reference/UIButton_Class/UIButton/UIButton.html

[20] Apple https://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollview_class/Reference/UIScrollView.html

[21] Apple. https://developer.apple.com/library/ios/documentation/uikit/

reference/UITableView_Class/Reference/Reference.html

[22] Apple https://developer.apple.com/devcenter/ios/index.action

[23] Wikipedia http://es.wikipedia.org/wiki/IPhone_SDK

[24] Apple https://developer.apple.com/programs/ios/

[25] Wikipedia. http://es.wikipedia.org/wiki/DomainKeys

[26] OpenSPF.org http://es.wikipedia.org/wiki/Sender_Policy_Framework

[27] CocoaPods.org http://cocoapods.org

[28] Miguel Diaz Rubio, Desarrollo iOS 7 http://www.migueldiazrubio.com/2013/10/21/

desarrollo-ios-7-introduccion-afnetworking-2/

[29] GitHub https://github.com/AFNetworking/AFNetworking

30

Page 35: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Apendices

A. Proceso de desarrollo

En esta seccion se explica el procedimiento necesario para comenzar a desarrollar aplicacionesen iOS. En primer lugar, se explica como crear una cuenta gratuita para crear aplicaciones ypoder probarlas en un simulador. A continuacion, se detallan los pasos para probar aplicacionesen un dispositivo real, y, por ultimo, se ofrece una introduccion a la programacion en Xcode.

A.1. Empezar a desarrollar en iOS

Alta como Apple Developer

El primer paso para empezar a desarrollar una aplicacion en iOS es darse de alta comodesarrollador de Apple. Esto se puede hacer en el iOS Dev Center [22]. Los pasos para estoson:

• Seleccionar Register en la parte superior derecha de la pagina.

• En el siguiente paso hay dos posibilidades dependiendo de si se tiene un Apple ID ono.

Figura 15: Registro Apple Developer

31

Page 36: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

• Cuando se introduce un Apple ID o se registra uno nuevo, se puede acceder ya alprograma. Saldra una pantalla similar a esta:

Figura 16: Member Center

Xcode. Descarga

La descarga de Xcode, al igual que el alta como desarrollador, se puede hacer en el iOSDev Center, o bien en la Apple Store. En el primer caso, al entrar con una cuenta dedesarrollador, en la seccion Downloads aparece este programa.

Figura 17: Descarga Xcode

Con Xcode viene integrado el iOS Simulator, que junto con este y el programa de desarrolloconstituyen el iPhone SDK [23].

A.2. Probar aplicaciones en dispositivo real

Alta de dispositivo

Cuando se tiene instalado Xcode con cuenta de desarrollador gratuita se pueden probar lasaplicaciones desarrolladas en el iOS Simulator. Sin embargo, algunas funcionalidades nopueden ser emuladas por este simulador. Por tanto, para conseguir probarlas es necesariohacerlo en un terminal real. Los pasos para poder dar de alta un terminal son:

• Darse de alta en el programa de desarrollo de Apple

Hay varias posibilidades, cuyas tarifas y detalles se pueden ver en la web de Apple,en la seccion de iOS Developer Program[24].

� iOS University Program

� iOS Developer Program

32

Page 37: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

� iOS Developer Enterprise Program

Para este proyecto se ha escogido el iOS University Program, ya que habıa uno exis-tente en la Universidad de Sevilla.

• Creacion de certificado de desarrollo

Todas las aplicaciones deben estar firmadas por un certificado valido antes de po-der ser ejecutados en un dispositivo de Apple o publicadas en la Apple Store. Estoscertificados digitales se asocian a una identidad de desarrollador y pueden ser invali-dados por Apple antes de su expiracion (que por defecto es anual). Se debe crear uncertificado por cada miembro del equipo de desarrolladores.

Para crear el certificado se siguen los siguientes pasos:

� Abrir la aplicacion Acceso a llaveros.

� Una vez abierta hay que solicitar un certificado de autoridad. Esto se hace de lasiguiente forma:->Acceso a llaveros ->Asistente para certificados ->Solicitar un cer-tificado de una autoridad de certificacion ->

Figura 18: Solicitar certificado

� Rellenar el correo y el nombre y seleccionar Guardado en el disco. Esto nosgenerara el archivo:CertificateSigningRequest.certSigningRequest.

� Una vez se tenga el archivo anterior, lo siguiente es entrar en la web de AppleDeveloper y seleccionar ->Member Center->iOS Provisioning Portal. En la opcion ->Certificates, seleccionar la pes-tana Development. Si se pulsa en ->Request Certificate aparecera un textoexplicativo sobre los pasos a seguir y justo debajo un campo para subir un archi-vo. Ahı es donde se debe subir el archivo que se ha generado anteriormente con laextension .certSigningRequest. Una vez subido el archivo aparecera lo siguiente:

Figura 19: Subida de certificado

� En ese momento el administrador del grupo de desarrolladores tendra que acep-tar la solicitud creada para ingresar en el grupo. Cuando lo acepte, el estadode nuestro certificado habra cambiado a Issued, eso significa que ya se puededescargar el certificado. Para instalarlo solo habra que arrastrarlo al Acceso allaveros o hacer doble click.

33

Page 38: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura 20: Descargar certificado

� Si todo ha ido bien, tendremos el siguiente archivo:

Figura 21: Certificado de desarrollo

• Dar de alta el dispositivo para probar la aplicacion

Para anadir un dispositivo hay que abrir elOrganizer, que se podra encontrar abrien-do Xcode, en la pestana Window ->Organizer. En la seccion Devices, copiar elidentificador (conocido tambien como token) del dispositivo, una cadena alfanumericade 40 caracteres.

Figura 22: Device

A continuacion, en el iOS Provisioning Portal, pulsando ->Devices ->AddDevices . Se introducen el nombre que se quiera dar al dispositivo y el identificadoranterior.

34

Page 39: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura 23: Anadir dispositivo

Anadir identificador de aplicacion

Una vez anadido el dispositivo, se crea un identificador de aplicacion. Para ello, en laseccion App IDs, se pulsa en New App ID. Un ID de aplicacion es la combinacion deuna cadena de diez caracteres llamado Bundle Seed ID y el identificador de paquete (CF).

Figura 24: Generacion de AppID.

Anadir Provisioning Profile

Ahora se podra solicitar un perfil de aprovisionamiento, que no es mas que una coleccionde entidades digitales que vincula desarrolladores con dispositivos, permitiendo a un dis-positivo utilizarlo para probar aplicaciones. Para ello, en la seccion Provisioning, hacerclick en New Profile.

35

Page 40: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura 25: Creacion de Provisioning Profile

Se rellena el nombre que se quiera dar al perfil, el certificado que se desea usar (en estecaso solo hay uno), se escoge la aplicacion, los dispositivos que se quieren incluir paraefectuar las pruebas (Mac o iPhone) y se pulsa en Submit. En breves instantes el perfilestara disponible para su descarga.

Figura 26: Descargar Provisioning Profile

Si todo ha ido bien, se tendra el siguiente archivo:

Figura 27: Ejemplo Provisioning Profile

Por ultimo, habrıa que arrastrar ese archivo al Organizer de Xcode.

Al finalizar estos pasos, ya se podra probar la aplicacion en el dispositivo registrado.

A.3. Xcode. Programacion en Xcode

Xcode es el entorno de desarrollo integrado (IDE) de Apple Inc. y se suministra gratuitamentejunto con MAC OS X. Xcode trabaja conjuntamente con Interface Builder, una herramientagrafica, herencia de NeXT, para la creacion de interfaces de usuario.

36

Page 41: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura 28: Xcode para MAC OS X

Xcode incluye la coleccion de compiladores del proyecto GNU (GCC), y puede compilarcodigo C, C++, Objective-C, Objective-C++, Java y AppleScript mediante una amplia gamade modelos de programacion, incluyendo, pero no limitado a Cocoa, Carbon y Java. Otrascompanıas han anadido soporte para GNU Pascal, Free Pascal, Ada y Perl.

La version utilizada para este proyecto ha sido Xcode 5.1. A continuacion se detallan lassecciones de la version utilizada para el desarrollo de la aplicacion:

Area de Navegacion: en esta seccion se organizan los diferentes ficheros del proyecto.

Area de Edicion: aquı se editan los ficheros con el codigo fuente y los componentes dela interfaz.

Area de Utilidades: esta seccion contiene los inspectores que se utilizan para configurarlas propiedades de los objetos de la interfaz. Ademas muestra las diferentes librerıas dondese encuentran los objetos por defecto para poder anadirlos a la interfaz.

Figura 29: Entorno de desarrollo Xcode 5.1

Cuando la aplicacion comienza a ejecutarse, aparece otra seccion que no aparece en la Figura,el area de Depuracion, donde se puede ver la interaccion de las diferentes variables en la ejecuciondel programa.

Para compilar y ejecutar una aplicacion en Xcode solo hay que seguir dos pasos:

Elegir el dispositivo sobre el que se ejecutara la aplicacion. Aparecera un desplegable conlos dispositivos disponibles.

37

Page 42: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Figura 30: Seleccionar dispositivo

Pulsar en el boton ’Run’, a la izquierda de la seleccion de dispositivos.

Con esos dos pasos, la aplicacion se ejecutara automaticamente en el dispositivo seleccionado.A continuacion, se ofrece una breve introduccion al lenguaje utilizado para programar en

Xcode, Objective-C.

A.3.1. Objective-C

Objective-C es un superconjunto del lenguaje de programacion C, que agrega al lenguajebasico caracterısticas orientadas a objetos. Los principales motivos por los que se empezo autilizar la programacion orientada a objetos fue por el desorden de algunos programadores yla dificultad para la reutilizacion de codigo en la programacion estructurada. Objective-C fuecreado por Brad Crox y la corporacion StepStone en 1980. En 1988 fue adoptado como lenguajede programacion de NextStep y en 1992 fue liberado bajo licencia GPL para el compilador GCC.Actualmente se usa como lenguaje principal de programacion en MAC OS X, iOS y GNUstep.

Objective-C consiste en una capa muy fina situada por encima de C, y ademas es un estrictosuperconjunto de C, por lo que es posible compilar cualquier programa escrito en C con uncompilador de Objective-C, y tambien puede incluir libremente codigo en C dentro de una clasede Objective-C.

Protocolos

Los protocolos en Objective-C funcionan igual que las interfaces en Java, o las clasesvirtuales en C++. Los protocolos se declaran en un archivo .h y unicamente muestran lacabecera de la funciones que los objetos que usan dicho protocolo deben implementar.

38

Page 43: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Paso de mensajes

La principal diferencia entre los binarios de Objective-C y los de otros lenguajes de progra-macion es que, en Objective-C no hay llamadas a metodos, sino que hay paso de mensajes.La diferencia entre estos conceptos radica en como el codigo referido por el nombre delmensaje o metodo es ejecutado. En un lenguaje que utiliza llamadas a metodos, el nombredel metodo esta atado a una seccion de codigo por el compilador, pero en Objective-C,el mensaje sigue siendo simplemente un nombre, y es resuelto en tiempo de ejecucion: elobjeto receptor tiene la tarea de interpretar por sı mismo el mensaje. Este tipo de progra-macion basado en mensajes permite que los mensajes no posean implementacion, ası comotampoco requiere que un objeto sea definido en tiempo de compilacion.

Interfaces e implementaciones

La interfaz y la implementacion de la clase se encuentran en bloques de codigo separados.Al igual que ocurre en C++, las clases de objetos en Objective-C, por lo general se defi-nen mediante un archivo de cabecera (con extension .h) y un archivo de implementacion(extension .m).

La interfaz de una clase es usualmente definida en el archivo de cabecera. Como convencion,el archivo de cabecera tiene el mismo nombre que la clase.

Figura 31: Interfaz en Objective-C

Los signos mas (+) denotan metodos de clase, mientras que los signos menos (-) metodosde instancia. La diferencia entre ambos es que los metodos de clase no tienen acceso a lasvariables de instancia.

En la interfaz unicamente hay declaraciones, pero no los metodos en sı; el codigo real esescrito en la implementacion.

Figura 32: Implementacion en Objective-C

Delegados

En Objective-C un delegado es un objeto que actua en nombre de otro objeto. Cuando secrea un objeto (principal), a este se le puede asignar un delegado. Los delegados sirven pararesponder a los mensajes enviados al objeto principal y que este no ha podido contestar.

Los delegados ayudan a manipular eventos. En el caso del diseno MVC explicado anterior-mente, el Controlador se coloca como delegado de la Vista, para atender posibles eventos.

39

Page 44: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Propiedades

Las propiedades son una notacion utilizada para reemplazar la declaracion y, opcionalmen-te, la implementacion de los metodos de acceso. Para utilizar las propiedades declaradasse deben realizar dos pasos, el primero es declararla en el archivo de cabecera y el segundoes implementarla en el archivo fuente.

Para declarar las propiedades se debe utilizar la instruccion ”@property”, seguida por eltipo de informacion y el nombre de la propiedad. Ademas se pueden configurar opcio-nes personalizadas para definir el comportamiento del metodo de acceso. Un ejemplo depropiedad serıa:

@property (nonatomic, strong) NSString *ssid;

La implementacion de la propiedad en el archivo fuente se realiza con la directa ”@synt-hesize”. Para implementar la anterior propiedad se harıa:

@synthesize ssid;

El tipo de dato id

El tipo de dato id es similar a un puntero void. La principal diferencia es que al llamar aun metodo de una id de un objeto en particular no es necesario saber el tipo de objeto enel que se esta llamando al metodo; simplemente debe existir el metodo en dicho objeto.Esto se denomina message passing en Objective-C.

El tipo Selector: SEL

Los valores de tipo SEL son identificadores de los nombres de los metodos. Es similar aun puntero a funcion. Es la base del patron de diseno basado en Target-Action del modeloMVC.

Se usa la directiva @selector para crear valores literales usando el nombre de los metodos.Para llamar al metodo apuntado por su selector se usa performSelector:. Un metodo puededevolver un tipo SEL. En este caso es como si devolviera una funcion de callback.

40

Page 45: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

B. Sendgrid

Sendgrid ofrece un servicio de entrega de correo electronico basado en la nube que ayuda agestionar el correo electronico transaccional, es decir, correo que es remitido como consecuenciade un evento relacionado con el destinatario, sea este o no el causante del mismo. El serviciogestiona varios tipos de correo electronico que incluyen avisos de entrega, solicitudes de amistady boletines de correo electronico. Tambien se ocupa de seguimiento de Internet Service Provider(ISP), claves de dominio[25] y Sender Policy Framework [26].

Sendgrid ofrece una version gratis, ası como cuatro niveles de ampliacion de servicio: Bronce,Plata, Oro y Platino.

B.1. Importacion de Sendgrid al proyecto Xcode

En la realizacion del proyecto se ha utilizado la version gratis, y lo que hace es enviar correos atraves de la aplicacion web de Sendgrid. Para ello, ademas de crear la cuenta, hay que instalar lalibrerıa de Sengrid en el proyecto Xcode, que a su vez depende de otra librerıa, AFNetworking [28],la cual utiliza en la realizacion de peticiones HTTP para enviar un email. La instalacion elegidaha sido mediante CocoaPods[27], ya que utilizando este gestor de dependencias es mas sencilloutilizar librerıas externas. Los pasos a seguir son los siguientes:

Crear un fichero llamado ’Podfile’ con el siguiente contenido:

Figura 33: Podfile

Ejecutar el siguiente comando en el terminal, dentro del directorio donde se encuentra elproyecto de Xcode.

Figura 34: Instalacion de Pods

Con estos dos pasos se instalan todas las dependencias necesarias y la librerıa Sendgrid,generandose un fichero con extension ”.workspace”, donde se encuentra el proyecto de Xcode contodo lo necesario.

41

Page 46: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

C. Codigo de la aplicacion

Modelos

Codigo fuente 1: Fichero PDAvailabilityNetwork.h

1 //2 // PDAvai labi l i tyNetwork . h3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 22/01/14.6 // Copyright ( c ) 2014 Franc i sco Ort i z Abr i l . A l l r i g h t s7 // r e s e rved .8 //9

10 #import <Foundation/Foundation . h>11 #import <SystemConf igurat ion / SystemConf igurat ion . h>12 #import <ne t i n e t / in . h>1314 typede f enum : NSInteger {15 Use3G = 0 ,16 UseWiFi17 } NetworkStatus ;1819 @int e r f a c e PDAvailabi l i tyNetwork : NSObject{2021 }2223 @property ( nonatomic ) BOOL ReturnLocalWiFiStatus ;24 @property ( nonatomic ) SCNetworkReachabil ityRef25 r e a chab i l i t yRe f ;2627 /⇤ !28 ⇤ Use to check the r e a c h a b i l i t y o f a g iven IP address .29 ⇤/30 + ( PDAvai labi l i tyNetwork ⇤) ava i l ab i l i t yWithAddre s s :31 ( const s t r u c t sockaddr in ⇤) hostAddress ;3233 /⇤ !34 ⇤ Checks i n t e r n e t connect ion i s a v a i l a b l e in the d e f au l t route .35 ⇤/36 + ( PDAvai labi l i tyNetwork ⇤) ava i l ab i l i t yFo r In t e rn e tConne c t i on ;3738 /⇤ !39 ⇤ Check cur rent NetworkStatus .40 ⇤/41 � ( NetworkStatus ) c u r r e n tAva i l a b i l i t y S t a t u s ;4243 /⇤ !44 ⇤ Return f l a g s with cur rent Status

42

Page 47: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

45 ⇤/4647 � ( NetworkStatus ) loca lWiFiStatusForFlags :48 ( SCNetworkReachabi l ityFlags ) f l a g s ;4950 � ( NetworkStatus ) networkStatusForFlags :51 ( SCNetworkReachabi l ityFlags ) f l a g s ;5253 @end

43

Page 48: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 2: Fichero PDAvailabilityNetwork.m

1 //2 // PDAvai labi l i tyNetwork .m3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 22/01/14.6 // Copyright ( c ) 2014 Franc i sco Ort i z Abr i l . A l l r i g h t s r e s e rved .7 //89 #import <arpa/ i n e t . h>

10 #import < i f a dd r s . h>11 #import <netdb . h>12 #import <sys / socke t . h>1314 #import <CoreFoundation/CoreFoundation . h>1516 #import ”PDAvailabi l i tyNetwork . h”1718 #pragma mark � Support ing f unc t i on s1920 #de f i n e kShou ldPr intReachab i l i tyF lags 12122 s t a t i c void P r i n tAva i l a b i l i t yF l a g s ( SCNetworkReachabi l ityFlags f l a g s ,23 const char ⇤ comment )24 {25 #i f kShou ldPr intReachab i l i tyF lags2627 NSLog(@”Reachab i l i t y Flag Status : % c % c % c % c % c % c % c %28 c % c % s \n ” ,29 ( f l a g s & kSCNetworkReachabilityFlagsIsWWAN) ? ’W’ : ’� ’ ,30 ( f l a g s & kSCNetworkReachabi l ityFlagsReachable ) ? ’R’ : ’� ’ ,3132 ( f l a g s & kSCNetworkReachabi l i tyFlagsTransientConnect ion )33 ? ’ t ’ : ’� ’ ,34 ( f l a g s & kSCNetworkReachabi l ityFlagsConnectionRequired )35 ? ’ c ’ : ’� ’ ,36 ( f l a g s & kSCNetworkReachabi l i tyFlagsConnect ionOnTraf f ic )37 ? ’C’ : ’� ’ ,38 ( f l a g s & kSCNetworkReachabi l i tyFlagsIntervent ionRequired )39 ? ’ i ’ : ’� ’ ,40 ( f l a g s & kSCNetworkReachabilityFlagsConnectionOnDemand )41 ? ’D’ : ’� ’ ,42 ( f l a g s & kSCNetworkReachabi l i tyFlagsIsLocalAddress )43 ? ’ l ’ : ’� ’ ,44 ( f l a g s & kSCNetworkReachabi l i tyFlagsIsDirect )45 ? ’d ’ : ’� ’ ,46 comment47 ) ;

44

Page 49: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

48 #end i f49 }5051 #pragma mark � Reachab i l i t y implementation5253 @implementation PDAvai labi l i tyNetwork5455 @synthes ize r e a chab i l i t yRe f , ReturnLocalWiFiStatus ;5657 + ( PDAvai labi l i tyNetwork ⇤) ava i l ab i l i t yWithAddre s s :58 ( const s t r u c t sockaddr in ⇤) Address59 {60 SCNetworkReachabil ityRef r e a c h a b i l i t y =61 SCNetworkReachabil ityCreateWithAddress62 ( kCFAllocatorDefault , ( const s t r u c t sockaddr ⇤) Address ) ;6364 PDAvai labi l i tyNetwork ⇤ returnValue = NULL;6566 i f ( r e a c h a b i l i t y != NULL)67 {68 returnValue = [ [ s e l f a l l o c ] i n i t ] ;69 i f ( returnValue != NULL)70 {71 returnValue�>r e a chab i l i t yRe f = r e a c h ab i l i t y ;72 returnValue�>ReturnLocalWiFiStatus = NO;73 }74 }75 re turn returnValue ;76 }7778 + ( PDAvai labi l i tyNetwork ⇤) ava i l ab i l i t yFo r In t e rn e tConne c t i on79 {80 s t r u c t sockaddr in zeroAddress ;81 bzero(&zeroAddress , s i z e o f ( zeroAddress ) ) ;82 zeroAddress . s i n l e n = s i z e o f ( zeroAddress ) ;83 zeroAddress . s i n f am i l y = AF INET ;8485 re turn [ s e l f ava i l ab i l i t yWithAddre s s :& zeroAddress ] ;86 }878889 #pragma mark � Network Flag Handling9091 � ( NetworkStatus ) loca lWiFiStatusForFlags :92 ( SCNetworkReachabi l ityFlags ) f l a g s93 {94 P r i n tAva i l a b i l i t yF l a g s ( f l a g s , ” loca lWiFiStatusForFlags ”) ;95 NetworkStatus returnValue = Use3G ;96

45

Page 50: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

97 i f ( ( f l a g s & kSCNetworkReachabi l ityFlagsReachable ) &&98 ( f l a g s & kSCNetworkReachabi l i tyFlagsIsDirect ) )99 {100 returnValue = UseWiFi ;101 }102103 re turn returnValue ;104 }105106 � ( NetworkStatus ) networkStatusForFlags :107 ( SCNetworkReachabi l ityFlags ) f l a g s108 {109 P r i n tAva i l a b i l i t yF l a g s ( f l a g s , ”networkStatusForFlags ”) ;110 i f ( ( f l a g s & kSCNetworkReachabi l ityFlagsReachable ) == 0)111 {112 re turn Use3G ;113 }114115 NetworkStatus returnValue = Use3G ;116117 i f ( ( f l a g s & kSCNetworkReachabi l i tyFlagsConnectionRequired )118 == 0)119 {120 /⇤121 I f the t a r g e t host i s r eachab l e and no connect ion i s r equ i r ed122 then we ’ l l assume ( f o r now) that you ’ re on Wi�Fi . . .123 ⇤/124 returnValue = UseWiFi ;125 }126127 i f ( ( ( ( f l a g s & kSCNetworkReachabilityFlagsConnectionOnDemand )128 != 0) | | ( f l a g s & kSCNetworkReachabi l i tyFlagsConnect ionOnTraf f ic )129 != 0) )130 {131 /⇤132 . . . and the connect ion i s on�demand ( or on�t r a f f i c ) i f the c a l l i n g133 app l i c a t i o n i s us ing the CFSocketStream or h igher APIs . . .134 ⇤/135136 i f ( ( f l a g s & kSCNetworkReachabi l i tyFlagsIntervent ionRequired )137 == 0)138 {139 /⇤140 . . . and no [ user ] i n t e r v en t i on i s needed . . .141 ⇤/142 returnValue = UseWiFi ;143 }144 }145

46

Page 51: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

146 i f ( ( f l a g s & kSCNetworkReachabilityFlagsIsWWAN) ==147 kSCNetworkReachabilityFlagsIsWWAN)148 {149 /⇤150 . . . but WWAN connec t i ons are OK i f151152 the c a l l i n g app l i c a t i o n153 i s us ing the CFNetwork APIs .154 ⇤/155 returnValue = Use3G ;156 }157158 re turn returnValue ;159 }160161 � ( NetworkStatus ) c u r r e n tAva i l a b i l i t y S t a t u s162 {163 NSAssert ( r e a chab i l i t yRe f != NULL, @”currentNetworkStatus164 c a l l e d with NULL SCNetworkReachabil ityRef ”) ;165166 NetworkStatus returnValue = Use3G ;167 SCNetworkReachabi l ityFlags f l a g s ;168169 i f ( SCNetworkReachabil ityGetFlags ( r e a chab i l i t yRe f , &f l a g s ) )170 {171 i f ( ReturnLocalWiFiStatus )172 {173 returnValue = [ s e l f l oca lWiFiStatusForFlags : f l a g s ] ;174 }175 e l s e176 {177 returnValue = [ s e l f networkStatusForFlags : f l a g s ] ;178 }179 }180181 re turn returnValue ;182 }183184 @end

47

Page 52: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 3: Fichero PDItemsTable.h

1 //2 // PDItemsTable . h3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 27/03/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89 #import <Foundation/Foundation . h>

1011 @int e r f a c e PDItemsTable : NSObject{1213 }1415 @property NSString ⇤changeTime ;16 @property NSString ⇤ value ;17 @property NSString ⇤ s s i d ;1819 @end

48

Page 53: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 4: Fichero PDItemsTable.m

1 //2 // PDItemsTable .m3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 27/03/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89 #import ”PDItemsTable . h”

1011 @implementation PDItemsTable1213 @end

49

Page 54: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Controladores

Codigo fuente 5: Fichero PDMainViewController.h

1 //2 // PDMainViewController . h3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 27/01/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89 #import <SystemConf igurat ion /CaptiveNetwork . h>

10 #import <AudioToolbox/AudioServ ices . h>11 #import <AVFoundation/AVFoundation . h>12 #import <UIKit/UIKit . h>13 #import ”PDSett ingsViewContro l ler . h”14 #import ”PDRecordTableViewController . h”15 #import ”PDAvailabi l i tyNetwork . h”16 #import ”PDItemsTable . h”17 #import ”PDMailComposeViewController . h”1819 NSMutableString ⇤mySSIDString , ⇤ a l e r tMessageSt r ing ,20 ⇤ ema i lRec ip i en tS t r i ng ;21 NSMutableArray ⇤ ar rayResu l t s ;22 NSString ⇤ startHour ;23 f l o a t scanFrequency , minIntervalForChange ;24 PDAvai labi l i tyNetwork ⇤ i n t e r n e tAv a i l a b i l i t y ;2526 @int e r f a c e PDMainViewController : UIViewControl ler {2728 }2930 @property ( nonatomic , weak ) NSString ⇤ targetSSID ;31 @property ( nonatomic , weak ) PDAvai labi l i tyNetwork ⇤ w i f i A v a i l a b i l i t y ;32 @property ( nonatomic , weak ) NSTimer ⇤ t imer ;33 @property ( nonatomic ) f l o a t s s idResu l , targetWifiTime , totalTime , f l a g ,34 f l agS ta tu s , control3G , controlTW , controlNTW ;35 @property ( nonatomic , weak ) IBOutlet UILabel ⇤ c u r r e n t s s i d ;36 @property ( nonatomic , weak ) IBOutlet UILabel ⇤ startTime , ⇤ currentHour ;37 @property ( nonatomic , weak ) IBOutlet UILabel ⇤ f i n a lR e s u l t ;38 @property ( nonatomic , weak ) IBOutlet UILabel ⇤ s ta tu sLabe l ;3940 /⇤41 ⇤ Return Current Wif i SSID .42 ⇤/43 �(NSString ⇤) currentSSID ;4445 /⇤46 ⇤ Star t mon i to r i z e Presence in Target Wif i .

50

Page 55: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

47 ⇤/48 �(IBAction ) s t a r tMon i t o r i z e : ( id ) sender ;4950 /⇤51 ⇤ Stop moni tor i z e Presence in Target Wif i .52 ⇤/53 �(IBAction ) s topMoni tor i ze : ( id ) sender ;5455 /⇤56 ⇤ Star t NSTimer f o r count time in Target Wif i57 ⇤/58 �(void ) s t a r t : ( NSTimer⇤) t imer ;5960 /⇤61 ⇤ Reset NSTimer62 ⇤/63 �(IBAction ) resetTargetWif iTime : ( id ) sender ;6465 /⇤66 ⇤ Conf igure User I n t e r f a c e67 ⇤/68 �(void ) c on f i g u r e I n t e r f a c eWi thAva i l a b i l i t y :69 ( PDAvai labi l i tyNetwork ⇤) a v a i l a b i l i t y ;7071 /⇤72 ⇤ Show message i f S e t t i n g s are incompleted .73 ⇤/74 �(void ) showAlertMessage1 ;7576 /⇤77 ⇤ Show message i f Target Wif i Connect or Disconnect78 ⇤/79 �(void ) l o c a l N o t i f i c a t i o n ;8081 /⇤82 ⇤ Return cur r ent time83 ⇤/84 �(NSString ⇤) getHour ;8586 @end

51

Page 56: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 6: Fichero PDMainViewController.m

1 //2 // PDMainViewController .m3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 27/01/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89 #import ”PDMainViewController . h”

10 #import <SystemConf igurat ion /CaptiveNetwork . h>1112 @int e r f a c e PDMainViewController ( )1314 @end1516 @implementation PDMainViewController1718 @synthes ize timer , targetSSID , currentHour , f l a gS ta tu s ,19 control3G , controlNTW , controlTW ;20 @synthes ize s s idResu l , targetWifiTime , totalTime , f l ag ,21 cu r r en t s s i d , startTime , f i n a lR e s u l t ;2223 � ( id ) initWithNibName : ( NSString ⇤) nibNameOrNil bundle :24 (NSBundle ⇤) nibBundleOrNil25 {26 s e l f = [ super initWithNibName : nibNameOrNil27 bundle : nibBundleOrNil ] ;28 i f ( s e l f ) {29 // Custom i n i t i a l i z a t i o n30 }31 re turn s e l f ;32 }3334 � ( void ) viewDidLoad35 {36 [ super viewDidLoad ] ;37 // Do any add i t i o na l setup a f t e r l oad ing the view .3839 i f ( [ [ a r rayResu l t s objectAtIndex : 0 ] intValue ] == 0)40 {41 ar rayResu l t s = [ [ NSMutableArray a l l o c ] i n i t ] ;42 }4344 i n t e r n e tAv a i l a b i l i t y = [ PDAvai labi l i tyNetwork45 ava i l ab i l i t yFo r In t e rn e tConne c t i on ] ;46 }47

52

Page 57: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

48 �(void ) c on f i g u r e I n t e r f a c eWi thAva i l a b i l i t y :49 ( PDAvai labi l i tyNetwork ⇤) a v a i l a b i l i t y50 {51 NetworkStatus netStatus = [ a v a i l a b i l i t y c u r r e n tAva i l a b i l i t y S t a t u s ] ;52 NSString ⇤ s s i dLabe l = @””;53 currentHour . t ex t = [ s e l f getHour ] ;54 PDItemsTable ⇤ item = [ [ PDItemsTable a l l o c ] i n i t ] ;55 PDMailComposeViewController ⇤mailView =56 [ [ PDMailComposeViewController a l l o c ] i n i t ] ;5758 switch ( netStatus ) {59 case Use3G : {60 NSLog(@”3G”) ;61 controlNTW = 0 ;62 controlTW = 0 ;63 control3G += scanFrequency ;64 s s i dLabe l = NSLoca l i zedStr ing (@”Not Using Wifi ” , @””) ;65 item . changeTime = [ s e l f getHour ] ;66 item . va lue = @”3G”;67 item . s s i d = @”3G”;68 i f ( ( f l a gS t a t u s == 0 | | f l a gS t a t u s == 2 | | f l a gS t a t u s == 3 | |69 ( [ a r rayResu l t s count ] < 1) ) && control3G70 >= minIntervalForChange ){71 [ a r rayResu l t s addObject : item ] ;72 f l a gS t a t u s = 1 ;73 }7475 i f ( s e l f . f l a g == 1)76 {77 AudioServicesPlaySystemSound ( kSystemSoundID Vibrate ) ;78 [ s e l f l o c a l N o t i f i c a t i o n ] ;79 [ mailView send : [ NSString stringWithFormat :@”80 %@ ��> Target SSID Disconnect . Your Status i s 3G. ” ,81 item . changeTime ] ] ;82 s e l f . f l a g++;83 }84 break ;85 }86 case UseWiFi : {87 control3G = 0 ;88 s s i dLabe l = [ s e l f currentSSID ] ;89 i f ( [ mySSIDString i sEqualToStr ing : s s i dLabe l ] &&90 s e l f . totalTime != 0)91 s e l f . s s i dRe su l = 1 ;9293 i f ( s e l f . s s i dRe su l == 1){94 NSLog(@”Target SSID ”) ;95 controlTW += scanFrequency ;96 controlNTW = 0 ;

53

Page 58: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

97 f l a g = 1 ;98 targetWif iTime += scanFrequency ;99 item . changeTime = [ s e l f getHour ] ;100 item . va lue = @”Target SSID ”;101 item . s s i d = [ s e l f currentSSID ] ;102 i f ( ( f l a gS t a t u s == 0 | | f l a gS t a t u s == 1 | | f l a gS t a t u s == 3 | |103 ( [ a r rayResu l t s count ] < 1) ) && controlTW104 >= minIntervalForChange ){105 [ a r rayResu l t s addObject : item ] ;106 f l a gS t a t u s = 2 ;107 AudioServicesPlaySystemSound ( kSystemSoundID Vibrate ) ;108 [ s e l f l o c a l N o t i f i c a t i o n ] ;109 [ mailView send : [ NSString stringWithFormat :@”110 %@ ��> Connect to Target SSID , %@. ” ,111 item . changeTime , item . s s i d ] ] ;112 }113114 } e l s e {115 NSLog(@”No ta r g e t SSID ”) ;116 controlTW = 0 ;117 controlNTW += scanFrequency ;118 item . changeTime = [ s e l f getHour ] ;119 item . va lue = @”No ta r g e t SSID ”;120 item . s s i d = [ s e l f currentSSID ] ;121122 i f ( ( f l a gS t a t u s == 0 | | f l a gS t a t u s == 1 | | f l a gS t a t u s == 2 | |123 ( [ a r rayResu l t s count ] < 1) ) && controlNTW >=124 minIntervalForChange ){125 [ a r rayResu l t s addObject : item ] ;126 f l a gS t a t u s = 3 ;127 }128129 i f ( s e l f . f l a g == 1)130 {131 AudioServicesPlaySystemSound ( kSystemSoundID Vibrate ) ;132 [ s e l f l o c a l N o t i f i c a t i o n ] ;133 [ mailView send : [ NSString stringWithFormat :134 @”% @ ��> Target SSID Disconnect . Your Status i s135 %@. ” , item . changeTime , item . s s i d ] ] ;136 s e l f . f l a g++;137 }138 }139 break ;140 }141 d e f au l t :142 break ;143 }144 s e l f . c u r r e n t s s i d . t ex t = s s i dLabe l ;145 }

54

Page 59: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

146147 �(NSString ⇤) currentSSID148 {149 NSString ⇤ s s i d = n i l ;150 NSArray ⇤ i f s = ( b r i dg e id ) CNCopySupportedInterfaces ( ) ;151 f o r ( NSString ⇤ i fnam in i f s )152 {153 NSDictionary ⇤ i n f o = ( b r i dg e id )154 CNCopyCurrentNetworkInfo ( ( b r i dg e CFStringRef ) ifnam ) ;155 i f ( i n f o [@”SSID ”] ) {156 s s i d = i n f o [@”SSID ”] ;157 NSLog(@”%@” , s s i d ) ;158 }159 }160 re turn s s i d ;161 }162163 �(NSString ⇤) getHour{164 //Current date165 NSDate ⇤ today = [ NSDate dateWithTimeIntervalSinceNow : 0 ] ;166 //Hour , minutes and seconds167 NSCalendar ⇤ g r ego r i an = [ [ NSCalendar a l l o c ]168 i n i tWi thCa l enda r I d en t i f i e r : NSGregorianCalendar ] ;169170 NSDateComponents ⇤dateComponents = [ g r ego r i an components :171 ( NSHourCalendarUnit | NSMinuteCalendarUnit |172 NSSecondCalendarUnit ) fromDate : today ] ;173174 NSInteger hours = [ dateComponents hour ] ;175 NSInteger minutes = [ dateComponents minute ] ;176177 NSString ⇤hora = [ NSString stringWithFormat :178 @”%02 i :%02 i ” , hours , minutes ] ;179180 re turn hora ;181 }182183 �(IBAction ) s t a r tMon i t o r i z e : ( id ) sender184 {185 startHour = [ s e l f getHour ] ;186 s e l f . t imer = [ NSTimer scheduledTimerWithTimeInterval : scanFrequency187 ta r g e t : s e l f s e l e c t o r : @se l e c to r ( s t a r t : ) u s e r I n f o : n i l r epea t s :YES ] ;188 i f ( ( mySSIDString != n i l && a l e r tMes sageSt r ing != n i l &&189 scanFrequency != 0 && minIntervalForChange != 0) )190 s ta tusLabe l . t ex t = @”You are us ing Presence Detector ”;191 }192193 �(void ) s t a r t : ( NSTimer⇤) t imer194 {

55

Page 60: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

195 i f ( ( mySSIDString == n i l | | a l e r tMes sageS t r ing == n i l196 | | scanFrequency == 0 | |197 minIntervalForChange == 0)){198 [ s e l f showAlertMessage1 ] ;199 [ s e l f . t imer i n v a l i d a t e ] ;200 } e l s e {201 s e l f . totalTime += scanFrequency ;202 startTime . t ex t = startHour ;203 [ s e l f c on f i g u r e I n t e r f a c eWi thAva i l a b i l i t y : i n t e r n e tAv a i l a b i l i t y ] ;204 }205206 }207208 �(void ) l o c a l N o t i f i c a t i o n209 {210 UILoca lNo t i f i c a t i on ⇤ l o c a l N o t i f i c a t i o n = [ [ U ILoca lNo t i f i c a t i on211 a l l o c ] i n i t ] ;212 l o c a l N o t i f i c a t i o n . f i r eDa t e = [ NSDate213 dateWithTimeIntervalSinceNow : 0 ] ;214 l o c a l N o t i f i c a t i o n . a lertBody = a l e r tMes sageSt r ing ;215 l o c a l N o t i f i c a t i o n . soundName = UILocalNoti f icat ionDefaultSoundName ;216 l o c a l N o t i f i c a t i o n . timeZone = [ NSTimeZone defaultTimeZone ] ;217 // l o c a l N o t i f i c a t i o n . applicationIconBadgeNumber = 1 ;218 [ [ UIAppl icat ion sharedApp l i ca t ion ]219 s ch edu l eLo c a lNo t i f i c a t i o n : l o c a l N o t i f i c a t i o n ] ;220 }221222 �(IBAction ) resetTargetWif iTime : ( id ) sender223 {224 // Time(%) in Target SSID225 f l o a t r e s u l t = ( s e l f . targetWif iTime / s e l f . totalTime )⇤1 ⇤ 100 ;226 NSString ⇤ s t r = [ NSString stringWithFormat :@”% .2 f ” , r e s u l t ] ;227 s e l f . f i n a lR e s u l t . t ex t = s t r ;228 s e l f . targetWif iTime = 0 ;229 }230231 �(IBAction ) s topMoni tor i ze : ( id ) sender232 {233 i f ( s e l f . t imer != n i l )234 {235 [ s e l f . t imer i n v a l i d a t e ] ;236 s e l f . t imer = n i l ;237 s e l f . totalTime = 0 ;238 mySSIDString = n i l ;239 a l e r tMes sageS t r ing = n i l ;240 scanFrequency = 0 ;241 f l a g S e t t i n g = 0 ;242 }243 }

56

Page 61: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

244245 �(void ) showAlertMessage1246 {247 UIAlertView ⇤message = [ [ UIAlertView a l l o c ] i n i tWi thT i t l e :@”ERROR”248 message :@”Enter your S e t t i n g s ”249 de l e ga t e : s e l f cance lBut tonTi t l e :@”OK”250 otherButtonTi t l e s : n i l , n i l ] ;251 [ message show ] ;252 }253254 �(void ) a le r tView : ( UIAlertView ⇤) a l e r tView255 cl ickedButtonAtIndex : ( NSInteger ) buttonIndex256 {257 NSString ⇤ t i t l e = [ a le r tView buttonTit leAtIndex : buttonIndex ] ;258 i f ( [ t i t l e i sEqualToStr ing :@”OK”] ) {259 NSLog(@”Ha pulsado OK”) ;260 }261 }262263 � ( void ) didReceiveMemoryWarning264 {265 [ super didReceiveMemoryWarning ] ;266 // Dispose o f any r e s ou r c e s that can be r e c r ea t ed .267 }268269270 /⇤271 #pragma mark � Navigat ion272273 // In a storyboard�based app l i c a t i on , you w i l l o f t en want to do a274 l i t t l e preparat i on275 be f o r e nav iga t i on276 � ( void ) prepareForSegue : ( UIStoryboardSegue ⇤) segue277 sender : ( id ) sender278 {279 // Get the new view c o n t r o l l e r us ing [ segue de s t i na t i onV i ewCont ro l l e r ] .280 // Pass the s e l e c t e d ob j e c t to the new view c o n t r o l l e r .281 }282 ⇤/283284 @end

57

Page 62: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 7: Fichero PDRecordTableViewController.h

1 //2 // PDRecordTableViewController . h3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 27/01/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89 #import <UIKit/UIKit . h>

1011 #import ”PDSett ingsViewContro l ler . h”12 #import ”PDAvailabi l i tyNetwork . h”13 #import ”PDMainViewController . h”141516 @int e r f a c e PDRecordTableViewController : UITableViewControl ler {1718 }1920 /⇤21 ⇤ Come back to TFGMainViewController22 ⇤/23 �(IBAction ) vo lve r : ( id ) sender ;2425 /⇤ !26 ⇤ Reset Network Changes Record27 ⇤/28 �(IBAction ) rese tRecord : ( id ) sender ;2930 @end

58

Page 63: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 8: Fichero PDRecordTableViewController.m

1 //2 // PDRecordTableViewController .m3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 27/01/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89 #import ”PDRecordTableViewController . h”

1011 @int e r f a c e PDRecordTableViewController ( )1213 @end1415 @implementation PDRecordTableViewController1617 � ( id ) initWithNibName : ( NSString ⇤) nibNameOrNil bundle :18 (NSBundle ⇤) nibBundleOrNil19 {20 s e l f = [ super initWithNibName : nibNameOrNil21 bundle : nibBundleOrNil ] ;22 i f ( s e l f ) {23 // Custom i n i t i a l i z a t i o n2425 }26 re turn s e l f ;27 }2829 � ( void ) viewDidLoad30 {3132 [ super viewDidLoad ] ;3334 }3536 �(NSInteger ) numberOfSectionsInTableView :37 (UITableView ⇤) tableView38 {39 re turn 1 ;40 }4142 �(NSInteger ) tableView : ( UITableView ⇤) tableView43 numberOfRowsInSection : ( NSInteger ) s e c t i o n44 {45 re turn [ a r rayResu l t s count ] ;46 }47

59

Page 64: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

48 �(UITableViewCell ⇤) tableView : ( UITableView ⇤) tableView49 cellForRowAtIndexPath : ( NSIndexPath ⇤) indexPath50 {51 s t a t i c NSString ⇤ c e l l I d e n t i f i e r = @”myCell ”;5253 UITableViewCell ⇤ c e l l = [ tableView54 dequeueReusab l eCe l lWith Ident i f i e r : c e l l I d e n t i f i e r55 forIndexPath : indexPath ] ;5657 PDItemsTable ⇤ item = [ ar rayResu l t s objectAtIndex : indexPath . row ] ;58 c e l l . t extLabe l . t ex t = [ NSString stringWithFormat :59 @ ”% @ ���> Status : %@” , item . changeTime , item . s s i d ] ;6061 re turn c e l l ;62 }6364 � ( void ) didReceiveMemoryWarning65 {66 [ super didReceiveMemoryWarning ] ;67 // Dispose o f any r e s ou r c e s that can be r e c r ea t ed .68 }6970 �(IBAction ) rese tRecord : ( id ) sender71 {72 [ a r rayResu l t s removeAllObjects ] ;73 }74 �(IBAction ) vo lve r : ( id ) sender75 {76 [ s e l f d ismissViewContro l lerAnimated :YES complet ion : n i l ] ;77 }78 /⇤79 #pragma mark � Navigat ion8081 // In a storyboard�based app l i c a t i on , you w i l l o f t en want82 // to do a l i t t l e preparat i on be f o r e nav igat i on83 � ( void ) prepareForSegue : ( UIStoryboardSegue ⇤) segue84 sender : ( id ) sender85 {86 // Get the new view c o n t r o l l e r us ing87 // [ segue de s t i na t i onV i ewCont ro l l e r ] .88 // Pass the s e l e c t e d ob j e c t to the new view c o n t r o l l e r .89 }90 ⇤/9192 @end

60

Page 65: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 9: Fichero PDSettingsViewController.h

1 //2 // PDSett ingsViewContro l ler . h3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 27/01/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89 #import <UIKit/UIKit . h>

10 #import ”PDAvailabi l i tyNetwork . h”11 #import ”PDMainViewController . h”12 #import ”PDRecordTableViewController . h”1314 i n t f l a g S e t t i n g ;1516 @int e r f a c e PDSett ingsViewContro l ler : UIViewControl ler {1718 }1920 @property ( nonatomic , weak ) IBOutlet UITextField ⇤mySSID ;21 @property ( nonatomic , weak ) IBOutlet UITextField ⇤ ss idScanFrequency ;22 @property ( nonatomic , weak ) IBOutlet UITextField ⇤minInterva l ;23 @property ( nonatomic , weak ) IBOutlet UITextField ⇤ a le r tMessage ;24 @property ( nonatomic , weak ) IBOutlet UITextField ⇤ emai l ;2526 /⇤ !27 ⇤ Come back to TFGMainViewController28 ⇤/29 �(IBAction ) vo lve r : ( id ) sender ;3031 /⇤ !32 ⇤ Apply s e t t i n g s to mon i to r i ze .33 ⇤/34 �(IBAction ) app lySe t t ing s : ( id ) sender ;3536 /⇤ !37 ⇤ Close keyboards38 ⇤/39 �(IBAction ) closeKeyboardmySSID : ( id ) sender ;40 �(IBAction ) closeKeyboardFreq : ( id ) sender ;41 �(IBAction ) closeKeyboardAlarm : ( id ) sender ;42 �(IBAction ) c loseKeyboardMinInterva l : ( id ) sender ;434445 @end

61

Page 66: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 10: Fichero PDSettingsViewController.m

1 //2 // PDSett ingsViewContro l ler .m3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 27/01/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89

10 #import ”PDSett ingsViewContro l ler . h”1112 @int e r f a c e PDSett ingsViewContro l ler ( )1314 @end1516 @implementation PDSett ingsViewContro l ler1718 @synthes ize mySSID ;19 @synthes ize ss idScanFrequency ;20 @synthes ize a l e r tMessage ;21 @synthes ize minInterva l ;22 @synthes ize emai l ;2324 � ( id ) initWithNibName : ( NSString ⇤) nibNameOrNil bundle :25 (NSBundle ⇤) nibBundleOrNil26 {27 s e l f = [ super initWithNibName : nibNameOrNil28 bundle : nibBundleOrNil ] ;29 i f ( s e l f ) {30 // Custom i n i t i a l i z a t i o n31 }32 re turn s e l f ;33 }3435 � ( void ) viewDidLoad36 {37 i f ( f l a g S e t t i n g == 0) {38 a le r tMessage . t ex t = @”Change in S i tua t i on ”;39 ss idScanFrequency . t ex t = @”1 5 ”;40 minInterva l . t ex t = @”2 0 ”;41 } e l s e {42 mySSID . t ex t = mySSIDString ;4344 a le r tMessage . t ex t = a l e r tMes sageSt r ing ;4546 ss idScanFrequency . t ex t = [ NSString47 stringWithFormat :@”%.1 f ” , scanFrequency ] ;

62

Page 67: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

4849 minInterva l . t ex t = [ NSString50 stringWithFormat :@”%.1 f ” , minIntervalForChange ] ;5152 emai l . t ex t = ema i lRec ip i en tS t r i ng ;53 }54 }5556 �(IBAction ) app lySe t t ing s : ( id ) sender57 {58 f l a g S e t t i n g = 1 ;5960 mySSIDString = [ NSMutableString61 s t r ingWithSt r ing :mySSID . t ex t ] ;6263 scanFrequency = [ ss idScanFrequency . t ex t f l oa tVa lue ] ;6465 a l e r tMes sageSt r ing = [ NSMutableString66 s t r ingWithSt r ing : a l e r tMessage . t ex t ] ;6768 minIntervalForChange = [ minInterva l . t ex t f l oa tVa lue ] ;6970 ema i lRec ip i en tS t r i ng = [ NSMutableString71 s t r ingWithSt r ing : emai l . t ex t ] ;72 }7374 �(IBAction ) vo lve r : ( id ) sender75 {76 [ s e l f d ismissViewContro l lerAnimated :YES77 complet ion : n i l ] ;78 }7980 �(IBAction ) closeKeyboardmySSID : ( id ) sender81 {82 [mySSID re s i gnF i r s tResponder ] ;83 }8485 �(IBAction ) closeKeyboardAlarm : ( id ) sender86 {87 [ a l e r tMessage r e s i gnF i r s tResponder ] ;88 }8990 �(IBAction ) closeKeyboardFreq : ( id ) sender91 {92 [ ss idScanFrequency re s i gnF i r s tResponder ] ;93 }9495 �(IBAction ) c loseKeyboardMinInterva l : ( id ) sender96 {

63

Page 68: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

97 [ minInterva l r e s i gnF i r s tResponder ] ;98 }99100 �(IBAction ) closeKeyboardEmail : ( id ) sender101 {102 [ emai l r e s i gnF i r s tResponder ] ;103 }104105106 @end

64

Page 69: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 11: Fichero PDMailComposeViewController.h

1 //2 // PDMailComposeViewController . h3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 29/03/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89 #import <UIKit/UIKit . h>

10 #import <MessageUI/MessageUI . h>1112 #import ”sendgr id . h”13 #import ”PDMainViewController . h”1415 @int e r f a c e PDMailComposeViewController : UIViewControl ler16 <MFMailComposeViewControllerDelegate>{1718 }1920 /⇤ !21 ⇤ Send emai l22 ⇤/23 �(void ) send : ( NSString ⇤) body ;242526 @end

65

Page 70: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 12: Fichero PDMailComposeViewController.m

1 //2 // PDMailComposeViewController .m3 // Presence Detector4 //5 // Created by Franc i sco Ort i z Abr i l on 29/03/14.6 // Copyright ( c ) 2014 US. Al l r i g h t s r e s e rved .7 //89 #import ”PDMailComposeViewController . h”

1011 @int e r f a c e PDMailComposeViewController ( )1213 @end1415 @implementation PDMailComposeViewController1617 � ( id ) initWithNibName : ( NSString ⇤) nibNameOrNil bundle :18 (NSBundle ⇤) nibBundleOrNil19 {20 s e l f = [ super initWithNibName : nibNameOrNil21 bundle : nibBundleOrNil ] ;22 i f ( s e l f ) {23 // Custom i n i t i a l i z a t i o n24 }25 re turn s e l f ;26 }2728 �(void ) send : ( NSString ⇤) body29 {30 sendgr id ⇤msg = [ sendgr id user :@”Fort i z2305 ”31 andPass :@”Proyecto2014 ”] ;32 msg . to = ema i lRec ip i en tS t r i ng ;33 msg . sub j e c t = @”Presence Detector ”;34 msg . t ex t = body ;35 msg . from = @”presencedetector2014@gmai l . com ”;36 msg . html = body ;3738 [msg sendWithWeb ] ;39 }4041 � ( void ) viewDidLoad42 {43 [ super viewDidLoad ] ;44 // Do any add i t i o na l setup a f t e r l oad ing the view .45 }4647 � ( void ) didReceiveMemoryWarning

66

Page 71: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

48 {49 [ super didReceiveMemoryWarning ] ;50 // Dispose o f any r e s ou r c e s that can be r e c r ea t ed .51 }5253 /⇤54 #pragma mark � Navigat ion5556 // In a storyboard�based app l i c a t i on , you w i l l o f t en want57 // to do a l i t t l e preparat i on be f o r e nav igat i on58 � ( void ) prepareForSegue : ( UIStoryboardSegue ⇤) segue59 sender : ( id ) sender60 {61 // Get the new view c o n t r o l l e r us ing62 // [ segue de s t i na t i onV i ewCont ro l l e r ] .63 // Pass the s e l e c t e d ob j e c t to the new view c o n t r o l l e r .64 }65 ⇤/6667 @end

67

Page 72: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

SendGrid

Codigo fuente 13: Fichero Sendgrid.h

1 //2 // sendgr id . h345 #import <Foundation/Foundation . h>67 @int e r f a c e sendgr id : NSObject89 @property ( nonatomic , s t rong ) NSString ⇤ apiUser ;

10 @property ( nonatomic , s t rong ) NSString ⇤apiKey ;11 @property ( nonatomic , s t rong ) NSString ⇤ sub j e c t ;12 @property ( nonatomic , s t rong ) NSString ⇤ from ;13 @property ( nonatomic , s t rong ) NSString ⇤ to ;14 @property ( nonatomic , s t rong ) NSString ⇤ t ex t ;15 @property ( nonatomic , s t rong ) NSString ⇤html ;16 @property ( nonatomic , s t rong ) NSString ⇤xsmtpapi ;17 @property ( nonatomic , s t rong ) NSString ⇤bcc ;18 @property ( nonatomic , s t rong ) UIImage ⇤ img ;19 @property ( nonatomic , s t rong ) NSArray ⇤ t o l i s t ;20 @property ( nonatomic , s t rong ) NSString ⇤toName ;21 @property ( nonatomic , s t rong ) NSString ⇤fromName ;22 @property ( nonatomic , s t rong ) NSString ⇤ r ep l y t o ;23 @property ( nonatomic , s t rong ) NSString ⇤date ;24 @property ( nonatomic , s t rong ) NSString ⇤ content ;25 @property ( nonatomic , a s s i gn ) BOOL in l inePhoto ;26 @property ( nonatomic , s t rong )27 NSMutableDictionary ⇤headers ;282930 + ( in s tance type ) user : ( NSString ⇤) apiUser31 andPass : ( NSString ⇤) apiKey ;32 �( id ) in i tWithUser : ( NSString ⇤) apiUser33 andPass : ( NSString ⇤) apiKey ;34 � ( void ) addCustomHeader : ( id ) va lue35 withKey : ( id ) key ;36 � ( void ) attachImage : ( UIImage ⇤) img ;37 � ( NSString ⇤) headerEncode :38 ( NSDictionary ⇤) header ;39 � ( void ) sendWithWeb ;4041 @end

68

Page 73: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

Codigo fuente 14: Fichero Sendgrid.m

1 //2 // sendgr id .m3 //45 #import ”sendgr id . h”6 #import ”AFNetworking . h”78 NSString ⇤ const sgDomain = @”https : // sendgr id . com/ ”;9 NSString ⇤ const sgEndpoint = @”api /mail . send . j son ”;

101112 @implementation sendgr id1314 + ( in s tance type ) user : ( NSString ⇤) apiUser15 andPass : ( NSString ⇤) apiKey{16 // pub l i c method that c r e a t e s the mail17 // ob j e c t and re tu rn s that ob j e c t1819 sendgr id ⇤message = [ [ s endgr id a l l o c ]20 in i tWithUser : apiUser andPass : apiKey ] ;2122 re turn message ;23 }242526 �( id ) in i tWithUser : ( NSString ⇤) apiUser andPass : ( NSString ⇤) apiKey{27 // p r i va t e method that c r e a t e s the mail ob j e c t28 s e l f = [ super i n i t ] ;29 i f ( s e l f ) {30 s e l f . apiUser = apiUser ;31 s e l f . apiKey = apiKey ;32 s e l f . headers = [ NSMutableDictionary new ] ;33 [ s e l f s e t In l i n ePho to : f a l s e ] ;34 }35 re turn s e l f ;36 }3738 � ( void ) attachImage : ( UIImage ⇤) img {39 // at tache s image to be posted40 s e l f . img = img ;41 }424344 � ( NSString ⇤) headerEncode : ( NSMutableDictionary ⇤) header {45 //Converts NSDictionary o f Header arguments to JSON s t r i n g4647 NSError ⇤ e r r o r ;

69

Page 74: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

48 NSData ⇤ jsonData = [ NSJSONSerial izat ion49 dataWithJSONObject : header50 opt ions : 051 e r r o r :& e r r o r ] ;5253 NSString ⇤JSONString = [ [ NSString a l l o c ]54 in i tWithBytes : [ jsonData bytes ] l ength : [ jsonData l ength ]55 encoding : NSUTF8StringEncoding ] ;5657 i f ( ! jsonData )58 NSLog(@”JSON e r r o r : %@” , e r r o r ) ;596061 re turn JSONString ;6263 }6465 � ( void ) addCustomHeader : ( id ) va lue withKey : ( id ) key{66 //Adds custom header arguments to header d i c t i ona ry6768 [ s e l f . headers se tObjec t : va lue forKey : key ] ;69 }7071 � ( void ) sendWithWeb{7273 //Uses Web Api to send emai l7475 NSString ⇤URL = [ NSString stringWithFormat :76 @”% @%@” , sgDomain , sgEndpoint ] ;7778 // Items to add to Header and convert to j son79 i f ( s e l f . t o l i s t != n i l ){80 [ s e l f . headers se tObjec t : s e l f . t o l i s t forKey :@”to ”] ;81 s e l f . to=[ s e l f . t o l i s t objectAtIndex : 0 ] ;82 }838485 i f ( s e l f . headers != n i l )86 s e l f . xsmtpapi = [ s e l f headerEncode : s e l f . headers ] ;878889 // Bui ld ing up Parameter Dic t ionary90 NSMutableDictionary ⇤parameters =[NSMutableDictionary91 d ic t ionaryWithDict ionary :@{@”ap i u s e r ”: s e l f . apiUser ,92 @”api key ”: s e l f . apiKey , // r equ i r ed93 @”sub j e c t ”: s e l f . sub jec t , // r equ i r ed94 @”from ”: s e l f . from , // r equ i r ed95 @”html ”: s e l f . html , // r equ i r ed96 @”to ”: s e l f . to , // r equ i r ed

70

Page 75: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

97 @”text ”: s e l f . text , // r equ i r ed98 @”x�smtpapi ”: s e l f . xsmtpapi99 } ] ;100101102 // op t i ona l parameters103 i f ( s e l f . bcc != n i l )104 [ parameters se tObjec t : s e l f . bcc forKey :@”bcc ”] ;105106 i f ( s e l f . toName != n i l )107 [ parameters se tObjec t : s e l f . toName forKey :@”toname ”] ;108109 i f ( s e l f . fromName != n i l )110 [ parameters se tObjec t : s e l f . fromName forKey :@”fromname ”] ;111112 i f ( s e l f . r ep l y t o != n i l )113 [ parameters se tObjec t : s e l f . r ep l y t o forKey :@”r ep l y t o ”] ;114115 i f ( s e l f . date != n i l )116 [ parameters se tObjec t : s e l f . date forKey :@”date ”] ;117118 i f ( s e l f . i n l i n ePhoto )119 [ parameters se tObjec t :@”image . png ” forKey :120 @”content [ image . png ] ” ] ;121122123 // Post ing Paramters to s e r v e r us ing AFNetworking 2 .0124125 AFHTTPRequestOperationManager ⇤manager =126 [ AFHTTPRequestOperationManager manager ] ;127128 [ manager POST:URL parameters : parameters129130 constructingBodyWithBlock : (id<AFMultipartFormData>formData) //if ima-

ge attachment exists it will post itif(self.img!=nil)NSData *imageData = UIImagePNGRepresentation(self.img);[formData appendPartWithFileData:imageData name:@”files[image.png]”fileName:@ımage.png”mimeType:@ımage/png”];success:(AFHTTPRequestOperation ⇤ operat ion , id responseObject ) {

131132 // NSLog(@”Success : %@” , responseObject ) ;133134 } f a i l u r e : (AFHTTPRequestOperation *operation, NSError *error) NSLog(@ Error:

];@end

71

Page 76: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

AFNetworking

Codigo fuente 15: Fichero AFNetworking.h

12 // AFNetworking . h34 // Copyright ( c ) 2013 AFNetworking ( http :// afnetwork ing . com/)56 // THE SOFTWARE IS PROVIDED ”AS IS ” , WITHOUT WARRANTY7 //OF ANY KIND, EXPRESS OR8 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES9 // OF MERCHANTABILITY,

10 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.11 // IN NO EVENT SHALL THE12 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,13 // DAMAGES OR OTHER14 // LIABILITY , WHETHER IN AN ACTION OF CONTRACT, TORT OR15 //OTHERWISE, ARISING FROM,16 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE17 // OR OTHER DEALINGS IN THE SOFTWARE.1819 #import <Foundation/Foundation . h>20 #import <Ava i l a b i l i t y . h>2122 #i f n d e f AFNETWORKING23 #de f i n e AFNETWORKING2425 #import ”AFURLRequestSerial ization . h”26 #import ”AFURLResponseSerial ization . h”27 #import ”AFSecur ityPol icy . h”28 #import ”AFNetworkReachabilityManager . h”2930 #import ”AFURLConnectionOperation . h”31 #import ”AFHTTPRequestOperation . h”32 #import ”AFHTTPRequestOperationManager . h”3334 #i f ( ( de f i n ed ( MAC OS X VERSION MAX ALLOWED) &&35 MAC OS X VERSION MAX ALLOWED >= 1090) | | \36 ( de f i ned ( IPHONE OS VERSION MAX ALLOWED) &&37 IPHONE OS VERSION MAX ALLOWED >= 70000 ) )3839 #import ”AFURLSessionManager . h”40 #import ”AFHTTPSessionManager . h”4142 #end i f4344 #end i f /⇤ AFNETWORKING ⇤/

72

Page 77: Universidad de Sevilla - Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de ...bibing.us.es/proyectos/abreproy/90012/fichero/TFG.pdf · donde los desarrolladores publican

El codigo completo de la librerıa AFNetworking se puede encontrar en el repositorio deGithub[29].

73