# Aulas UNICABA Un visor híbrido especializado y offline-first desarrollado para la visualización de la cartelera oficial de aulas, seguimiento automatizado de materias cursadas y generación de la Credencial Digital Universitaria para estudiantes de la Universidad de la Ciudad (UNICABA). ## Información Técnica y Frameworks * **Base Frontend**: [Angular 20.3.x](https://angular.io/) * **Librería de Componentes UI**: [Ionic Framework v8](https://ionicframework.com/) * **Puente Nativo Multiplataforma**: [Capacitor v8](https://capacitorjs.com/) * **Procesamiento de Archivos PDF Interno**: `pdfjs-dist` (Renderización nativa in-dom de la Credencial) ## Plugins de Experiencia Nativa (Capacitor) La aplicación invoca funciones 100% nativas apoyándose en las siguientes librerías core: - `@capacitor/filesystem`: Escritura pesada persistente de respaldos en CSV en el FileSystem local ("Documents"). - `@capawesome/capacitor-file-picker`: Interfaz de File Picker del OS (Cloud / Storage) para restauración manual. - `@capacitor/local-notifications`: Motor de avisos visuales locales ante un cambio repentino de aula mapeada en favoritos. - `@capacitor/preferences`: Almacenamiento rápido volátil (Key-Value) para estado de caché de credenciales offline y preferencias menores. - `@transistorsoft/capacitor-background-fetch`: Cronjobs transparentes delegados al Sistema Operativo para despertar a la app y sincronizar la cartelera. - `@capacitor-community/screen-brightness`: Anulación y control programático de brillo de panel al desplegar formatos estáticos de código QR/Credencial UI. - `@capacitor/haptics`: Respuestas hápticas (Vibración inteligente) en interacciones de hardware/software clave. - `@capacitor/share`: Puente social nativo para el envío de horarios por WhatsApp, Telegram, etc. --- ## Compatibilidad Multiplataforma (iOS y Android) Todo el código fuente de Aulas UNICABA (TypeScript, HTML y SCSS) y la selección estricta de sus plugins de Capacitor son **100% compatibles tanto con equipos móviles Android como con el ecosistema iOS de Apple**. La arquitectura garantiza que la aplicación operará sintácticamente de forma idéntica en iPhone. ### 🤖 Despliegue en Android **Requisito previo**: [Android Studio](https://developer.android.com/studio) instalado, Node.js y NPM. ```bash # 1. Instalar dependencias e hibridación npm install # 2. Compilación del binario web npm run build # 3. Transpilación y Sincronización de puentes nativos Android npx cap sync android # 4. Apertura del EDI para firma de APK o ejecución en celular por ADB npx cap open android ``` ### 🍏 Despliegue en iOS (iPhone / iPad) **Requisito previo**: Una computadora macOS reciente, [Xcode](https://developer.apple.com/xcode/), Node.js y CocoaPods instalado globalmente (`sudo gem install cocoapods`). ```bash # 1-2. Instalación y compilación estándar de web npm install npm run build # 3. Empaquetar el proyecto inicial para iOS (Solo se ejecuta una vez en la vida del proyecto) npx cap add ios # 4. Sincronizar plugins y actualizar Pods npx cap sync ios # 5. Apertura en Xcode para configurar equipo de Apple Dev y emular npx cap open ios ``` > **Nota para Xcode:** Para compilar exitosamente deberás habilitar permisos explícitos para Local Notifications y capacidades de "Background Fetch" en los *Background Modes* de la pestaña *Signing & Capabilities* dentro de Xcode. --- ## Privacidad y Flujo Cero Intermediarios (Zero-Trust) 1. **Credenciales en Moodle Bypass**: Por diseño de arquitectura, la app extrae el PDF de credencial estudiantil logueándose de manera asilvestrada mediante `CapacitorHttp`. Supera bloqueos tipo CORS al delegar el flujo de HTTP al motor OS, nunca triangulando el DNI a través de un backend tercero. 2. **Resiliencia (Anti-Wipes)**: Dado las agresivas políticas *Storage Scoped* a partir de Android 11 que borran bases de datos SQLite y Preferences locales si se desinstala, la app empuja automáticamente la personalización del alumno a un archivo estandarizado `aulas_unicaba_datos.csv` a su gestor público de archivos general ("Documentos").