Как стать автором
Обновить
103.68

Разработка мобильных приложений *

Android, iOS, Windows Phone и прочие

Сначала показывать
Порог рейтинга

Привет, друзья! Меня зовут Александр Минкин, в компании SM Lab я работаю тимлидом Android-разработки на продукте МП Спортмастер. Сегодня я хочу поделиться с вами подробностями об одном из самых мощных архитектурных паттернов для мобильных приложений - MVI (Model-View-Intent). Этот паттерн помогает создавать приложения с четко разделенной логикой, улучшенной тестируемостью и высокой масштабируемостью. Давайте разберемся в его особенностях и посмотрим примеры кода на языке программирования Kotlin в Android с использованием Kotlin Coroutines, StateFlow и Fragment, а также давайте расширим наш пример с использованием чистой архитектуры, где добавим уровни domain-слоя (UseCases) и data-слоя (Repository). Этот подход поможет вам управлять состояниями приложения более эффективно и реагировать на изменения в реальном времени.

 Основные компоненты MVI с чистой архитектурой:

1. Model: Хранит состояние приложения.

2. View: Отображает текущее состояние Model.

3. Intent: Интерпретирует действия пользователя и направляет их в UseCase.

4. UseCase: Содержит бизнес-логику и выполняет операции.

5. Repository: Обеспечивает доступ к данным, будь то локальные или удаленные источники.

Преимущества MVI:

- Однозначное управление состоянием: Все состояния приложения проходят через один поток данных, что упрощает их отслеживание.

- Масштабируемость: Каждый компонент отвечает за свою часть логики, что позволяет легко масштабировать приложение.

- Тестируемость: Изолированные компоненты упрощают написание тестов.

Давайте рассмотрим пример использования MVI в приложении на Kotlin. Допустим, у нас есть приложение для управления задачами. Ссылка на gist:

https://gist.github.com/Rasalexman/53f9be0fc4e295b987e0921839a9a84e

Здесь мы рассмотрели базовый пример использования MVI. Хочу отметить, что в разных реализациях этот архитектурный паттерн, может включать в себя несколько дополнительных компонентов, таких как Reducer - это компонент помогающий преобразовать входное намерение в состояние. В примере выше таким reducer может выступать функция `processIntent`, но чаще его делают как абстракцию в виде интерфейса с функцией reduce, которая принимает Intent и возвращает State. Также мы можем добавить такой компонент как Store - это общая часть для работы с намерениями, которая получает результат обработки намерения и может производить как SideEffects, так и само состояние (State) экрана. Количество компонентов может меняться от сложности реализации, вплоть до добавления специальных объектов middleware и сайд-эффектов (SideEffects). Подробное рассмотрение данных компонентов не входило в текущую статью. С более сложными реализациями вы можете ознакомиться по ссылкам ниже

Заключение:

MVI - это мощный архитектурный паттерн, который помогает разрабатывать структурированные, масштабируемые и легко тестируемые приложения. Его использование позволяет разработчикам четко разделять логику представления, состояния и намерений пользователя, упрощая сопровождение и расширение приложения.

Использование Kotlin Coroutines и StateFlow с архитектурой MVI позволяет вам эффективно управлять состояниями и асинхронными операциями в вашем приложении. Интеграция чистой архитектуры с использованием UseCases и Repository делает ваше приложение более модульным и легко масштабируемым. Это упрощает написание кода, при этом ваше приложение становится более отзывчивым и масштабируемым, а так же удобным в управлении данными и бизнес-логикой, улучшая тестируемость и поддержку кода.

Спасибо, что прочитали данную статью. Буду признателен за комментарии и реакции к этому посту. Делить какую реализацию MVI вы используете у себя в проектах. Всем отличного настроения, помните, что его, как и архитектуру, вы можете выбирать сами ;)

Теги:
+1
Комментарии0

Как CodeStyle спасает Flutter-проекты от хаоса

Разрозненная структура файлов, разные подходы к оформлению и дублирование функциональности — всё это замедляет разработку и повышает вероятность ошибок.
Чтобы победить хаос, сделать работу команды быстрее и проще, попробуйте внедрить CodeStyle — это свод правил, которые делают код читаемым, стандартизированным и удобным для поддержки.

Вот что вы получите:

  • Читаемость: новые участники команды быстрее понимают проект.

  • Стандартизация: вся кодовая база выглядит так, будто ее писал один человек.

  • Поддерживаемость: проще рефакторить и находить ошибки.

Почему CodeStyle особенно важен для Flutter

Flutter на проектах дает гибкость, которая при отсутствии дисциплины превращается в проблему. Например, вы можете столкнуться с:

  • разрозненной структурой файлов, которая затрудняет поиск компонентов;

  • непоследовательным оформлением кода, которое усложняет его понимание;

  • дублированием библиотек и функционала, которое приводит к путанице.

Единый CodeStyle решает эти проблемы и создает прозрачную и предсказуемую структуру проекта.

Как внедрить CodeStyle: 4 шага

1. Обучение

Проводите мастер-классы и лекции, показывайте примеры из реальных проектов. Это помогает разработчикам видеть преимущества стандартов.

2. Автоматизация

Настройте инструменты для проверки кода:

  • линтеры (например, flutter_lints) для автоматической проверки стиля;

  • pre-commit хуки (Husky или Lefthook) для форматирования кода перед коммитом.

3. Код-ревью

Сделайте ревью обязательным этапом Pull Request. Это улучшит качество кода и поможет следить за соблюдением правил.

4. Командное соглашение

Создайте документ с правилами CodeStyle и внедрите их в культуру команды. Пусть разработчики понимают, что стандарты упрощают жизнь каждому.

Если хотите внедрить эти подходы на своих проектах, читайте подробную статью от нашего Flutter-разработчика Никиты Грибкова. В ней найдете больше примеров, кода и рекомендаций.

Теги:
0
Комментарии0

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

Фичи:

Генерация структурированных документов в Markdown/PDF

Интеграция c Jira/Confluence

Возможность автоматической генерации диаграмм (ERD, Sequence)

Полезно ли это/пользовались бы сами?

Теги:
+4
Комментарии2

Пишем приложение для поиска объектов на С++ (а не на Python)

Результат работы приложения по поиску объектов на С++
Результат работы приложения по поиску объектов на С++

Приложения по поиску объектов, написанные на С++, работают ничуть не хуже привычных вариантов на Python. На это есть несколько причин:

  • Программы на С++ получаются более быстрыми и компактными. Инженерам доступно больше вычислительных ресурсов, так как современные компиляторы оптимизируют программу в соответствии с архитектурой целевого процессора.

  • C++ не использует дополнительный сборщик мусора для управления памятью — это существенно влияет на производительность программы. 

  • Размер программы также можно уменьшить, поскольку C++ не использует дополнительную виртуальную машину и компилируется непосредственно в машинный код.

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

Если хотите написать такое приложение, изучите материалы инженера YADRO и ML-энтузиаста Кирилла Колодяжного. Он подробно описал, как реализовать программу на С++ с применением библиотек компьютерного зрения.

Подготовительная часть →

Практическая часть →

Теги:
Всего голосов 6: ↑6 и ↓0+8
Комментарии0

Три лекции с нашего митапа для продактов!

В октябре собирали гостей в нашем петербургском офисе послушать доклады спикеров и понетворкать. А теперь делимся записями с вами!

 > Опыт реальной трансформации культуры и процессов продуктовой команды (YouTube, VK)
Спикер: Влад Стоянов, Product lead

> Лидеры компетенции: Современные холакратичные методики управления без управления (YouTube, VK)
Спикер: Артур Арсенов, Product design lead

> Ничто не истина — всё дозволено. О культуре приоритизации (YouTube, VK)
Спикер: Саша Липин, Product lead

Следи за новостями, чтобы не пропускать будущие мероприятия!  

Теги:
Рейтинг0
Комментарии0

Согласно данным, технология PWA стала популярнее среди мессенджеров, банков, интернет-магазинов и других видов компаний.

Основные плюсы прогрессивных веб-приложений касаются пользовательского опыта: здесь есть преимущества как по сравнению с вебом, так и с нативными приложениями. Рассмотрим эти особенности подробнее.

1. Устанавливаются в обход сторов.

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

2. Работают в офлайн-режиме.

Прогрессивные приложения может работать в автономном режиме без соединения с сервером.

3. Загружаются за секунду. 

PWA загружаются очень быстро благодаря HTML-отдаче. С момента загрузки до появления первого элемента или изображения обычно проходит не более 1 секунды.

4. Весит меньше мегабайта. 

В отличие от нативных приложений PWA занимает менее 1 Мб в памяти смартфона. 

5. Эффективно адаптируется под устройство. 

PWA подстраиваются под любое пользовательское окружение. Они работают на всех возможных системах, устройствах и браузерах. 

6. Выглядит привычно для пользователя. 

При загрузке PWA пользователь может установить ярлык или иконку приложения на экран смартфона.

Если для бизнеса существуют значимые риски, создание PWA может быть более оправданным шагом: так вы избегаете зависимости от сторов и их политики.

Теги:
Рейтинг0
Комментарии0

Всем привет! Сегодня поговорим о PWA.

Прогрессивное веб-приложение (PWA) — это гибрид обычной веб-страницы и мобильного приложения. Оно сочетает в себе функции большинства современных браузеров с преимуществами мобильных приложений и создаётся с использованием стандартных веб-технологий, включая HTML, CSS и JavaScript.

Функциональные возможности включают работу в автономном режимеpush-уведомления и доступ к аппаратуре, что создает аналогичный нативным приложениям опыт работы для пользователя.

Некоторые из крупнейших в мире компаний, такие как Twitter, Instagram, Uber, Pinterest, Forbes, Alibaba и другие, уже используют PWA.

Согласно сообщению из CNBC, к 2025 году почти три четверти населения мира будут использовать для доступа к интернету только смартфоны. Поэтому, если вы планируете создать новый веб-сайт или редизайнить старый, вам следует задуматься о создании PWA.

Теги:
Всего голосов 5: ↑1 и ↓4-3
Комментарии8

iOS vs Android: большая битва платформ. Что лучше для разработчика, бизнеса и простого пользователя

В извечном вопросе о «лучшей мобильной платформе» попробовали разобраться вместе с инженерами Сравни: Android-разработчиком Русланом Кадыровым и iOS-разработчиком Константином Китаевым.

Обсудили, как платформы различаются в плане технологий и пользовательского опыта, под какую из них проще разрабатывать и может ли «многообразие Android» успешно конкурировать с «магией Apple».

Также в выпуске:

  • Состояние мобильной разработки — есть ли кризис?

  • Развитие разработчиков для iOS и Android: полезные материалы и практики

  • Превосходство Android Studio над XСode?

  • Когда наступит кроссплатформенное будущее?

Посмотреть или послушать Sravni Podcast можно здесь:

YouTube
RUTUBE
VK
Яндекс Музыка

Оперативно узнавать о наших новых подкастах, докладах, лекциях и других полезных ИТ-материалах можно в тг-канале Sravni Tech.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Новости ноября из мира Android-разработки уже на 📹 YouTube и 📹 VK Video

🤖 Изменения в графике релизов Android, начиная с 2025 года
🏝 Новая KMP IDE от JetBrains — часть плана развития Kotlin Multiplatform (KMP) на 2025 год
🔨 Новинки Gemini AI в Android Studio
📸 CameraX 1.4 — новый релиз с массой фичей

Не пропустите полезный выпуск для всех, кто хочет быть на волне новинок в Android-разработке! 🤖

Теги:
Рейтинг0
Комментарии0

Внедряем модели машинного обучения в мобильное приложение на Flutter

Если Flutter-приложение нужно сделать более удобным и инклюзивным, скорее всего, придется использовать технологии ML. Вот только несколько примеров задач, в которых машинное обучение наверняка понадобится:

  • классификация изображений: чтобы приложение могло распознавать объекты на фотографиях или видео (например, Google Lens);

  • обработка естественного языка (NLP): в приложениях с голосовыми ассистентами или чат-ботами ML обрабатывает речь и тексты;

  • персонализация: алгоритмы ML анализируют поведение пользователей и предлагают персонализированный контент или рекомендации;

  • распознавание голоса: используется в приложениях для конвертации речи в текст и команд.

Существует несколько способов, как интегрировать модели машинного обучения в приложение. Можно воспользоваться ML Kit от Firebase или библиотеками на Dart. Но самое распространенное решение — фреймворк TensorFlow Lite (TFLite). Его главное (но не единственное) преимущество — что он будет работать в том числе тогда, когда смартфон не подключен к интернету.

В отдельной статье разбираем, как настроить модель для работы с TFLite, как интегрировать TFLite во Flutter-приложение и как оптимизировать модели для мобильных устройств.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

База для начинающих Android-разработчиков

О профессии и главной IDE

Как стать Android-разработчиком и расти в профессии — чем занимается разработчик, что должен уметь, перспективы карьеры.

Как пользоваться Android Studio — инструкция для начинающих. Рассказываем о возможностях программы, помогаем настроить и запустить.

О языках программирования

Почему почти все приложения для Android написаны на Kotlin — рассказываем об официальном языке для разработки.

5 популярных языков для мобильной разработки — не всё можно сделать с помощью Kotlin.

Два полезных инструмента

Gradle — поможет автоматизировать сборку приложений.

RecyclerView — пригодится для отображения данных в приложениях.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии1

Нативные инструменты для создания виджетов во Flutter-приложении

Несмотря на все преимущества Flutter, он не всегда оптимально решает задачи, которые требуют глубокой нативной интеграции. Существуют инструменты, разработанные специально под нативные платформы, но недоступные напрямую из Dart. И как правило, в таких случаях на помощь приходит PlatformChannel

Но существуют и нативные инструменты, которые интегрируются с Flutter. Они, например, позволяют внедрять Home Widgets — элементы, с которыми можно взаимодействовать напрямую с домашнего экрана

Когда виджеты разработаны, их нужно внедрить в приложение. Библиотека home_widget предоставляет набор инструментов для работы с нативными виджетами, данные методы мы можем вызвать при помощи класса HomeWidget. Вот самые важные из методов:

  1. Future<bool?> saveWidgetData<T>( String id, T? data ) 

    Метод позволяет сохранить передаваемые данные в хранилище нашего виджета.

  2. Future<bool?> updateWidget({String? name, String? androidName, String? iOSName, String? qualifiedAndroidName,})

    Метод вызывается для обновления нашего виджета.

  3. Future<T?> getWidgetData<T>(String id, {T? defaultValue,})

    Метод позволяет прочитать данные из нашего виджета. Он может быть полезен, если нужно синхронизировать информацию между виджетом и Flutter-приложением.

Больше подробностей о нативных инструментах с примерами кода вы найдете в отдельной статье.

Теги:
Всего голосов 4: ↑4 и ↓0+6
Комментарии0

Компании «Транссеть» и «Ред Софт» объявляют о выходе мобильного приложения «ТРС.Обходчик» на устройствах под управлением мобильной операционной системы РЕД ОС М. «ТРС.Обходчик» входит в состав комплексного решения TRS.EAM и предназначено для автоматизации процессов эксплуатации инфраструктуры в различных секторах экономики, таких как промышленность, транспортная сфера, сельское хозяйство и других.

Мобильное приложение «ТРС.Обходчик» разработано в рамках партнёрского взаимодействия компаний «Транссеть» и «Ред Софт». Оно позволяет пользователям получать доступ к информации и выполнять операции прямо с мобильных устройств. Приложение обладает интуитивно понятным интерфейсом и высокой степенью защиты данных.

Приложение TRS.EAM представляет собой комплексное решение для автоматизации процессов эксплуатации инфраструктуры. Оно включает в себя различные модули и инструменты, позволяющие оптимизировать работу предприятий и организаций, повысить эффективность использования ресурсов и снизить риски возникновения аварийных ситуаций.

Теги:
Всего голосов 3: ↑3 и ↓0+8
Комментарии0

Ближайшие события

27 марта
Deckhouse Conf 2025
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

Сервисы Apple частично отключились по всему миру, а не только в России

У пользователей iPhone, iPad и Mac сейчас возникают проблемы с загрузкой приложений из Apple App Store. Когда пользователи нажимают «get», чтобы загрузить приложение, значок ненадолго зависает, показывая, что оно загружается, но затем снова появляется надпись «get», и пользователи не могут установить нужное приложение.

Судя по графику сбоев в работе App Store от DownDetector, проблемы начали возникать около 11 утра по восточному времени.

Несмотря на то, что у пользователей возникают проблемы с загрузкой приложений, похоже, что App Store по-прежнему может их обновлять. На странице статуса Apple указано, что сервисы App Store работают в обычном режиме. 

Источник

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Привет! Это подкаст «Айтидо» от команды мобильной разработки Альфа-Банка 🎙 В втором выпуске подкаста мы поговорили с Николаем Крыловым, техлидом мобильной разработки.

Обсуждаем разное — от карьеры проводника в РЖД до погружения в фотографию. Коля рассказал, как пофигизм помогает ему быть лидом, как выстроены производственные процессы и почему сотрудники порой их нарушают. А также поделился советом, как спастись от выгорания и переработок ⏰

Ссылки на подкаст:

🔗 RuTube
🔗 YouTube
🔗 ВКонтакте
🔗 Яндекс Музыка

Подписывайтесь на Tелеграм-канал Alfa Digital, там много интересного о нашей корпоративной культуре и технологиях.

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии0

Не пытайтесь, это React Native + Flavor

Инсайт дня: React Native и flavor

В компании где я работаю, существует приложение написанное на нативных технологиях в лице — Kotlin/Swift.

Так вот, в приложение на андроид реализована система flavor, практически для более чем 80 компаний.

Попытка удешевить разработку, привела нас к React Native, так как у меня был немалый опыт разработки и работы с данным фреймворком.

С первого взгляда не было очевидно, но… оказывается в React Native поддержки подобного попросту нет от слова совсем.

Конечно, любой скажет «да ведь просто можно использовать переменную флейвора текущего приложения, и менять контент условностями» — но все не столь однозначно и просто… (ведь требование и цель использовать все преимущества этой концепции)

Как итог, если вы хотите реализовать концепцию flavor в полной мере, используя React Native (и вы четко понимаете как это работает в нативе) — то предупрежу сразу что у вас не получится, банально из‑за того, что вы получаете возможность настроить лишь ваши иконки и заголовки, ну и настройки на уровне андроид конфигов =)

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии1

В Японии запустили приложение с ИИ для повышения уровня брачности и рождаемости

Местное правительство Токио запустило приложение для знакомств на базе искусственного интеллекта для поощрения браков в рамках своих усилий по решению проблемы снижения рождаемости в Японии.

Приложение под названием Tokyo Enmusubi (поиск партнеров в Токио) доступно лицам в возрасте 18 лет и старше, которые проживают в столице или добираются до нее на работу. Пользователи должны пройти онлайн-собеседование, предоставить удостоверение личности, документ, подтверждающий доход, и свидетельство о статусе холостяка для обеспечения безопасности на платформе.

Приложение, доступное на смартфонах и онлайн, использует искусственный интеллект для подбора потенциальных партнеров на основе общих ценностей и ответов на 110 подробных вопросов.

Чтобы зарегистрироваться, пользователи должны внести взнос в размере 11 000 иен (около 77 долларов США), а членство действительно в течение двух лет. Хотя искусственный интеллект предоставляет предложения по подбору пары, пользователи также могут искать партнеров на основе определенных критериев.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии3

Вышел новый Sravni Podcast: про устройство мобильной разработки и управление её процессам

С Денисом Сизым, тимлидом Сравни, обсудили специфику приложений для iOS и Android, сложности с проверками в сторах, преимущества Backend Driven UI и развитие в ИТ — от написания первого калькулятора на Pascal до управления командой.

Также в подкасте:

  • Как и для чего сеньор становится тимлидом? 

  • В чем польза архитектурного мышления? 

  • Почему все «сидят в телефонах», но важным чаще пользуются в вебе? 

  • Бывают ли в идеальном мире дейлики?

Посмотреть или послушать подкаст можно здесь:

Больше полезных видео, статей и других ИТ-материалов — в ТГ инженерного сообщества Sravni Tech.

Теги:
Всего голосов 6: ↑6 и ↓0+8
Комментарии0

Лидерство в коде: технологии, сообщества и корпоративная среда

Привет! Это подкаст «Айтидо» от команды мобильной разработки Альфа-Банка 🎙

Айтидо – путь мобильных технологий. В этом подкасте мастера разработки делятся опытом создания приложений, раскрывая искусство объединения бизнеса, команды и инноваций. Каждый выпуск – это частичка того пути айтидо, который мы выбрали.

В первом выпуске подкаста мы поговорили с Никитой Збитневым, техлидом мобильной разработки

Поговорили о его пути в мобильную разработку через Java, как внедряются новые технологии в финтехе и почему многие переходят из корпораций в стартапы. Никита поделился лайфхаками о том, как он остается на одной волне с командой, развивает сообщество и успевает играть в D&D 🐉

🔗 RuTubehttps://alfa.me/bYzuxc

🔗 YouTubehttps://alfa.me/brD4Lx

🔗 ВКонтактеhttps://alfa.me/66Z_dt

Подписывайтесь на telegram-канал Alfa Digital, там много интересного о нашей корпоративной культуре и технологиях.

Теги:
Всего голосов 5: ↑4 и ↓1+5
Комментарии1

Передаем привет всем Android-разработчикам и спешим поделиться хорошей новостью: хотим провести публичное собеседование с одной большой компанией. Это классный вариант проверить знания, поделиться ими с другими. А еще быстрее найти работу — да вы и сами в курсе.

Нужны спецы уровня middle+

→ а заявки собираем тут

Теги:
Всего голосов 4: ↑2 и ↓2+3
Комментарии0

Вклад авторов

Работа

Swift разработчик
16 вакансий
iOS разработчик
10 вакансий