Skip to content

easydev991/SwiftUI-WorkoutApp

Repository files navigation

SW Площадки

Ссылка на приложение в AppStore

Реализованный функционал

  • Большинство возможностей требуют подключения к интернету, но некоторые фичи доступны оффлайн
  • Звездочкой отмечены фичи только для авторизованных пользователей

Авторизация

  • Авторизация в сервисе (workout.su) под существующей учетной записью
  • Восстановление пароля от учетной записи

Профиль *

  • Просмотр информации о своем профиле
  • Поиск других пользователей по нику
  • Просмотр списка друзей
  • Просмотр списка площадок, где тренируется пользователь
  • Просмотр списка добавленных пользователем площадок
  • Просмотр дневников пользователя
  • Просмотр черного списка
  • Редактирование своего профиля
  • Отправка/принятие/отклонение запросов на добавление в друзья
  • Добавление/удаление из черного списка других пользователей
  • Отправить сообщение другому пользователю с экрана его профиля

Площадки

  • Просмотр площадок на карте или списком, доступно оффлайн
  • Фильтр отображаемых площадок по размеру и типу, доступно оффлайн
  • Фильтр отображаемых площадок по городу на вкладке со списком, доступно оффлайн
  • Создание новой площадки (максимальное количество фото для одной площадки - 15) *
  • Изменение/удаление своей существующей площадки *
  • Просмотр детальной информации о площадке (название, размер, тип, снепшот карты, список тренирующихся *, фотографии, автор, комментарии)
  • Создание мероприятия для выбранной площадки *
  • Построение маршрута до выбранной площадки через стандартное приложение «Карты»
  • Поделиться ссылкой на площадку
  • Создавать/изменять/удалять свои комментарии к площадкам *
  • Отправить письмо для обновления данных о площадке по email
  • Отправить письмо с жалобой на фото/комментарий к площадке
  • Указать, что тренируешься/не тренируешься на площадке *

Мероприятия

  • Просмотр списка планируемых и прошедших мероприятий
  • Создание нового мероприятия (максимальное количество фото для одного мероприятия - 15) *
  • Изменение/удаление своего мероприятия *
  • Просмотр детальной информации о мероприятии (название, дата и место проведения, снепшот карты, список участников *, фотографии, описание, организатор, комментарии)
  • Поделиться ссылкой на мероприятие на экране
  • Создавать/изменять/удалять свои комментарии к мероприятиям *
  • Отправить письмо с жалобой на фото/комментарий к мероприятию
  • Указать, что идешь/не идешь на мероприятие *

Сообщения *

  • Отправлять сообщения другим пользователям сервиса со страницы их профиля
  • Просмотр своих диалогов в формате чатов
  • Отправлять новые сообщения в своих диалогах
  • Видеть количество непрочитанных сообщений на экране со списком диалогов

Дневники *

К дневникам (при наличии) можно перейти с экрана профиля пользователя.

  • Просмотр/комментирование чужих дневников (при наличии доступа к ним)
  • Создание/изменение/удаление дневников и записей в своих дневниках
  • Изменение настроек доступа для своих дневников

Настройки

  • Изменить тему приложения (светлая/темная/как в системе)
  • Изменить язык в приложении (Русский/Английский)
  • Отправить обратную связь о приложении по email
  • Перейти на сайт с пользовательским соглашением
  • Перейти на официальный сайт сервиса
  • Перейти в блог разработчика приложения в телеграм
  • Поделиться ссылкой на приложение
  • Просмотр текущей версии приложения
  • Перейти на сайт магазина workout
  • Просмотр логов сетевых запросов (только в режиме разработки)

Помощь проекту

Прежде чем что-то делать, ознакомься с правилами, пожалуйста.

Установка и настройка проекта

  1. Проверяем, что установлен Xcode 16+
  2. Клонируем репозиторий
  3. В терминале переходим в папку с проектом
cd SwiftUI-WorkoutApp
  1. Активируем локальные хуки для этого репозитория
git config core.hooksPath ./githooks
  1. Даем права на выполнение pre-push хука
chmod +x githooks/pre-push
  1. Запускаем в папке с проектом файл SwiftUI-WorkoutApp.xcodeproj и ждем загрузки зависимостей
  2. Проект готов к работе!

Что делает pre-push хук

Хук выполняет двухэтапную проверку перед отправкой изменений:

  1. Блокирует прямой push в ветку main
  2. Запускает SwiftFormat в режиме линтера: если нарушены правила форматирования кода, вылезет ошибка, подробнее можно почитать тут

Форматирование кода

  • Используем SwiftFormat (0.55.5) для форматирования кода
  • Правила форматирования перечислены в файле .swiftformat
  • Все правила можно найти тут
  • Для запуска форматирования нужно в папке с проектом выполнить команду (точка после пробела тоже нужна):
./swiftformat .

Как это работает

  1. Перед каждым пушом должен выполняться хук, проверяющий необходимость форматирования кода
  2. При нарушении правил форматирования кода гит выдаст ошибку и напишет команду, которую нужно выполнить для запуска SwiftFormat
  3. Запускаем команду в терминале и выполняется форматирование кода

Как обновить SwiftFormat

  1. Переходим на страницу с релизами
  2. Скачиваем swiftformat.zip
  3. Заменяем в папке с проектом старый файл swiftformat на новый
  4. Отправляем PR с изменениями
  5. Если при первом запуске форматирования после обновления файла система выдает алерт и не запускает скрипт, даем разрешение на запуск этого файла в системных настройках -> конфиденциальность и безопасность

Шпаргалка

Настройка базовых параметров приложения

Xcode -> SwiftUI-WorkoutApp -> Target: SwiftUI-WorkoutApp -> General

  • Display Name - название приложения на экране смартфона
  • Version - версия приложения для магазина
  • Build - версия сборки для TestFlight

Публикация приложения

TestFlight

  1. Скачать актуальную версию репозитория
    • Если ранее не скачивал, можно скачать по зеленой кнопке сверху с текстом Code -> Open with Xcode
    • Если ранее скачивал, то открываешь Xcode, в верхней панели нажать Source Control -> Pull
  2. Открыть Xcode и дождаться загрузки зависимостей; при возникновении ошибок можно:
    • почистить Derived Data и память билда (command + shift + k)
    • обновить зависимости (File -> Packages -> Reset/Resolve/Update)
  3. В верхней панели Xcode сменить девайс на Any iOS Device
  4. В верхней панели нажать Product -> Archive
  5. Дождаться архивации, в открывшемся окне со сборками выбрать нужную и нажать Distribute App
  6. Пройти по всем шагам и снять галку с автоматического изменения версии сборки на одном из финальных шагов

AppStore

  1. Открыть страницу с приложением в AppstoreConnect
  2. В левом меню рядом с версией в статусе Готово к продаже нажать + и добавить новую версию
  3. Заполнить поле Что нового в этой версии
  4. Ниже в разделе Сборка выбрать нужную сборку из TestFlight
  5. Ниже на странице проверить галки
    • Выпустить эту версию автоматически
    • Выпустить обновление сразу для всех пользователей
    • Сохранить текущую оценку
  6. Нажать сверху справа кнопку Сохранить
  7. Отправить приложение на проверку

Скриншоты

  1. Генерируем скриншоты при помощи Fastlane (документация)
  2. Настройки для генерации скриншотов находятся в Snapfile (документация)
  3. Генерация скриншотов выполняется командой в папке с проектом (команда может меняться в зависимости от способа установки Ruby/fastlane)
rbenv exec fastlane snapshot
  1. Для генерации скриншотов необходимо наличие в Xcode симуляторов с нужной версией iOS в соответствие с настройками в Snapfile
  2. Если тесты падают с ошибкой при запуске через fastlane, нужно убедиться, что при ручном запуске тестов из Xcode они успешно проходят во всех локализациях, используемых для создания скриншотов
  3. Готовые скриншоты сохраняются в папке screenshots
Список площадок Площадка Прошедшие мероприятия Мероприятие Профиль

Модели девайсов, используемые для скриншотов

По состоянию на 2025 год Apple берет за основу скриншоты для диагонали 6.9 (или 6.7) дюймов и масштабирует их под все остальные размеры экранов, то есть при желании можно использовать для скриншотов только один девайс. Поскольку в этом проекте подключен и работает fastlane snapshot, используем три девайса:

  • iPhone 16 Pro Max
  • iPhone 16 pro
  • iPhone SE (3rd generation)

Список всех существующих девайсов есть тут.