- 🏛️ 17 факультетов и институтов ДВГУПС
- 📆 Недельное расписание с удобной навигацией
- 🗓️ Календарь для выбора даты
- 🔍 Умный поиск групп с мгновенными результатами
- 🔐 Подключение ЛК ДВГУПС для защищённого API расписания
- 👨🏫 Преподаватели с контактами и email-ссылками
- 🏢 Аудитории и онлайн-ссылки
- 🏷️ Цветовая индикация типов занятий
- 📊 Четность недель и номера пар
- 🔗 Кликабельные ссылки в описаниях
- 🔔 Расписание звонков ДВГУПС (встроенное)
- 📱 Отображение текущего занятия на экране блокировки
- 🏝️ Dynamic Island поддержка (iPhone 14 Pro и новее)
- ⏰ Автоматическое обновление при смене пар
- 🔄 Фоновые обновления через Background Tasks
- 📍 Информация о следующей паре прямо в виджете
- 🎨 Экран приветствия с анимациями и градиентами
- 👤 Персональная регистрация — имя, факультет, группа
- 💾 Локальное сохранение с SwiftData
- ✏️ Редактирование профиля в любое время
- 🔄 Сброс данных с подтверждением
- 🎨 Красивые баннеры с возможностью скрытия
- 📝 Changelog с историей версий
- 🔄 Автоматическое обновление при запуске
- 📱 TabView с тремя основными разделами
- 🎨 Apple Design Guidelines — нативный iOS-стиль
- 🌙 Поддержка Dark Mode
- ✨ Красивые анимации и переходы
- 🎨 Градиенты и тени для современного вида
- 📐 Адаптивная верстка для iPhone и iPad
- 🖥️ NavigationSplitView для iPad
- При первом запуске откроется экран приветствия
- Заполните профиль: имя, факультет, группа
- Выберите группу из списка или найдите через поиск
- При необходимости откройте
Профиль→Авторизация ДВГУПСи подключите личный кабинет - Начните пользоваться приложением!
- Выбор недели: используйте кнопки "←" и "→" или календарь
- Поиск группы: введите название в поле поиска
- Обновление: потяните вниз для обновления расписания
- Live Activity: включите в настройках профиля
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 то же самое, так что данные не теряются при переходе между сборками.
- Зависимость от внешнего API: приложение полностью зависит от доступности сайта
dvgups.ru - Авторизация расписания: при сбросе серверной сессии приложение автоматически переавторизуется только если сохранены логин и пароль ЛК ДВГУПС
- Live Activity: требует iOS 16.1+ и физическое устройство для полной функциональности
- Background Tasks: ограничены системой iOS (не гарантируется выполнение)
Проект создан в образовательных целях. Используйте на свой страх и риск.
Лицензия: Apache License 2.0