Descripción: 

Programación de Dispositivos Móviles introduce el desarrollo de aplicaciones nativas para iOS con Swift, Xcode y UIKit. La asignatura acompaña al estudiante desde la creación del primer proyecto y la construcción de interfaces adaptables hasta la integración de datos, servicios de red y funcionalidades propias del dispositivo.

El recorrido es eminentemente práctico: cada bloque se concreta en un ejercicio que amplía una aplicación de referencia y prepara el proyecto final. Se trabajan la arquitectura y el ciclo de vida, la navegación, las listas y colecciones, los permisos, la geolocalización y los mapas, la concurrencia, la persistencia y la seguridad, la cámara y los sensores, la localización, las notificaciones, las Live Activities y HealthKit. El curso se cierra con una primera aproximación a SwiftUI y a la convivencia entre tecnologías.

El objetivo es que el estudiante comprenda el proceso completo de construcción de una app iOS robusta, usable y mantenible, y que pueda tomar decisiones técnicas justificadas en un contexto profesional.

Tipo asignatura
Obligatoria no de Primer
Semestre
Primero
Curso
4
Créditos
4.00

Profesores Titulares

Profesores Docentes

Conocimientos previos: 

Para seguir la asignatura con aprovechamiento se recomienda que el estudiante tenga:

• Conocimientos básicos de programación orientada a objetos.

• Familiaridad con estructuras de datos, algoritmos y gestión de errores.

• Nociones de arquitectura cliente-servidor, servicios web y acceso a datos.

• Conocimientos generales de diseño de interfaces, usabilidad y experiencia de usuario.

No es necesaria experiencia previa con Swift, Xcode ni desarrollo para iOS.

Objetivos: 

Los objetivos de la asignatura son:

• Dominar los fundamentos de Swift y utilizar Xcode con solvencia para crear, depurar y probar aplicaciones iOS.

• Diseñar interfaces adaptables y accesibles con UIKit, Storyboards, Auto Layout, UITableView y UICollectionView.

• Estructurar una aplicación mediante responsabilidades claras, patrones de diseño y mecanismos de navegación adecuados.

• Consumir servicios remotos, decodificar datos y gestionar operaciones asíncronas y dependencias de terceros.

• Persistir datos y tratar información sensible con los mecanismos adecuados, incluidos Core Data y Keychain.

• Integrar permisos y capacidades del sistema de forma responsable: ubicación, mapas, cámara, sensores, notificaciones, actividad en segundo plano y datos de salud.

• Aplicar criterios de UI/UX, localización, eficiencia, privacidad y calidad de código durante todo el desarrollo.

• Planificar, documentar, presentar y defender en equipo una aplicación iOS completa.

Contenidos: 

Los contenidos se organizan en una secuencia progresiva:

• Fundamentos de iOS y entorno de trabajo. Ecosistema Apple, iOS y UIKit; Xcode, proyectos, targets, schemes, simulador y dispositivo físico; Storyboards, conexiones, Auto Layout, safe areas, stack views y adaptabilidad.

• Swift aplicado a UIKit. Tipos, opcionales, colecciones, control de flujo, funciones, closures, structs, clases, enums, protocolos, extensiones, errores, ARC e introducción a async/await.

• Arquitectura, ciclo de vida y navegación. Responsabilidades de vistas y controladores, MVC y colaboradores, ciclo de vida de la app y de las escenas, navegación con tabs, stacks, segues y presentaciones modales, paso de datos y comunicación entre componentes.

• Interfaces basadas en datos. UITableView y UICollectionView, celdas reutilizables, XIBs, self-sizing, data sources clásicos y diffable, snapshots, flow layout y compositional layout.

• Privacidad, ubicación y mapas. Permisos y purpose strings, Core Location, calidad de los datos de posición, consumo responsable de batería, MapKit, anotaciones y pruebas en simulador y dispositivo.

• Red y dependencias. Swift Package Manager, resolución de versiones, Alamofire, Codable, concurrencia, gestión de errores, modelos de transporte y de dominio, carga y caché de imágenes.

• Persistencia y seguridad. UserDefaults, archivos y Codable, Core Data, consultas, migraciones, repositorios y Keychain.

• Capacidades del dispositivo e internacionalización. Fotos, cámara, sensores, gestión de recursos, catálogos de strings, formatos locales, Dynamic Type y diseño adaptable a distintos idiomas.

• Notificaciones y ejecución en segundo plano. Notificaciones locales y remotas, permisos, categorías y acciones, BackgroundTasks y Live Activities.

• Datos de salud. HealthKit, disponibilidad, autorización, tipos, unidades, consultas, estadísticas y estados sin datos.

• Introducción a SwiftUI. Programación declarativa, composición de vistas, estado, bindings, listas e interoperabilidad con UIKit.

Metodología: 

La asignatura combina explicación conceptual, demostraciones, práctica guiada y trabajo autónomo dentro de un enfoque de aprendizaje basado en proyectos.

• Sesiones presenciales: 14 sesiones de 3 horas. Cada sesión introduce los conceptos esenciales y dedica la mayor parte del tiempo a aplicarlos con Xcode.

• Ejercicios progresivos: los hands-on labs semanales amplían una aplicación de referencia y exigen probar los casos normales, los errores, los permisos denegados, los estados vacíos y distintas configuraciones de dispositivo.

• Aprendizaje autónomo: el estudiante consulta documentación, contrasta alternativas y resuelve problemas con la orientación del profesorado.

• Proyecto final por parejas: se desarrolla una app iOS completa. Antes de programarla, el equipo valida el concepto, las API y SDK necesarios y un diseño integral de las pantallas. El seguimiento se realiza mediante puntos de control y entrevistas breves.

La metodología pone el acento en la práctica deliberada, la justificación de las decisiones y la capacidad de transformar requisitos en un producto funcional.

Evaluación: 

La evaluación es continua y combina la adquisición de conocimientos con su aplicación en un proyecto completo.

Nota final = 30 % conocimientos y ejercicios semanales + 70 % trabajo práctico y proyecto final.

• Conocimientos y ejercicios semanales (30 %): actividades individuales vinculadas a los bloques del temario. Se valoran la corrección funcional, la comprensión, la calidad del código, la capacidad de diagnóstico y la entrega en el plazo y formato establecidos.

• Trabajo práctico y proyecto final (70 %): desarrollo por parejas de una app iOS funcional que integre, como mínimo, una API accesible por HTTP, autenticación de usuarios, un SDK o capacidad del dispositivo y una interfaz completa preparada para un uso real. Incluye diseño previo, memoria, entrega del código y defensa del trabajo.

Es necesario entregar todas las actividades obligatorias y el proyecto final para superar la asignatura. Los trabajos deben presentarse a través de eStudy, siguiendo la nomenclatura y las normas de originalidad indicadas.

Uso de inteligencia artificial (escala AIAS)

  • Ejercicios prácticos semanales (hands-on) realizados y evaluados íntegramente en el aula o laboratorio (40%): Nivel 1 (sin IA). Deberán completarse sin ayuda de herramientas de inteligencia artificial generativa.
  • Proyecto final de desarrollo de una aplicación y proyecto de recuperación (60%): Nivel 2 (planificación con IA). La IA solo podrá utilizarse durante la ideación, exploración inicial, organización y planificación del trabajo. No podrá utilizarse para generar, completar, corregir o reescribir el código, la documentación ni ninguna otra parte del producto entregado.
  • Demostración, presentación y defensa individual del proyecto: Nivel 1 (sin IA).

Todo uso permitido de IA deberá declararse en la entrega, indicando la herramienta utilizada, su finalidad y los prompts o instrucciones introducidos. El uso de IA que exceda el nivel indicado, o su utilización sin declararla, se considerará un incumplimiento de las normas de honestidad académica. El alumnado será responsable de la autoría, exactitud y funcionamiento de todo el material entregado.

Criterios evaluación: 

Las evidencias de evaluación se valoran según los siguientes criterios:

• Funcionamiento y robustez: la aplicación cumple los requisitos, gestiona errores y estados alternativos y puede ejecutarse en el dispositivo objetivo.

• Swift y calidad del código: uso correcto de tipos, opcionales, colecciones, concurrencia, gestión de errores y memoria; código legible y coherente.

• Arquitectura: responsabilidades bien separadas, navegación comprensible, modelos adecuados y dependencias encapsuladas.

• Datos y servicios: integración correcta de la API, decodificación, persistencia y protección de la información sensible.

• Integración con iOS: permisos contextuales, uso justificado de frameworks y capacidades, y comportamiento correcto ante cambios de disponibilidad o autorización.

• UI/UX: interfaz completa, adaptable, localizable, accesible y coherente con las convenciones de la plataforma.

• Proceso y comunicación: cumplimiento de los puntos de control, pruebas, documentación, presentación, capacidad para justificar las decisiones y contribución equilibrada del equipo.

Bibliografía básica: 

• Apple. Xcode Documentation. https://developer.apple.com/documentation/xcode

• Apple. UIKit Documentation. https://developer.apple.com/documentation/uikit

• Apple. Human Interface Guidelines. https://developer.apple.com/design/human-interface-guidelines/

• The Swift Project. The Swift Programming Language. https://docs.swift.org/swift-book/documentation/the-swift-programming-language/

Material complementario: 

• Apple. SwiftUI Documentation. https://developer.apple.com/documentation/swiftui

• Apple. URL Loading System. https://developer.apple.com/documentation/foundation/url-loading-system

• Apple. Core Data. https://developer.apple.com/documentation/coredata

• Apple. MapKit. https://developer.apple.com/documentation/mapkit

• Apple. UserNotifications. https://developer.apple.com/documentation/usernotifications

• Apple. HealthKit. https://developer.apple.com/documentation/healthkit