Мобильное приложение для просмотра информации о космических ракетах SpaceX и их запусках.
Приложение предоставляет пользователям возможность просматривать детальную информацию о ракетах SpaceX, включая технические характеристики, историю запусков и настройки единиц измерения.
Simulator.Screen.Recording.-.iPhone.16.Pro.-.2025-09-18.at.14.26.32.mp4
- Навигация: Page Control для переключения между ракетами
- Изображение: Случайное изображение ракеты из Flickr
- Основная информация:
- Название ракеты
- Блок с параметрами (высота, диаметр, масса, полезная нагрузка)
- Дата первого запуска
- Страна производства
- Стоимость запуска
- Технические характеристики:
- Первая ступень (двигатели, топливо, время сгорания)
- Вторая ступень (двигатели, топливо, время сгорания)
- Кнопка "Посмотреть запуски" для перехода к списку запусков
- Таблица с запусками конкретной ракеты
- Информация по каждому запуску:
- Название запуска
- Дата запуска
- Иконка статуса (успешный/неуспешный/неизвестный)
- Фильтрация запусков по ID ракеты
- Модальное окно с настройками единиц измерения
- Возможность выбора между метрической и имперской системами для:
- Высоты (м/ft)
- Диаметра (м/ft)
- Массы (kg/lb)
- Полезной нагрузки (kg/lb)
- Сохранение настроек в UserDefaults
- Применение изменений в реальном времени
Приложение построено с использованием MVVM архитектуры с Coordinator паттерном для навигации.
SpaceX/
├── Extensions/ # Расширения для базовых типов
├── Fonts/ # Кастомные шрифты LabGrotesque
├── Launch/ # Модуль запусков
│ ├── Model/ # LaunchElement
│ ├── Service/ # LaunchService, LaunchServiceProtocol
│ ├── View/ # LaunchView, LaunchCell
│ ├── ViewController/ # LaunchViewController
│ └── ViewModel/ # LaunchViewModel
├── Loading/ # Экран загрузки
│ ├── View/ # LoadingView
│ └── ViewController/ # LoadingViewController
├── Rocket/ # Модуль ракет
│ ├── Model/ # RocketElement и связанные структуры
│ ├── Service/ # RocketService, RocketServiceProtocol
│ ├── View/ # RocketView, SquareView
│ ├── ViewController/ # RocketViewController, RocketContentViewController
│ └── ViewModel/ # RocketViewModel
├── Settings/ # Модуль настроек
│ ├── View/ # SettingsView, CustomToggleView
│ ├── ViewController/ # SettingsViewController
│ └── ViewModel/ # SettingsViewModel
└── Supporting/ # Вспомогательные файлы
├── AppColors.swift # Цветовая схема приложения
├── AppFonts.swift # Шрифты приложения
├── AppCoordinator.swift # Координатор навигации
├── AppDelegate.swift
└── SceneDelegate.swift
- RocketElement: Основная модель ракеты с техническими характеристиками
- LaunchElement: Модель запуска с информацией о статусе и дате
- MeasureSize/MeasureWeight: Структуры для хранения размеров и веса в разных единицах
- RocketService: Сервис для получения данных о ракетах через SpaceX API
- LaunchService: Сервис для получения данных о запусках
- Используют Alamofire для сетевых запросов
- RocketViewModel: Управляет данными ракет, кэшированием и бизнес-логикой
- LaunchViewModel: Управляет данными запусков, фильтрацией и сортировкой
- SettingsViewModel: Управляет настройками пользователя и уведомлениями
- RocketView: Основной экран с информацией о ракете
- SquareView: Компонент для отображения параметров ракеты с возможностью переключения единиц
- LaunchView: Экран со списком запусков
- SettingsView: Экран настроек с кастомными переключателями
- Swift 5.0+
- UIKit - основной UI фреймворк
- SnapKit - для Auto Layout
- Alamofire - для сетевых запросов
- Kingfisher - для загрузки и кэширования изображений
- UserDefaults - для сохранения настроек пользователя
Приложение использует официальное SpaceX API:
- Ракеты:
https://api.spacexdata.com/v4/rockets - Запуски:
https://api.spacexdata.com/v4/launches
- Автоматическое преобразование snake_case в camelCase
- Кэширование данных для оптимизации производительности
- Обработка ошибок сети с пользовательскими сообщениями
- Фильтрация запусков по ID ракеты на стороне приложения
Приложение поддерживает переключение между метрической и имперской системами:
- Высота: метры (м) / футы (ft)
- Диаметр: метры (м) / футы (ft)
- Масса: килограммы (kg) / фунты (lb)
- Полезная нагрузка: килограммы (kg) / фунты (lb)
Настройки сохраняются в UserDefaults и применяются при каждом запуске приложения.
- Откройте проект в Xcode 14.0+
- Убедитесь, что установлены все зависимости (SnapKit, Alamofire, Kingfisher)
- Выберите симулятор или устройство
- Нажмите Run (⌘+R)
- iOS 13.0+
- Xcode 14.0+
- Swift 5.0+
Приложение использует Coordinator паттерн для управления навигацией:
- AppCoordinator: Основной координатор приложения
- Переходы между экранами ракет и запусков
- Модальное представление настроек
- Обработка навигации назад
- Кэширование данных ракет и запусков
- Ленивая загрузка изображений с Kingfisher
- Оптимизированная работа с таблицами
- Минимальное использование памяти через правильное управление жизненным циклом