Skip to content

Repository files navigation

🎓 SwiftGups

Современное мобильное приложение для студентов ДВГУПС

iOS Swift SwiftUI License Version

App Store


✨ Основные возможности

📅 Расписание занятий

  • 🏛️ 17 факультетов и институтов ДВГУПС
  • 📆 Недельное расписание с удобной навигацией
  • 🗓️ Календарь для выбора даты
  • 🔍 Умный поиск групп с мгновенными результатами
  • 🔐 Подключение ЛК ДВГУПС для защищённого API расписания
  • 👨‍🏫 Преподаватели с контактами и email-ссылками
  • 🏢 Аудитории и онлайн-ссылки
  • 🏷️ Цветовая индикация типов занятий
  • 📊 Четность недель и номера пар
  • 🔗 Кликабельные ссылки в описаниях
  • 🔔 Расписание звонков ДВГУПС (встроенное)

🔴 Live Activity & Dynamic Island

  • 📱 Отображение текущего занятия на экране блокировки
  • 🏝️ Dynamic Island поддержка (iPhone 14 Pro и новее)
  • Автоматическое обновление при смене пар
  • 🔄 Фоновые обновления через Background Tasks
  • 📍 Информация о следующей паре прямо в виджете

🔐 Профиль пользователя

  • 🎨 Экран приветствия с анимациями и градиентами
  • 👤 Персональная регистрация — имя, факультет, группа
  • 💾 Локальное сохранение с SwiftData
  • ✏️ Редактирование профиля в любое время
  • 🔄 Сброс данных с подтверждением

📰 Новости приложения

  • 🎨 Красивые баннеры с возможностью скрытия
  • 📝 Changelog с историей версий
  • 🔄 Автоматическое обновление при запуске

🎨 Современный дизайн

  • 📱 TabView с тремя основными разделами
  • 🎨 Apple Design Guidelines — нативный iOS-стиль
  • 🌙 Поддержка Dark Mode
  • Красивые анимации и переходы
  • 🎨 Градиенты и тени для современного вида
  • 📐 Адаптивная верстка для iPhone и iPad
  • 🖥️ NavigationSplitView для iPad

📖 Использование

Первый запуск

  1. При первом запуске откроется экран приветствия
  2. Заполните профиль: имя, факультет, группа
  3. Выберите группу из списка или найдите через поиск
  4. При необходимости откройте ПрофильАвторизация ДВГУПС и подключите личный кабинет
  5. Начните пользоваться приложением!

Расписание

  • Выбор недели: используйте кнопки "←" и "→" или календарь
  • Поиск группы: введите название в поле поиска
  • Обновление: потяните вниз для обновления расписания
  • Live Activity: включите в настройках профиля

📦 Сборка .ipa для LiveContainer

Workflow IPA собирает неподписанный .ipa — именно такой ждёт LiveContainer, который подписывает гостевое приложение сам.

Когда запускается:

Событие Что делает
push в main, pull request в main собирает и кладёт .ipa в артефакты запуска
тег v* то же плюс публикует .ipa в релиз
«Run workflow» вручную то же, можно выключить виджет (keep_plugins: 0)

Локально то же самое:

Scripts/build-ipa.sh                 # .build/artifacts/SwiftGups-<версия>-<сборка>-unsigned.ipa
BUILD_NUMBER=42 Scripts/build-ipa.sh # свой CFBundleVersion
KEEP_PLUGINS=0 Scripts/build-ipa.sh  # без виджета и Live Activity

Что происходит при упаковке:

  • сборка идёт с CODE_SIGNING_ALLOWED=NO — подписи и embedded.mobileprovision в бандле нет;
  • проставляется флаг компиляции LIVECONTAINER, по которому приложение не трогает CloudKit (см. AppEnvironment);
  • App Clip вырезается: в LiveContainer он не запускается и сайдлоадить его нельзя;
  • виджет (PlugIns/) остаётся — приложению он не мешает, хотя сам в LiveContainer обычно не работает.

Почему CloudKit выключен принудительно. Без подписи в бинарник не попадают entitlements, а CKContainer без com.apple.developer.icloud-container-identifiers падает фатально. У SwiftData это происходит асинхронно, на очереди com.apple.coredata.cloudkit.queue: ModelContainer создаётся успешно, а приложение падает через долю секунды после запуска, и do/catch вокруг создания контейнера этого не ловит. Поэтому решение принимается на этапе сборки.

Что не работает в такой сборке. Синхронизация с iCloud и лайки Connect — они уходят в локальный режим. Расписание, кэш, домашние задания и профиль работают как обычно; хранилище SwiftData то же самое, так что данные не теряются при переходе между сборками.


⚠️ Известные ограничения

  1. Зависимость от внешнего API: приложение полностью зависит от доступности сайта dvgups.ru
  2. Авторизация расписания: при сбросе серверной сессии приложение автоматически переавторизуется только если сохранены логин и пароль ЛК ДВГУПС
  3. Live Activity: требует iOS 16.1+ и физическое устройство для полной функциональности
  4. Background Tasks: ограничены системой iOS (не гарантируется выполнение)

📄 Лицензия

Проект создан в образовательных целях. Используйте на свой страх и риск.

Лицензия: Apache License 2.0


Разработано для студентов ДВГУПС 🎓

Версия 2.02026

Сообщить о проблемеПредложить улучшение

Contributors

Languages