Современное мобильное приложение на SwiftUI для студентов Дальневосточного государственного университета путей сообщения (ДВГУПС) с регистрацией, расписанием, домашними заданиями и синхронизацией через iCloud.
✅ Полностью реализовано в v3.0:
- 🎨 Красивый экран приветствия с анимациями и градиентами
- 👤 Персональная регистрация - имя, факультет, группа
- 💾 Локальное сохранение профиля с SwiftData
- ✏️ Редактирование профиля в любое время
- 🔄 Сброс данных с подтверждением
- 🏛️ Все факультеты и институты ДВГУПС (17 подразделений)
- 📅 Недельное расписание с интуитивной навигацией
- 🗓️ Календарь для выбора даты с современным дизайном
- 🔍 Умный поиск групп с мгновенными результатами
- 👨🏫 Преподаватели с контактами и email-ссылками
- 🏢 Аудитории и онлайн-ссылки
- 🏷️ Цветовая индикация типов занятий
- 📊 Четность недель и номера пар
- 🔗 Кликабельные ссылки в описаниях занятий
- 🔔 Расписание звонков ДВГУПС (встроенное)
- 🔄 Pull-to-refresh обновление
- ➕ Добавление заданий с подробным описанием
- 🎯 Приоритеты (низкий, средний, высокий, срочный)
- 📅 Даты сдачи с визуальными индикаторами
- ✅ Отметка выполнения одним касанием
- 🔍 Фильтрация по статусу (все, к выполнению, выполненные, просроченные)
- ☁️ iCloud синхронизация - доступно на всех ваших устройствах
- 🚨 Индикаторы просроченных заданий
- 📱 TabView с тремя основными разделами
- 🎨 Apple Design Guidelines - нативный iOS-стиль
- 🌙 Поддержка Dark Mode
- ✨ Красивые анимации и переходы
- 🎨 Градиенты и тени для современного вида
- 📐 Адаптивная верстка для всех размеров экранов
Faculty- факультет/институт с полным списком всех подразделений ДВГУПСGroup- информация о группе с привязкой к факультетуSchedule- расписание с поддержкой периодов (день/неделя)ScheduleDay- день расписания с номером недели и четностьюLesson- занятие с полной информацией (время, тип, ссылки)Teacher- преподаватель с email для связиLessonType- тип занятия с цветовой схемойLessonTime- расписание звонков ДВГУПС (1-6 пары)
User- пользователь приложения с профилем и группойHomework- домашние задания с iCloud синхронизациейHomeworkPriority- приоритеты заданий с цветовой схемой
DVGUPSAPIClient- полностью переписанный с @MainActor- Новые методы:
fetchGroups(for:date:)- загрузка групп по факультетуfetchSchedule(for:startDate:endDate:)- период расписанияfetchScheduleByAuditorium/Teacher- альтернативные запросы
- Продвинутый HTML-парсинг с regex для всех полей
- Поддержка временной зоны Asia/Vladivostok
ScheduleService- полностью обновленный @MainActor ObservableObject- Новый функционал:
- Управление факультетами и группами
- Недельная навигация (previous/next/current week)
- Автоматическое обновление при изменениях
- Поиск групп с фильтрацией
- Расчет диапазонов недель
- Модульная архитектура:
HeaderView- заголовок с брендингомFacultySelectionView- выбор из 17 факультетов через MenuDateSelectionView- недельная навигация + календарьGroupSelectionView- поиск + горизонтальная прокрутка группScheduleView/DayView/LessonView- многоуровневое отображениеDatePickerSheet- модальный выбор даты
- Pull-to-refresh и состояния загрузки
- Комплексное тестирование v2.0 функционала
- Демонстрация всех новых возможностей
- Проверка недельного расписания и навигации
- Тестирование с реальными данными API
Приложение работает с веб-интерфейсом ДВГУПС:
- Endpoint:
https://dvgups.ru/index.php?Itemid=1246&option=com_timetable&view=newtimetable - Получение групп: POST запрос с
FacID=2 - Получение расписания: POST запрос с
GroupID={id}
- Регулярные выражения для извлечения данных
- Обработка различных форматов дат и времени
- Извлечение ссылок на онлайн-занятия
- Парсинг информации о преподавателях
APIErrorenum для типизированных ошибок- Graceful handling сетевых проблем
- Информативные сообщения пользователю
- Откройте проект в Xcode
- Выберите симулятор или устройство
- Нажмите Run (⌘R)
// В консоли Xcode или в Playground
Task {
let demo = ScheduleDemo()
await demo.runDemo()
}let apiClient = DVGUPSAPIClient()
// Получить список групп
let groups = try await apiClient.fetchGroups(for: "2")
// Получить расписание для группы
let schedule = try await apiClient.fetchSchedule(for: "54375")- Зависимость от внешнего API: приложение полностью зависит от доступности сайта dvgups.ru
- HTML парсинг: изменения в структуре HTML могут сломать парсер
- Без офлайн режима: нет локального кеширования расписания
- Один факультет: сейчас поддерживается только факультет с ID=2
- Локальное кеширование расписания
- Поддержка других факультетов
- Push-уведомления о изменениях
- Экспорт в календарь
- Темная тема
- Интеграция с официальным API (если появится)
- Персональные настройки и избранные группы
- Статистика посещаемости
- Интеграция с картами для поиска аудиторий
- iOS 15.0+
- Xcode 14.0+
- Swift 5.7+
- Интернет-соединение для загрузки данных
SwiftGups/
├── SwiftGups/
│ ├── Models.swift # Модели данных (+ SwiftData User/Homework)
│ ├── APIClient.swift # API клиент и HTML парсер
│ ├── ScheduleService.swift # Сервис управления состоянием
│ ├── SwiftGupsApp.swift # Main app с SwiftData контейнером
│ ├── MainAppView.swift # Главный экран с регистрацией (NEW!)
│ ├── TabBarView.swift # TabView с тремя экранами (NEW!)
│ ├── ContentView.swift # UI компоненты расписания (обновлено)
│ ├── ScheduleDemo.swift # Демонстрация работы
│ ├── Info.plist # Конфигурация с iCloud поддержкой
│ └── SwiftGups.entitlements # CloudKit entitlements
├── Assets.xcassets/ # Ресурсы приложения
└── README.md # Этот файл
Проект создан в образовательных целях. Используйте на свой страх и риск.
Автор: Разработано для студентов ДВГУПС
Версия: 3.0 🎓
Статус: ✅ Полноценное приложение готово к использованию
- 👤 Полная регистрация и профиль пользователя
- 📚 Домашние задания с iCloud синхронизацией
- 📱 Современный TabView интерфейс
- 🔗 Кликабельные ссылки в расписании
- 🔔 Встроенное расписание звонков ДВГУПС
- 🎨 Apple Design Guidelines по всему приложению