Skip to content

Приложение iOS для просмотра информации о ракетах SpaceX и их запусках, с использованием SpaceX API

Notifications You must be signed in to change notification settings

berrrchik/SpaceX-App

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SpaceX iOS App

Мобильное приложение для просмотра информации о космических ракетах SpaceX и их запусках.

📱 Описание

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

Simulator.Screen.Recording.-.iPhone.16.Pro.-.2025-09-18.at.14.26.32.mp4

🎯 Функциональность

Экран 1: Космические ракеты SpaceX

  • Навигация: Page Control для переключения между ракетами
  • Изображение: Случайное изображение ракеты из Flickr
  • Основная информация:
    • Название ракеты
    • Блок с параметрами (высота, диаметр, масса, полезная нагрузка)
    • Дата первого запуска
    • Страна производства
    • Стоимость запуска
  • Технические характеристики:
    • Первая ступень (двигатели, топливо, время сгорания)
    • Вторая ступень (двигатели, топливо, время сгорания)
  • Кнопка "Посмотреть запуски" для перехода к списку запусков

Экран 2: Список запусков

  • Таблица с запусками конкретной ракеты
  • Информация по каждому запуску:
    • Название запуска
    • Дата запуска
    • Иконка статуса (успешный/неуспешный/неизвестный)
  • Фильтрация запусков по ID ракеты

Экран 3: Настройки

  • Модальное окно с настройками единиц измерения
  • Возможность выбора между метрической и имперской системами для:
    • Высоты (м/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

Основные компоненты

Models

  • RocketElement: Основная модель ракеты с техническими характеристиками
  • LaunchElement: Модель запуска с информацией о статусе и дате
  • MeasureSize/MeasureWeight: Структуры для хранения размеров и веса в разных единицах

Services

  • RocketService: Сервис для получения данных о ракетах через SpaceX API
  • LaunchService: Сервис для получения данных о запусках
  • Используют Alamofire для сетевых запросов

ViewModels

  • RocketViewModel: Управляет данными ракет, кэшированием и бизнес-логикой
  • LaunchViewModel: Управляет данными запусков, фильтрацией и сортировкой
  • SettingsViewModel: Управляет настройками пользователя и уведомлениями

Views

  • RocketView: Основной экран с информацией о ракете
  • SquareView: Компонент для отображения параметров ракеты с возможностью переключения единиц
  • LaunchView: Экран со списком запусков
  • SettingsView: Экран настроек с кастомными переключателями

🛠️ Технологии

  • Swift 5.0+
  • UIKit - основной UI фреймворк
  • SnapKit - для Auto Layout
  • Alamofire - для сетевых запросов
  • Kingfisher - для загрузки и кэширования изображений
  • UserDefaults - для сохранения настроек пользователя

📡 API Integration

Приложение использует официальное SpaceX API:

  • Ракеты: https://api.spacexdata.com/v4/rockets
  • Запуски: https://api.spacexdata.com/v4/launches

Особенности работы с API

  • Автоматическое преобразование snake_case в camelCase
  • Кэширование данных для оптимизации производительности
  • Обработка ошибок сети с пользовательскими сообщениями
  • Фильтрация запусков по ID ракеты на стороне приложения

🔧 Настройки и конфигурация

Единицы измерения

Приложение поддерживает переключение между метрической и имперской системами:

  • Высота: метры (м) / футы (ft)
  • Диаметр: метры (м) / футы (ft)
  • Масса: килограммы (kg) / фунты (lb)
  • Полезная нагрузка: килограммы (kg) / фунты (lb)

Сохранение настроек

Настройки сохраняются в UserDefaults и применяются при каждом запуске приложения.

🚀 Запуск проекта

  1. Откройте проект в Xcode 14.0+
  2. Убедитесь, что установлены все зависимости (SnapKit, Alamofire, Kingfisher)
  3. Выберите симулятор или устройство
  4. Нажмите Run (⌘+R)

📱 Требования

  • iOS 13.0+
  • Xcode 14.0+
  • Swift 5.0+

🔄 Навигация

Приложение использует Coordinator паттерн для управления навигацией:

  • AppCoordinator: Основной координатор приложения
  • Переходы между экранами ракет и запусков
  • Модальное представление настроек
  • Обработка навигации назад

📊 Производительность

  • Кэширование данных ракет и запусков
  • Ленивая загрузка изображений с Kingfisher
  • Оптимизированная работа с таблицами
  • Минимальное использование памяти через правильное управление жизненным циклом

About

Приложение iOS для просмотра информации о ракетах SpaceX и их запусках, с использованием SpaceX API

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages