Skip to main content

Вводная

После ознакомления с основами разработки Android и iOS приложений, а также с основами разработки с Kotlin Multiplatform Mobile, пора перейти к знакомству с подходами разработки мобильных приложений в IceRock. Опыт, накопленный за годы разработки различных мобильных приложений с использованием Kotlin Multiplatform, был преобразован в готовые решения (различные библиотеки, шаблонный код) и подходы к разработке (паттерны).

Готовые решения

  • Шаблон проекта, на основе которого мы запускаем все наши проекты. Шаблон подготовлен таким образом, что сразу можно приступать к разработке проекта, не тратя времени на настройку инфраструктуры;
  • MOKO библиотеки - набор различных KMM библиотек, разработанных нами, которые решают типовые задачи мобильной разработки. Все наши проекты используют данные библиотеки, а сами библиотеки опубликованы на GitHub под лицензией Apache 2.0.

Подходы к разработке

  • Разделение проекта на отдельные gradle-модули, позволяющий сократить время компиляции для iOS платформы, в условиях постоянно растущей кодовой базы;
  • Переиспользование однотипного кода в gradle через convention plugin'ы и composite build'ы;
  • Использование паттерна MVVM, с реализацией ViewModel'ей в общем коде, с сохранением тесной интеграции ViewModel'ей с Android компонентами;
  • Реактивное обновление данных на экранах, за счет использования MVVM, доступное сразу для обеих платформ - UI Android и iOS подписывается на изменения данных и автоматически обновляется;
  • Управление навигацией из общей ViewModel;
  • Coordinator для реализации навигации на iOS;
  • R.swift для доступа к ресурсам на iOS;
  • Типовая, ручная, реализация Dependency Injection в общем коде и с использованием Hilt в android части;
  • Использование реактивного источника данных всего приложения (а не конкретного экрана), для приложений социальных сетей, электронных магазинов - тех, где одна сущность может отображаться на разных экранах одновременно и ее состояние должно быть синхронизировано везде (как лайк к посту в соцсетях, который видно и в своем профиле и в ленте);
  • Реализация экранов в виде вертикальных списков элементов и управление этим списком элементов из общего кода;
  • Централизованная логика по определению сообщения для конкретной ошибки (Exception'а);
  • Продуманное логирование, позволяющее получать достаточно информации для исправления ошибок происходящих у пользователей, без непосредственного участия самих пользователей;
  • Максимизация управления логикой приложения из общего кода - получение runtime permissions из общей ViewModel'и, получение геолокации, получение фото из галереи - типовые задачи мобильной разработки решаются напрямую из общего кода, без необходимости разработки на каждой платформе по отдельности;
  • Автоматизированная проверка изменений каждого Merge Request на CI. При изменении общего кода машина автоматически проверит не сломалась ли компиляция какой либо из платформ.

На следующем шаге вы создадите новый проект на основе шаблона mobile-moko-boilerplate, и во всех последующих разделах будете дополнять его, используя подходы IceRock и приложение, готовое после 3его блока.