← Назад к вопросам

Расскажи о проекте, которым гордишься

1.0 Junior🔥 111 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Проект: AR-навигация в крупном ТРЦ — от идеи до 500K пользователей

Горжусь проектом по разработке нативной AR-навигации для сети крупных торгово-развлекательных центров, который я вел как технический лидер команды из 6 iOS-разработчиков. Проект стартовал как пилот для одного ТРЦ, а через два года масштабировался на 15 комплексов с полумиллионом активных пользователей ежемесячно. Его уникальность — в решении реальной боли посетителей: «Я нахожусь на парковке уровня -2, как пешком дойти до конкретного магазина на 3 этаже?».

Ключевые технологии и архитектурные решения

Проект требовал выхода за рамки типовых CRUD-приложений. Основной стек и решения:

  • Язык и парадигма: Swift с активным использованием протокол-ориентированного программирования и реактивного подхода с Combine для потоков данных.
  • Архитектура: MVVM-C (Model-View-ViewModel-Coordinator). Это позволило:
    *   Четко отделить AR-логику и навигационный движок от UI.
    *   Легко тестировать ViewModels с бизнес-логикой маршрутизации.
    *   Координаторы управляли сложной навигацией между обычными экранами и полноэкранным AR-режимом.
  • ARKit и SceneKit: Ядро приложения. Мы создали гибридную систему:
    *   Использовали **ARKit** для **World Tracking** и **Image Detection** (по предварительно размещенным в ТРЦ маркерам для калибровки).
    *   Строили 3D-путь с помощью **SceneKit**, визуализируя его поверх видео с камеры.
    *   Реализовали собственный алгоритм **сглаживания пути и компенсации дрейфа** (drift compensation) виртуальных объектов, так как чистой геопозиции внутри помещения было недостаточно.

class ARNavigationManager: NSObject {
    private let sceneView: ARSCNView
    private let routeNodes: [SCNNode]
    private var isRouteActive = false
    
    func startNavigation(to destination: Shop) {
        guard let startMarker = detectStartMarker() else { return }
        calculateRoute(from: startMarker, to: destination)
        renderPathInScene()
        startDriftCompensationTimer() // Фоновый процесс коррекции
    }
    
    private func calculateRoute(from start: Marker, to end: Shop) {
        // Интеграция с внутренним Graph API для расчета кратчайшего пути
        let pathFinder = IndoorPathFinder()
        let steps = pathFinder.findPath(between: start, and: end)
        routeNodes = steps.map { createGuideNode(for: $0) }
    }
}
  • Оффлайн-работа и производительность: Карты ТРЦ (весом ~20-50 МБ на комплекс) загружались один раз и хранились локально в Core Data. Для фоновой загрузки обновлений использовали Background Tasks. Оптимизация рендеринга 3D-сцены была критичной для старых устройств (начиная с iPhone 8).

Моя роль и преодоленные вызовы

Как техлид, я не только писал код, но и:

  1. Принимал ключевые архитектурные решения, например, выбор Combine вместо RxSwift для более тесной интеграции с нативным стеком Apple и легкости поддержки.
  2. Настроил CI/CD на GitLab с автоматическим прогоном unit-тестов (XCTest) и UI-тестов (XCUITest) для критичных потоков, таких как построение маршрута.
  3. Решал сложнейшую проблему«уход» (drift) AR-якоря в длинных коридорах без визуальных ориентиров. Наше гибридное решение сочеталo периодическую рекалибровку по QR-меткам (если пользователь навел камеру) и программную коррекцию на основе данных с гироскопа и акселерометра.
  4. Внедрил модульную структуру проекта через Swift Package Manager, выделив AR-движок, сетевой слой и кэширующий менеджер в отдельные переиспользуемые пакеты. Это ускорило онбординг новых разработчиков и позволило повторно использовать код в других внутренних проектах.

Результаты и выводы

Проект был успешен не только технически, но и бизнесово:

  • Увеличил среднее время пребывания посетителей в ТРЦ на ~15% (по данным аналитики).
  • Снизил количество обращений в справочную службу на 30%.
  • Получил высокий рейтинг (4.7+) в AppStore, где пользователи особенно хвалили плавность AR-режима и точность наведения.

Горжусь этим проектом, потому что он:

  • Сочетал инновационность (AR) с решением прикладной, насущной проблемы.
  • Потребовал глубокого погружения в ARKit, 3D-графику и алгоритмы навигации.
  • Доказал, что сложные технологии могут быть стабильными и полезными для массового пользователя.
  • Стал отличной школой лидерства и архитектурного мышления для всей команды.

Этот опыт сформировал мое ключевое убеждение: даже в потребительских приложениях стоит стремиться к чистой архитектуре и качественному коду — это не замедляет, а ускоряет разработку в долгосрочной перспективе и позволяет уверенно масштабировать продукт.

Расскажи о проекте, которым гордишься | PrepBro