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.
Profesores Titulares
Profesores Docentes
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.
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.
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.
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.
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.
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.
• 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/
• 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