scieee AI-readable full text Open interactive document viewer

Desarrollo de una aplicación en iOS para la Cámara de Comercio de Málaga

Andrade García, Francisco

Abstract

Este trabajo consiste en el diseño y desarrollo de una primera versión de una aplicación móvil para dispositivos que ejecuten iOS, para la promoción de los servicios de la Cámara de Comercio de Málaga. Se presentan las ofertas de los departamentos de Comercio Exterior y Turismo, Formación, ayudas y subvenciones gestionadas por el departamento de Servicios a Pymes y Autónomos, y las Licitaciones y ofertas de contratación. La aplicación móvil obtiene los datos de las webs de la corporación en un objeto JSON, para lo que se ha desarrollado una pequeña aplicación en php. La aplicación móvil procesa este objeto JSON, y almacena la información en una base de datos SQLite, para presentarlos al usuario. En la pantalla inicial se ofrece el acceso a las ofertas de servicios, y funcionalidad para contactar por correo electrónico o por teléfono. La información de los servicios ofertados se ofrece en formato listado-detalle para los servicios, ofreciendo la solicitud de ampliación de información en un email formateado. Con acceso desde la pantalla inicial, también se ofrecen servicios de geolocalización, mediante un sistema de rutas, en la que el usuario puede ver la localización de la Cámara de Comercio, calcular su ruta para llegar, y puede seguir esta ruta mediante una representación etapa por etapa, de manera gráfica, en el mapa, con indicaciones detalladas de camino, duración, etc.

Full text

ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA Grado en Ingeniería del Software Desarrollo de una aplicación en iOS para la Cámara de Comercio de Málaga Development of an iOS application for the Malaga Chamber of Commerce Realizado por Francisco Andrade García Tutorizado por Eduardo Guzmán de los Riscos Departamento Lenguajes y Ciencias de la Computación UNIVERSIDAD DE MÁLAGA MÁLAGA, febrero de 2015 Fecha defensa: El Secretario del Tribunal Resumen: Este trabajo consiste en el diseño y desarrollo de una primera versión de una aplicación móvil para dispositivos que ejecuten iOS, para la promoción de los servicios de la Cámara de Comercio de Málaga. Se presentan las ofertas de los departamentos de Comercio Exterior y Turismo, Formación, ayudas y subvenciones gestionadas por el departamento de Servicios a Pymes y Autónomos, y las Licitaciones y ofertas de contratación. La aplicación móvil obtiene los datos de las webs de la corporación en un objeto JSON, para lo que se ha desarrollado una pequeña aplicación en php. La aplicación móvil procesa este objeto JSON, y almacena la información en una base de datos SQLite, para presentarlos al usuario. En la pantalla inicial se ofrece el acceso a las ofertas de servicios, y funcionalidad para contactar por correo electrónico o por teléfono. La información de los servicios ofertados se ofrece en formato listado-detalle para los servicios, ofreciendo la solicitud de ampliación de información en un email formateado. Con acceso desde la pantalla inicial, también se ofrecen servicios de geolocalización, mediante un sistema de rutas, en la que el usuario puede ver la localización de la Cámara de Comercio, calcular su ruta para llegar, y puede seguir esta ruta mediante una representación etapa por etapa, de manera gráfica, en el mapa, con indicaciones detalladas de camino, duración, etc. Palabras claves:JSON, SQLite, iOS, MapKit, TableView, Xcode, ObjectiveC, Cámara de Comercio de Málaga Abstract: This work involves the design and development of a first version of an mobile application for devices running iOS, to promote the services of the Malaga Chamber of Commerce. Offers departments of Foreign Trade and Tourism, Training, grants and loans by the Department of Services to SMEs and Self, and Tender Contracts are presented. The mobile application gets data from the websites of the corporation in a JSON object, for which it has developed a small application in php. The mobile application processes this JSON object, stores the information in a SQLite database and present them to the user. In the initial screen provides access to service offerings, and functionality to contact by email or by phone. The information offered services offered indetail list for services format, featuring request for more information in a formatted email. With access from the home screen, geolocation services are also offered through a routing system in which the user can see the location of the Chamber of Commerce, calculate your route to get there, and you can follow this route by a representation stage by stage, graphically, on the map, with detailed information on the way, duration, etc. Keywords: JSON, SQLite, iOS, MapKit, TableView, Xcode, Objective-C, Chamber of Commerce of Malaga 1 Índice de Contenidos Capítulo 1: Introducción .................................................................................. 5 1.1 Introducción al TFG .............................................................................................................. 5 1.2 Objetivos .................................................................................................................................... 5 1.3 Etapas de desarrollo ............................................................................................................ 7 1.4 Descripción de la solución propuesta .......................................................................... 7 Capítulo 2: Estado del arte .............................................................................. 9 2.1 Evolución de las aplicaciones móviles. ....................................................................... 9 2.2 El mercado de aplicaciones de Apple: App Store ............................................... 12 2.3 Sistemas Operativos móviles ........................................................................................ 13 2.3.1 Android ............................................................................................. 14 2.3.2 iOS ................................................................................................... 15 2.3.3 Desarrollar para ambos lenguajes.................................................... 15 2.3.3.1 El proyecto. .......................................................................................................... 16 2.3.3.2 Gestión de memoria ......................................................................................... 16 2.3.3.3 Interfaz gráfica .................................................................................................... 16 2.3.3.4 Activity y ViewController ................................................................................ 17 2.3.3.5 Delegate y Adapter ........................................................................................... 17 2.3.3.6 El botón “Volver” de Android ........................................................................ 17 2.3.3.7 Simulador o emulador ..................................................................................... 17 2.4 Cámara de Comercio de Málaga ................................................................................ 18 Capítulo 3: Sistema operativo móvil: iOS .................................................... 19 3.1 Evolución del iOS ............................................................................................................... 19 3.2 La plataforma de desarrollo Xcode ............................................................................ 20 Capítulo 4: Desarrollo de la aplicación ........................................................ 21 4.1 Análisis de la aplicación .................................................................................................. 21 4.1.1 Requisitos funcionales ..................................................................... 21 4.1.2 Casos de uso ................................................................................... 22 4.1.3 Diagramas de secuencia. ................................................................. 22 4.1.4 Metodología de diseño (Espiral, cascada y prototipado) .................. 23 4.2 Desarrollo web. .................................................................................................................... 23 4.3 Desarrollo de herramientas locales ....................................................................... 24 4.4 Desarrollo de la aplicación móvil ................................................................................. 25 4.4.1 Estructura y componentes de la aplicación móvil ......................... 27 4.4.1.1 Custom Managed Object Class: Datos de la aplicación. ............... 27 2 4.4.1.2 Frameworks ......................................................................................................... 28 4.4.1.3 Storyboard ............................................................................................................ 28 4.4.1.4 Archivos Xib ........................................................................................................ 29 4.4.1.5 Delegates y AppDelegate .............................................................................. 30 4.4.2 Programación ............................................................................... 31 4.4.2.1 Proceso previo a la carga .............................................................................. 31 4.4.2.2 Implementación de la navegación y escenas ...................................... 33 4.4.2.3 Gestión de mapas: MapKit de Apple. ...................................................... 35 4.4.3 Dificultades en el desarrollo ............................................................. 37 4.5 Pruebas de la aplicación ................................................................................................. 39 4.5.1 Pruebas de integración ................................................................. 40 4.5.2 Pruebas de compatibilidad ........................................................... 40 Capítulo 5: Conclusiones y trabajos futuros ............................................... 41 Bibliografía ...................................................................................................... 43 Referencias bibliográficas ............................................................................ 43 3 Índice de Figuras - Figura 1Regalos móviles ......................................................................................................... 9 - Figura 2Evolución de las redes ........................................................................................... 10 - Figura 3Evolución de las tiendas de aplicaciones ..................................................... 11 - Figura 4Evolución del App Store ........................................................................................ 12 - Figura 5Estadísticas del App Store ................................................................................... 12 - Figura 6Evolución de los SO Móviles .............................................................................. 13 - Figura 7Dispositivos ejecutando Android ....................................................................... 14 - Figura 8iPhone 4-5-6-6+ ........................................................................................................ 15 - Figura 9Gestión de memoria ................................................................................................ 16 - Figura 10Volver .......................................................................................................................... 17 - Figura 11Xcode .......................................................................................................................... 20 - Figura 12Casos de uso ........................................................................................................... 22 - Figura 13Diagrama de secuencia ...................................................................................... 22 - Figura 14Typo3 Extension .................................................................................................... 23 - Figura 15Cadena JSON ......................................................................................................... 24 - Figura 16BBDD acciones Comercio Exterior ............................................................... 24 - Figura 17MySQL ODBC Connector .................................................................................. 25 - Figura 18Simulación en distintos iPhone ....................................................................... 25 - Figura 19Tamaños de pantalla iPhone ........................................................................... 26 - Figura 20Escalado de pantallas ......................................................................................... 26 - Figura 21Custom Managed Object Class ...................................................................... 27 - Figura 22SQLite Database Browser ................................................................................. 28 - Figura 23Frameworks .............................................................................................................. 28 - Figura 24Canvas de Xcode .................................................................................................. 29 - Figura 25Archivos XIB ............................................................................................................. 29 - Figura 26TableViewDelegate............................................................................................... 30 - Figura 27application:didFinishLaunchingWithOptions ............................................. 31 - Figura 28Descarga de imágenes ....................................................................................... 31 - Figura 29Listado de acciones comerciales ................................................................... 32 - Figura 30Tiempo de carga .................................................................................................... 32 - Figura 31Storyborad................................................................................................................. 33 - Figura 32DetalleEtapasViewController.h ....................................................................... 34 - Figura 33Carga de celdas personalizadas .................................................................... 34 - Figura 34Transición entre escenas: segue ................................................................... 35 - Figura 35MKOverlayRenderer ............................................................................................ 35 - Figura 36Cálculo de ruta ........................................................................................................ 36 - Figura 37Ruta por etapas ...................................................................................................... 36 - Figura 38Etapa de la ruta ...................................................................................................... 37 - Figura 39Nuevos permisos iOS8 ....................................................................................... 38 - Figura 40Error del framework .............................................................................................. 38 - Figura 41Corrección de la situación ................................................................................. 39 4 5 Capítulo 1: Introducción 1.1 Introducción al TFG El proyecto tiene como finalidad el estudio de las posibilidades de negocio y promoción que ofrece el intercambio de datos y la sinergia entre sitio Web y aplicación móvil, generando contenido informativo actualizado en dispositivos móviles, y posibilitando de esta manera alcanzar a un mayor número de clientes con la información actualizada en tiempo real. Se desarrollará una aplicación que permita a los usuarios de dispositivos móviles con sistema iOS, acceder en cualquier momento a la información actualizada de los servicios y ofertas que presta la Cámara de Comercio de Málaga. Paralelamente a este proyecto, la alumna Dª María Victoria Díaz Redondo realizará el desarrollo de esta aplicación móvil para dispositivos con sistemas Android en otro TFG. El proyecto será desarrollado usando las plataformas de desarrollo de Apple, Xcode, NetBeans, de Oracle, y el gestor de base de datos SQLite Database Browser. 1.2 Objetivos Con el diseño, implementación e implantación de esta herramienta, se pretende: Perfeccionar la técnica de toma de requisitos de usuario, mediante la identificación y entrevista de los responsables de los servicios de la corporación, con el fin de estimar cuáles son susceptibles de ofrecerse mediante una solución de movilidad. Una vez realizadas las entrevistas, se procederá a especificar el ámbito del software a desarrollar, con las funcionalidades y requerimientos necesarios. De acuerdo con esto se podrá realizar una mejor estimación de las fases temporales e hitos de desarrollo del proyecto. Mediante el uso de diagramas de clase y casos de uso, se realizará el diseño del software a desarrollar. Sin necesidad de especificar los servicios de la Cámara de Comercio que se tratarán en la aplicación, el desarrollo requerirá del diseño de una funcionalidad web, que se comunicará al menos con dos servidores de la corporación. Esta parte ha de obtener la información de dos bases de datos, y generar una salida de forma que pueda ser procesada y presentada por la aplicación móvil. Este servicio se desarrollará en PHP, y generará como salida un objeto JSON (JavaScript Object Notation). 12 2.2 El mercado de aplicaciones de Apple: App Store El Software Development Kit para iOS se anunció en el evento iPhone Software Roadmap del 6 de marzo de 2008. Este SDK permitía a los desarrolladores crear aplicaciones nativas para iPhone, iPod Touch, y iPad, usando el IDE Xcode. Cuatro meses después, el 10 de julio del mismo año, mediante una actualización de iTunes, se abrió el App Store. Al día siguiente se lanzó al mercado el iPhone 3G, que venía de serie con iOS 2.01, que ya permitía el uso del App Store. Las cifras de crecimiento del número de aplicaciones y descargas desde entonces han sido enormes: Fecha Apps Disponibles Descargas hasta la fecha 11/07/2008 500 0 14/07/2008 800 10.000.000 09/09/2008 3.000 100.000.000 09/09/2014 1.300.000 75.000.000.000 Figura 4Evolución del App Store Figura 5Estadísticas del App Store El hecho de que las aplicaciones para iOS solo puedan distribuirse desde el App Store, permite que Apple controle la calidad de las aplicaciones, la conveniencia del contenido, e introducir una tasa, normalmente del 25%, del costo de la aplicación de forma directa. 13 2.3 Sistemas Operativos móviles En los últimos años el crecimiento de las ventas de teléfonos móviles inteligentes o smartphones ha sido exponencial. Ya en 2011 logró superar las ventas de portátiles, PC’s, tablets y netbooks llegando a los 500 millones de terminales. [7] El uso de teléfonos inteligentes alcanza ya el 53,7% de la población española, según el informe de la ONTSI “La Sociedad en Red”. [8] Por ello, las aplicaciones para dispositivos móviles se han posicionado como un mercado emergente con grandes posibilidades. El mercado actual de las aplicaciones móviles está liderado por Apple y Google, con sus sistemas iOS y Android y con App Store y Play Store como plataformas de venta, respectivamente, según el número de aplicaciones y negocio generado. La distribución en el mercado de dispositivos por SO móviles, desde enero de 2013, ha evolucionado de la siguiente forma: (http://www.netmarketshare.com/) Figura 6Evolución de los SO Móviles 14 2.3.1 Android Android es el S.O. desarrollado por Open Handset Alliance, organización liderada por Google. La principal característica de Android es que se desarrolla de forma abierta, lo que permite a los desarrolladores crear librerías y programas generados en otros lenguajes y compilarlos en la arquitectura ARM de los terminales Android como si se tratasen de librerías nativas del sistema, permitiendo mejorar el sistema constantemente. La oferta de teléfonos con Android es amplia y variada tanto en marcas como en precios. Se estima que hay unos 12.000 tipos de dispositivos distintos ejecutando este SO, frente a los 4.000 que había en 2012: Además, esta gran diversidad a nivel hardware está generando también una gran fragmentación de versiones de Android, debido a la necesidad de hacer adaptaciones a cada dispositivo concreto. Esta situación se traduce en un incremento en la complejidad del desarrollo de aplicaciones, sobre todo a la hora de garantizar fiabilidad, soporte y experiencia de uso adecuada, características que son responsabilidad del desarrollador, debido a la inexistencia de revisiones y controles a la hora de publicar aplicaciones en la Play Store. Figura 7Dispositivos ejecutando Android 15 2.3.2 iOS iOS (iPhone OS), el sistema operativo desarrollado por Apple Inc. para iPhone, iPod Touch, iPad y Apple TV. Es una evolución de Darwin BSD y por lo tanto un sistema operativo Unix. A diferencia de Android, iOS está desarrollado únicamente para unos pocos dispositivos diseñados por la propia Apple, constituyendo así un “ecosistema cerrado”. [9] De cara a los desarrolladores esta característica puede parecer una ventaja, ya que las herramientas de diseño de aplicaciones y frameworks proporcionadas por Apple están optimizadas para dicho hardware, simplificando así ciertas tareas de desarrollo, pero, por otro lado, dificulta, y en muchos casos impide, la modificación y sobrecarga de librerías y funciones, y el acceso a la gestión de ciertos recursos de los propios dispositivos. Además, las aplicaciones para iOS se distribuyen por medio de la App Store, pasando estrictos controles de calidad antes de ser publicadas, que incluyen la comprobación y/o veto de ciertas funcionalidades admitidas por otros publicadores, como Google. 2.3.3 Desarrollar para ambos lenguajes Desarrollar una aplicación en Android e iOS, si se quieren realizar aplicaciones nativas, no usando plataformas como Titanium, etc., presenta grandes diferencias entre ambas. Para empezar, aunque los lenguajes son orientados a objetos, las aplicaciones nativas en Android se desarrollan en Java, mientras que en iOS se hace en Objective-C, y/o (recientemente) Swift. Figura 8iPhone 4-5-6-6+ 16 2.3.3.1 El proyecto. En Xcode (IDE de Apple para iOS) es el desarrollador el que decide la estructura lógica del proyecto. Se pueden crear carpetas, y estructurarlo como uno quiera para que la organización sea la deseada. Esto podría ser un problema cuando se trabaja en equipo. En Android, la estructura y la nomenclatura son más rígidas, lo que, si bien resta cierta flexibilidad, hace que la estructura sea más estándar. 2.3.3.2 Gestión de memoria En ambas plataformas se realiza, en gran medida, de forma automática. En iOS 5 se introdujo el ARC (Automatic Reference Counting) que realiza todas las operativas de RETAIN y RELEASE sin que tengamos que preocuparnos por ello. Esto facilita la tarea al desarrollador, aunque no deja de evita que esta gestión siga siendo crítica. De hecho, en todas las clases creadas con XCode aparece por defecto el método de la Figura 9, donde el desarrollador puede particularizar la gestión en caso de que los recursos disponibles en el dispositivo se encuentren en una situación crítica. Por defecto, Android utiliza el Garbage Collector de Java para liberar la memoria de los objetos sin referencias, que no vayan a usarse. 2.3.3.3 Interfaz gráfica Aquí es donde viene una de las grandes diferencias, y es que las soluciones propuestas para la creación de una interfaz gráfica son muy distintas. En Android las interfaces se construyen mediante ficheros XML legibles, mientras que Xcode facilita, con un sistema gráfico de creación de interfaces, el diseño de pantallas. Figura 9Gestión de memoria 17 2.3.3.4 Activity y ViewController En el caso de iOS, el controlador UIViewController es un componente del núcleo de la aplicación, con el cual podemos gestionar los ciclos de vida de los eventos, subvistas... Es el controlador dentro del modelo vista-controlador. En Android, el equivalente es la clase Activity, que representa una pantalla en un dispositivo, aunque no son exactamente iguales. De hecho, las principales diferencias residen en la forma de gestionar los ciclos de vida de los eventos. 2.3.3.5 Delegate y Adapter El patrón de delegación, del que se habla en el punto 4.4.1.5 Delegates y AppDelegate, es muy utilizado en iOS mediante el uso de protocolos delegados. Sin embargo, en Android este patrón es representado con un adaptador. 2.3.3.6 El botón “Volver” de Android Este “pequeño” detalle condiciona la funcionalidad y el diseño de las pantallas en iOS, ya que, al carecer de este botón del SO, los programadores han de incluirlo en el diseño de las pantallas, con la funcionalidad deseada. Figura 10Volver Para hacer esto, iOS proporciona ayudas mediante los Navigation Controller, que sirve para controlar la navegación por las vistas o escenas. 2.3.3.7 Simulador o emulador En este sentido también encontramos diferencias bastante grandes. iOS utiliza un simulador que es bastante más rápido que el emulador de Android. Sin embargo, este último es más fiel a la situación que encontraremos en un dispositivo, ya que es una máquina virtual con una CPU virtualizada, y la cantidad de recursos de que dispone es limitada y más fiel. 18 2.4 Cámara de Comercio de Málaga La Cámara es una Corporación de Derecho Público que se configura legalmente como órgano consultivo y de colaboración con las Administraciones Públicas y que tiene como finalidad la representación, promoción y defensa de los intereses generales del comercio, la industria y la navegación, así como la prestación de servicios a empresas que ejerzan las mencionadas actividades. En España hay 88 cámaras de comercio, ya que en algunas provincias hay más de una (en Cádiz hay tres: la de Cádiz, la de Jerez, y la de Campo de Gibraltar), pero cada una de ella funciona de manera independiente en una ámbito territorial, donde las demás cámaras no tienen competencias. En provincia de Málaga solo existe una cámara, la Cámara Oficial de Comercio, Industria, y Navegación de Málaga: Existe, en la mayoría de las comunidades autónomas, un Consejo Regional de Cámaras. En Sevilla está el Consejo Andaluz de Cámaras. A modo de coordinadora entre todas ellas, está la Cámara de España, que actúa como intermediaria entre las Cámaras de Comercio y el resto de administraciones nacionales e internacionales, sin perjuicio de la autonomía funcional de cada cámara, y delas relaciones entre estas y las administraciones locales. En la actualidad mi puesto en la Cámara de Comercio es el de Responsable del Área de Nuevas Tecnologías, que incluye la coordinación tanto de la parte de administración de sistemas, desarrollo propio de software (que incluye el desarrollo web) y el asesoramiento técnico y participación en el diseño y desarrollo de los programas de Innovación. Desde esta área planteamos la necesidad de ofrecer nuestro servicio e información a través de una aplicación móvil, cuya primera versión es la presentada en este trabajo. En versiones posteriores se dotará de más funcionalidades, no solo informativa, de manera que permita a los usuarios, donde sea posible, realizar trámites completos desde ella. 19 Capítulo 3: Sistema operativo móvil: iOS iOS (por sus siglas en inglés iPhone/iPod/iPad Operating System) es un sistema operativo móvil de la empresa Apple. Se desarrolló originalmente para el iPhone, y después Apple lo instaló en otros dispositivos como el iPod Touch, iPad y el Apple TV. Apple no permite la instalación de iOS en hardware de terceros. En octubre-noviembre de 2014, más del 52% de los dispositivos iOS (iPad, iPod y iPhone) poseen iOS 7.3 o posteriores versiones, hasta la actual 8.2. La interfaz de usuario de iOS está basada en el concepto de manipulación directa, usando gestos multitáctiles. Los elementos de control consisten en deslizadores, interruptores y botones. Los gestos reconocidos son, por ejemplo, un toque o multitoque, deslizar uno o varios dedos simultáneamente, pellizcar la pantalla, etc. 3.1 Evolución del iOS La primera versión de iOS se lanzó al mercado el 29 de junio de 2007, y durante su existencia se introdujeron muchos de los cambios y funcionalidades de gestos que siguen en activo hoy día, como las características multitouch. La segunda versión salió al mercado con los teléfonos 3G, y con ella nació la App Store, donde se dio la posibilidad de descargar aplicaciones de terceros. Se lanzó en julio de 2008. iOS3 e iOS4, con lanzamientos respectivos en junio de 2009 y junio de 2010, no supusieron ningún avance técnico diferencial. iOS5, en junio de 2011, fue un cambio muy importante que introdujo el concepto actual del sistema, incluyendo los servicios en la nube. iOS6, lanzado en junio de 2012, incluía una nueva aplicación de mapas, mejoras de integración con las redes sociales, detección de voz iOS7, de septiembre de 2013, y la versión con la que comenzó este proyecto de fin de grado, supuso un cambio radical en el diseño y con funcionalidades como Airdrop (para conectividad inalámbrica). iOS8, la versión actual, en la 8.2, lanzada en junio de este año, ha supuesto otro cambio radical de imagen, aunque su mayor cambio se ha llevado a cabo en pequeñas mejoras y funcionalidades, como en la gestión de mapas, la introducción del lector de huellas, etc. 20 3.2 La plataforma de desarrollo Xcode Xcode es el IDE creado por Apple. Es gratuito para usuarios de Mac Os X y no tiene versiones para ningún otro sistema operativo. Pueden realizarse programas en C, C++, Objective-C, Objective-C++, Java, y, en su última versión, se ha incluido el compilador para un lenguaje específicamente desarrollado para iOS y OS X, llamado Swift. Figura 11Xcode 21 Capítulo 4: Desarrollo de la aplicación 4.1 Análisis de la aplicación Durante el proceso de diseño de la aplicación, nos hemos reunido con los jefes de los departamentos de la Cámara para obtener así los requisitos funcionales. Basados en la información que éstos consideran más relevante, y en el análisis de las estadísticas de acceso de las webs cuyos datos se presentan en la aplicación, se establecieron estos requisitos funcionales. Posteriormente, estudiamos y decidimos las modificaciones a realizar en el sistema actual, tanto para proporcionar a la aplicación móvil la información deseada, como para facilitar la gestión de los usuarios finales de la Cámara. 4.1.1 Funcionalidades Para esta primera versión de la aplicación móvil de la Cámara de Comercio de Málaga, se ha decidido mostrar la información de los principales servicios que presta:  Departamento de Comercio Exterior y Turismo. Se muestran las misiones comerciales, ferias internacionales, y eventos comerciales para externalizar los negocios.  Departamento de formación. Se muestra el listado de cursos actuales y de próxima celebración.  Departamento de Servicio a PYMES y autónomos. Se muestran los programas de ayuda y subvenciones activos.  Se muestran las licitaciones y concursos públicos del año en curso. De toda esta información, se muestran los listados separados por secciones, y accediendo a cada una de ella se puede ver la información detallada de cada actividad, curso, concurso…, solicitar información al respecto, y descargarse la a documentación donde sea posible. Desde la escena inicial de la aplicación, se muestra, además del acceso a estos listados, tres botones que permiten llamar a la Cámara por teléfono, enviar un correo electrónico, o consultar la localización de la misma. Desde la opción de localización, un usuario puede solicitar a la aplicación que le calcule la ruta para llegar a ella, y ver esta ruta segmentada, pudiendo consultar información detallada de cada etapa. 28 Estas mismas clases son las que se han creado como tablas en la base de datos de SQLite, gestionándose cada registro como un objeto: 4.4.1.2 Frameworks Los frameworks o librerías usados en este proyecto son todos estándares de iOS, y aquellos que se muestran en la Figura 23. Entre estos están las librerías para el acceso al teléfono, manejo de mapas y datos SQLite, gestión gráfica… 4.4.1.3 Storyboard Un fichero storyboard va a contener un conjunto de escenas y de transiciones entre cada dos. Son ficheros del Interface Builder en los que pueden construirse visualmente la base de la interface de usuario. También en ellos se indican las transiciones entre los distintos elementos o vistas de la aplicación. Figura 22SQLite Database Browser Figura 23Frameworks 29 Se construyen en el lienzo o canvas del editor, y son muy útiles puesto que ofrecen una idea bastante aproximada del funcionamiento de la aplicación, en cuanto a su navegación se refiere. El uso de storyboard facilita el diseño de ciertos componentes, pero cuando se requiere personalizar controles o acciones, esto ha de hacerse en el código de la clase asociada con la View correspondiente. También dificulta el trabajo colaborativo, ya que solo un desarrollador podría modificar el fichero cada vez. 4.4.1.4 Archivos Xib Estos archivos contienen una descripción XML de los elementos y relaciones de la interface de usuario. Contienen una descripción de la interfaz, y se asocian a clases para darles funcionalidad. Se usa muy a menudo para crear Vistas o Views personalizadas, diferentes de las estándares de Xcode, o mezclando instancias de ellas. Para este proyecto, los objetos construidos se han limitado a las celdas que presentan los listados en las tablas: Figura 25Archivos XIB Figura 24Canvas de Xcode 30 4.4.1.5 Delegates y AppDelegate El concepto de Delegado o Delegate es quizás uno de los conceptos más importantes que hay que tener claro cuando se programa en Objective-C, ya que de ello depende el funcionamiento integrado de la aplicación. Un delegado es un objeto que obtiene notificaciones cuando el objeto al que esté conectado recibe un evento destinado al primero o cambia de estado. Por ejemplo, cuando una Vista o View va a presentar una tabla (TableView), esta se convierte en su delegado: Así, el Delegado de la Aplicación o AppDelegate es un objeto que recibe notificaciones cuando el objeto UIApplication alcanza ciertos estados. El AppDelegate gestiona algunos estados especiales del objeto UIApplication, entre los que podemos destacar:  applicationDidFinishLaunching: - Cuando este estado se alcanza, se llama a la función application:didFinishLaunchingWithOptions de la clase AppDelegate. Todas las opciones de configuración personalizada y de diseño que afecten a toda la aplicación suelen implementarse en esta función.  applicationWillTerminate: Este estado se alcanza cuando la aplicación va a terminar, invocando a la función del mismo nombre del AppDelegate, y es donde se elimina de memoria la aplicación. Suele usarse para borrar los archivos temporales, imágenes, etc. creadas por la aplicación, y que no se van a necesitar en otras ejecuciones, o que el desarrollador considere necesario. La clase UIApplication provee “un punto de control centralizado” para las aplicaciones corriendo en iOS. Cada aplicación tiene que tener exactamente una instancia de UIApplication (o una subclase de esta). Cuando una aplicación se lanza, se llama a la función UIApplicationMain, que crea un objeto UIApplication único. Figura 26TableViewDelegate 31 En este código se coloca como fondo de la barra de navegación una imagen transparente.png, que se usará en todas las barras de navegación de la aplicación, y que será la que nos permita mostrar el logo de la Cámara en la esquina superior derecha de los interfaces de la aplicación. Como variables de la clase AppDelegate se crean el path y la cadena que contendrá el acceso completo a la base de datos cámara.db. A lo largo de la aplicación estas variables estarán disponibles para todas las clases. Puede verse también que se llama, al iniciar la aplicación, a las funciones que vacían la base de datos tras comprobar que hay conectividad a los datos actualizados, y que se cargan tras eso los nuevos datos. 4.4.2 Programación La implementación completa de la aplicación conlleva la interacción de tecnologías Web, herramientas de escritorio para los usuarios y la aplicación móvil nativa. 4.4.2.1 Proceso previo a la carga Durante la pantalla de carga, la aplicación accede a la dirección web de donde obtiene el objeto JSON. Una vez obtenida, se crea la base de datos, y las tablas correspondientes. A continuación se parsea la cadena, con el fin de almacenar los datos. Durante este proceso se transforman las fechas del objeto JSON a tipo Date, y también se descargan las imágenes que son referidas en los datos descargados (banderas de países, logos de programas de ayuda, etc.). Estas imágenes se guardan en la carpeta de documentos de aplicación, tal y como muestra la Figura 28. Figura 27application:didFinishLaunchingWithOptions Figura 28Descarga de imágenes 32 Se ha optado por esta forma de proceder con la carga de las imágenes por la gestión de tablas y pantalla que realiza iOS cuando una aplicación muestra una tabla que tenga en sus celdas imágenes. En la Figura 29 se muestra un conjunto de celdas personalizadas creadas durante el desarrollo de este proyecto: iOS solo mantiene en memoria los datos e imágenes que permanecen en pantalla durante los desplazamientos, lo que implica que cada vez que uno se mueva por la tabla, se descargan y cargan de nuevo las imágenes ya antes mostradas. Esto produce un efecto visual muy molesto, dando la sensación de que la aplicación “se atasca” al deslizarse por los datos. También ocurre esto en los cambios de pantalla. Dado que el número de imágenes, y sobre todo su tamaño, es muy pequeño, esto no supone un problema ni en el tiempo de carga de la aplicación, que es cuando se descargan las imágenes, ni en el tamaño de memoria ni usos de datos del terminal (Figura 30): Figura 30Tiempo de carga Figura 29Listado de acciones comerciales 33 4.4.2.2 Implementación de la navegación y escenas Como se ha mencionado anteriormente, en la aplicación se ha creado un archivo .storyboard para el diseño funcional y visual básico de la aplicación. También se ha definido en él el tipo de transiciones posibles entre las escenas (Figura 31): Figura 31Storyborad 34 Se han creado las clases Objective-C para dar funcionalidad a los objetos y escenas. En estas clases se referencian controles (botones, etiquetas…) para darles diseño y funcionalidad, tratándolas como propiedades de las clases. Para poder modificar el diseño estándar proporcionado por Apple en su IDE, las tablas se han insertado dentro de otras Views, siendo sus delegadas. De esta forma podemos añadir imágenes y títulos, y crear secciones, manteniendo la funcionalidad de las tablas. El diseño de Apple solo permite un listado de los elementos de la tabla, por lo que su apariencia no era la deseada. A estas tablas, en tiempo de ejecución, se le asignan como celdas las creadas en los archivos .xib, mencionadas en el punto 4.4.1.4. Figura 33Carga de celdas personalizadas Figura 32DetalleEtapasViewController.h 35 Para llevar a cabo el traspaso de información de una escena a otra, se crean instancias de la clase personalizada a la que pertenece la de destino, de manera que se puede asignar valores a sus propiedades: 4.4.2.3 Gestión de mapas: MapKit de Apple. Antes de iOS 5.1 el MapKit framework de Apple usaba el Servicio de mapas de Google (Google Mobile Maps (GMM)) para su funcionamiento. Ya en iOS 6 empezó el MapKit a presentar más funcionalidades, y unas aproximaciones y cálculos mejores. Fue con la llegada de iOS 7 con la que se añadieron funcionalidades más importantes a este framework, de las que se han usado las siguientes:  MKDirections, que nos permitirá obtener y pintar sobre el mapa rutas entre distintos puntos.  MKOverlayRenderer, que nos permite gestionar las capas sobre el mapa. Se usa para pintar las líneas de ruta, y puede permitirnos superponer una sobre otras, darles transparencia, etc.  MKPolyline, para pintar una línea en el mapa.  transportType, que permite especificar el método de transporte. (MKDirectionsTransportTypeAutomobile)  Distancia y tiempo estimado (distance y expectedTravelTime).  MKRouteStep, que nos permite gestionar cada etapa de la ruta. Figura 35MKOverlayRenderer Figura 34Transición entre escenas: segue 36 La primera vez que la aplicación se ejecuta en un dispositivo, al entrar en la escena del mapa, muestra la localización de la sede central de la Cámara de Comercio, y le ofrece la opción de calcular la ruta. Cuando el usuario pulsa el botón de cálculo de ruta, le informa del tiempo estimado y distancia para llegar al destino, y le ofrece la opción de ver la ruta por etapas: En la pantalla del listado de etapas, la aplicación ofrece seleccionar una etapa para poder ver exactamente su duración, recorrido y distancia. Figura 36Cálculo de ruta Figura 37Ruta por etapas 37 En la vista de detalle de la etapa, puede ir avanzando o retrocediendo etapa por etapa. 4.4.3 Dificultades en el desarrollo Durante el desarrollo de la aplicación, hablando solamente de la parte de la aplicación móvil, se han encontrado varias dificultades, sobre todo por la modificación de requisitos y funcionalidades, motivadas por el cambio de versiones de iOS (empecé con la 7, y estamos en la 8.2), por las salidas de las nuevas versiones (subversiones) del IDE, y por la aparición de los iPhone 6 y iPhone6+, que han introducido novedades en el sistema de diseño de interfaces de Apple. Con la liberación de iOS8, iOS8.1 y ahora iOS8.2, Apple ha ido actualizando su SDK y Xcode, modificando algunos aspectos del diseño de la interfaz, sobre todo, en lo que a este programa se refiere, ocurriendo que algunos métodos y formas de ajustar la aplicación a los distintos dispositivos por el tamaño de sus pantallas y resoluciones, que antes se hacían, se han depreciado, y ya no funcionaban, con lo que he tenido que actualizarlos, de manera que mantengan, además, la compatibilidad hacia atrás en iOS. Con la salida al mercado de los nuevos iPhone6 y iPhone6+, Apple ha introducido dos tamaños nuevos de pantalla, lo que me ha supuesto calcular de nuevo el ajuste de las pantallas y controles a estas, para que se mostrasen bien. En la parte de gestión de mapas, las dificultades han sido, principalmente, estas: Figura 38Etapa de la ruta 44 [8] Observatorio Nacional de las Telecomunicaciones y la SI http://www.ontsi.red.es/ [9] iOS http://es.wikipedia.org/wiki/IOS