Files
aulas-unicaba-mvp/README.md
T

69 lines
4.0 KiB
Markdown

# 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").