# мобильная разработка

Published articles for мобильная разработка.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Using snapshot tests to prevent accessibility regressions in a Jetpack Compose Android app

DevFeed: [Using snapshot tests to prevent accessibility regressions in a Jetpack Compose Android app](<https://devfeed.tech/articles/qa-24887.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/yandex/articles/1074780/>)

Author: ithersta (Яндекс)

Published: 2026-08-27T07:05:12Z

Content type: tutorial

Language: ru

Sources: [Яндекс - Как мы делаем Яндекс / Статьи](<https://devfeed.tech/sources/source.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [яндекс](<https://devfeed.tech/topics/tag-4004cf5948d3.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [qa](<https://devfeed.tech/tags/qa.md>), [tag-4004cf5948d3](<https://devfeed.tech/tags/tag-4004cf5948d3.md>), [tag-e69b694e3ce2](<https://devfeed.tech/tags/tag-e69b694e3ce2.md>), [tag-f538878e20ff](<https://devfeed.tech/tags/tag-f538878e20ff.md>)

### AI overview

The article explains how the Yandex Mail Android team uses snapshot tests with Jetpack Compose to detect accessibility regressions. It describes Compose semantics, TalkBack, and why manual accessibility checks are insufficient as screens and shared components grow.

### Source excerpt

Почта -- массовый продукт, которым пользуются самые разные люди, и поэтому он должен быть максимально доступен. Нам важно, чтобы приложение Яндекс Почты было удобно каждому, в том числе людям с особенностями зрения. На телефонах с Android за доступность для людей с особенностями зрения отвечает TalkBack -- функция озвучивания экрана, которая зачитывает текст, роль и состояние всех размеченных элементов на экране и позволяет с ними взаимодействовать. Если разметка сломается, приложением будет пользоваться сильно сложнее или вообще невозможно. Читать далее

## Навигация в Jetpack Compose без магии: что на самом деле делают библиотеки навигации

DevFeed: [Навигация в Jetpack Compose без магии: что на самом деле делают библиотеки навигации](<https://devfeed.tech/articles/jetpack-compose-30670.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/hh/articles/1052310/>)

Author: karenkov\_id (hh.ru)

Published: 2026-07-01T08:20:40Z

Content type: tutorial

Language: ru

Sources: [HeadHunter RU](<https://devfeed.tech/sources/headhunter-ru.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [modo](<https://devfeed.tech/tags/modo.md>), [remembersaveable](<https://devfeed.tech/tags/remembersaveable.md>), [saveablestateholder](<https://devfeed.tech/tags/saveablestateholder.md>), [tag-08a48a9394c3](<https://devfeed.tech/tags/tag-08a48a9394c3.md>), [tag-f538878e20ff](<https://devfeed.tech/tags/tag-f538878e20ff.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

This article explains why naïve screen-list navigation is insufficient in Jetpack Compose and examines how the Modo navigation library addresses screen state isolation, navigation-graph persistence, lifecycle and resource cleanup, and instance stability.

### Source excerpt

Вы когда-нибудь задумывались, зачем нужны библиотеки для навигации в Jetpack Compose? Почему мы не можем просто взять mutableStateOf со списком экранов и переключаться между ними? Оказывается, если мы попробуем реализовать такой наивный подход, то столкнёмся с рядом проблем: rememberSaveable не работает, ViewModel не очищаются после ухода с экрана, Lifecycle не работает корректно и многое другое. В статье разберём, как работают библиотеки навигации в Jetpack Compose и какие задачи они решают на примере библиотеки навигации Modo. Читать далее

## Как мы мигрируем навигацию на Compose в Android-приложениях с 400+ экранами

DevFeed: [Как мы мигрируем навигацию на Compose в Android-приложениях с 400+ экранами](<https://devfeed.tech/articles/compose-android-400-30667.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/hh/articles/1044842/>)

Author: horseunnamed (hh.ru)

Published: 2026-06-09T08:00:40Z

Content type: article

Language: ru

Sources: [HeadHunter RU](<https://devfeed.tech/sources/headhunter-ru.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [hh-ru](<https://devfeed.tech/tags/hh-ru.md>), [migration](<https://devfeed.tech/tags/migration.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [modo](<https://devfeed.tech/tags/modo.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [tag-08a48a9394c3](<https://devfeed.tech/tags/tag-08a48a9394c3.md>), [tag-ae979152fd5d](<https://devfeed.tech/tags/tag-ae979152fd5d.md>), [tag-f538878e20ff](<https://devfeed.tech/tags/tag-f538878e20ff.md>), [ui](<https://devfeed.tech/tags/ui.md>), [vj](<https://devfeed.tech/tags/vj.md>)

### AI overview

An Android tech lead at hh.ru describes the ongoing migration of two Android applications from Fragment-based navigation toward a Compose-first approach. The article explains the scale of the migration, the hierarchy of navigation containers, nested navigation flows, and multistack navigation between main application sections.

### Source excerpt

Привет, Хабр! Меня зовут Константин Дубинко, я -- Android-техлид в hh.ru. Сейчас мы заканчиваем большой переезд навигации в двух Android-приложениях -- для соискателей и работодателей. В этой статье я покажу, как у нас там устроена навигация, почему мы решили отказаться от Fragment-навигации и как превратили хаотичную миграцию с "островками" новой архитектуры в управляемый процесс с метриками и понятным планом работ. Заодно расскажу, какие решения сработали, какие -- нет, и что я сделал бы иначе, если бы начинал заново. Читать далее

## How Faster Screen Loading Affected Product Metrics in the hh.ru Mobile App

DevFeed: [How Faster Screen Loading Affected Product Metrics in the hh.ru Mobile App](<https://devfeed.tech/articles/hh-30696.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/hh/articles/977376/>)

Author: alektas (hh.ru)

Published: 2025-12-17T05:50:44Z

Content type: article

Language: ru

Sources: [HeadHunter RU](<https://devfeed.tech/sources/headhunter-ru.md>)

Topics: [SRE](<https://devfeed.tech/topics/sre.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [ab-d64cb2e3f30f](<https://devfeed.tech/tags/ab-d64cb2e3f30f.md>), [android](<https://devfeed.tech/tags/android.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [hh-ru](<https://devfeed.tech/tags/hh-ru.md>), [ios](<https://devfeed.tech/tags/ios.md>), [site-reliability](<https://devfeed.tech/tags/site-reliability.md>), [site-reliability-engineering](<https://devfeed.tech/tags/site-reliability-engineering.md>), [sre](<https://devfeed.tech/tags/sre.md>), [tag-b92bf5906bbd](<https://devfeed.tech/tags/tag-b92bf5906bbd.md>), [tag-d1a8ff602d37](<https://devfeed.tech/tags/tag-d1a8ff602d37.md>), [tag-f538878e20ff](<https://devfeed.tech/tags/tag-f538878e20ff.md>), [tag-fa773991fb10](<https://devfeed.tech/tags/tag-fa773991fb10.md>), [ux](<https://devfeed.tech/tags/ux.md>)

### AI overview

An hh.ru development team shares the preparation and interpretation of an A/B experiment that optimized one mobile-app screen, accelerated content loading, and examined the effect on product metrics. The article also discusses applying SRE practices to mobile development.

### Source excerpt

Привет! Меня зовут Саша Тотилас и я руковожу командой разработки в hh.ru. Хочу поделиться с Хабром результатами A/B-эксперимента: при оптимизации одного из экранов нашего приложения мы ускорили загрузку контента и выяснили, как это влияет на продуктовые метрики, а также собрали интересные инсайты. Я не буду глубоко погружаться в технические детали, а сосредоточусь на подготовке эксперимента и интерпретации результатов. Статья будет полезна не только для мобильных разработчиков, но и для аналитиков и продактов. Читать далее

## Snapshot-тесты для дизайн-системы hh.ru

DevFeed: [Snapshot-тесты для дизайн-системы hh.ru](<https://devfeed.tech/articles/snapshot-hh-ru-30693.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/hh/articles/962420/>)

Author: McDee (hh.ru)

Published: 2025-11-05T06:00:10Z

Content type: tutorial

Language: ru

Sources: [HeadHunter RU](<https://devfeed.tech/sources/headhunter-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [ci](<https://devfeed.tech/topics/ci.md>)

Tags: [hh-ru](<https://devfeed.tech/tags/hh-ru.md>), [ios](<https://devfeed.tech/tags/ios.md>), [qa](<https://devfeed.tech/tags/qa.md>), [snapshot](<https://devfeed.tech/tags/snapshot.md>), [snapshot-3ed662e946eb](<https://devfeed.tech/tags/snapshot-3ed662e946eb.md>), [tag-4adf7d504f34](<https://devfeed.tech/tags/tag-4adf7d504f34.md>), [tag-f538878e20ff](<https://devfeed.tech/tags/tag-f538878e20ff.md>)

### AI overview

The article explains snapshot testing and hh.ru's renewed effort to apply it to design-system components rather than frequently changing application screens. It discusses the reasons for adoption and practical questions such as library choice, coverage, flakiness, runtime, and snapshot storage.

### Source excerpt

Привет! Меня зовут Андрей Максимкин. Я iOS-разработчик в hh.ru. В своих статьях (тут, тут и не только) мы уже не раз говорили о большой любви к тестам и их важной роли в нашем процессе разработки. В этой статье хочу поделиться опытом использования snapshot-тестов, начиная с этапа внедрения. Статья будет полезна для QA и iOS-разработчиков разных уровней. Обсудим не только теорию, но и напишем реальный snapshot-тест -- как в нашей практике. Вместо вступления Сначала расскажем про snapshot-тесты и для чего они нужны. Snapshot тесты -- это метод тестирования, который используется для защиты внешнего вида компонентов и интерфейсов от незапланированных изменений. Они позволяют зафиксировать эталонное состояние компонента и в дальнейшем использовать как образец. Это помогает выявлять изменения в пользовательском интерфейсе, которые могут возникнуть в результате обновлений кода. В hh.ru мы активно разрабатываем нашу собственную дизайн-систему (ДС). Дело в том, что компоненты ДС могут иметь широкий набор свойств: цвета, размеры, скругления. Проверять корректность, например, цветов обычным ручным тестировщикам на длинной дистанции невозможно, поэтому возникла потребность автоматизировать проверки. Кроме того, при рефакторинге кода некоторые компоненты могут сломаться -- хотелось бы находить такие проблемы сразу. Snapshot-тесты показались лучшим решением этих проблем. Когда-то давно в hh.ru уже были snapshot-тесты. На тот момент они были написаны на экраны приложения. Эти экраны часто меняли свой дизайн, тесты вели себя нестабильно и падали, поэтому их приходилось переписывать. В итоге от snapshot-тестов отказались. Так что в своей новой попытке внедрения snapshot-тестов решили не писать тесты для экранов, а только для ДС. Читать далее

## Укрощаем асинхронный код с помощью async/await

DevFeed: [Укрощаем асинхронный код с помощью async/await](<https://devfeed.tech/articles/async-await-30683.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/hh/articles/904506/>)

Author: McDee (hh.ru)

Published: 2025-04-29T06:50:38Z

Content type: tutorial

Language: ru

Sources: [HeadHunter RU](<https://devfeed.tech/sources/headhunter-ru.md>)

Topics: [async/await](<https://devfeed.tech/topics/async-await.md>), [async](<https://devfeed.tech/topics/async.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Swift](<https://devfeed.tech/topics/swift.md>)

Tags: [async](<https://devfeed.tech/tags/async.md>), [await](<https://devfeed.tech/tags/await.md>), [ios](<https://devfeed.tech/tags/ios.md>), [ios-92ecabba3495](<https://devfeed.tech/tags/ios-92ecabba3495.md>), [ios-development](<https://devfeed.tech/tags/ios-development.md>), [swift](<https://devfeed.tech/tags/swift.md>), [tag-218f4e01a540](<https://devfeed.tech/tags/tag-218f4e01a540.md>), [tag-7b7ea8dda2d4](<https://devfeed.tech/tags/tag-7b7ea8dda2d4.md>), [tag-ae979152fd5d](<https://devfeed.tech/tags/tag-ae979152fd5d.md>), [tag-f538878e20ff](<https://devfeed.tech/tags/tag-f538878e20ff.md>)

### AI overview

This Russian-language tutorial explains async/await for asynchronous and multithreaded programming in iOS applications with Swift. It introduces the core concepts and compares async/await with GCD, highlighting code readability and error handling.

### Source excerpt

Привет! Меня зовут Андрей Максимкин, я iOS-разработчик в hh. Мы в команде активно используем async/await подход при написании нового кода, а также активно применяем при переписывании старого. В процессе работы сталкивались с некоторыми интересными и не самыми очевидными моментами -- их и рассмотрим в статье. Работа с различными потоками -- очень важная часть разработки мобильных приложений под iOS. Грамотное распределение нагрузки положительно влияет на скорость работы приложения, а значит, и на пользовательский опыт. До Swift 5.5 для работы с многопоточностью в основном использовали фреймворки GCD и NSOperation. Начиная с версии Swift 5.5 стал доступен функционал async/await. В статье мы кратко расскажем о базовых принципах данного подхода и сделаем акцент на проблемах и особенностях, которые необходимо знать при написании кода. Информация будет полезна тем, кто уже знаком с функционалом async/await, а некоторые примеры могут быть интересны и более продвинутым разработчикам. Поехали!

## Карантин UI-тестов в iOS

DevFeed: [Карантин UI-тестов в iOS](<https://devfeed.tech/articles/ui-ios-30676.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/hh/articles/807351/>)

Author: Timbaev (hh.ru)

Published: 2024-05-13T08:00:34Z

Content type: article

Language: ru

Sources: [HeadHunter RU](<https://devfeed.tech/sources/headhunter-ru.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Xcode](<https://devfeed.tech/topics/xcode.md>)

Tags: [ios](<https://devfeed.tech/tags/ios.md>), [pull-request](<https://devfeed.tech/tags/pull-request.md>), [qa](<https://devfeed.tech/tags/qa.md>), [qa-testing](<https://devfeed.tech/tags/qa-testing.md>), [tag-32c911f01784](<https://devfeed.tech/tags/tag-32c911f01784.md>), [tag-4adf7d504f34](<https://devfeed.tech/tags/tag-4adf7d504f34.md>), [tag-7bc388df28ed](<https://devfeed.tech/tags/tag-7bc388df28ed.md>), [tag-8e9a901cca08](<https://devfeed.tech/tags/tag-8e9a901cca08.md>), [tag-97ed25004d35](<https://devfeed.tech/tags/tag-97ed25004d35.md>), [tag-ae979152fd5d](<https://devfeed.tech/tags/tag-ae979152fd5d.md>), [tag-d749bb423e1e](<https://devfeed.tech/tags/tag-d749bb423e1e.md>), [tag-e932065bc8da](<https://devfeed.tech/tags/tag-e932065bc8da.md>), [tag-f538878e20ff](<https://devfeed.tech/tags/tag-f538878e20ff.md>), [ui](<https://devfeed.tech/tags/ui.md>), [ui-3e41457d883f](<https://devfeed.tech/tags/ui-3e41457d883f.md>), [ui-feac40da31e7](<https://devfeed.tech/tags/ui-feac40da31e7.md>), [xcode](<https://devfeed.tech/tags/xcode.md>), [xcuitest](<https://devfeed.tech/tags/xcuitest.md>)

### AI overview

This article describes how hh.ru's iOS platform team handles unstable UI tests. It discusses the causes of flakiness, how failing tests can block pull requests and development, and the team's process for quarantining broken tests for investigation, repair, and later re-enablement.

### Source excerpt

Всем привет! Я Тимур -- iOS разработчик в платформенной команде hh.ru. Сегодня я расскажу о нестабильных UI-тестах в iOS, и как мы с ними справляемся. Мы уделяем массу внимания UI-тестам, ведь именно они обеспечивают качество и стабильность в наших iOS-приложениях. Сейчас у нас включено около 600 UI-тестов: они гоняются утром, вечером и на каждом PR в develop. О том, как мы обеспечиваем качество мобильной разработки есть отдельная статья. Рано или поздно большое количество UI-тестов скорее всего начнут тормозить разработку, потому что их стабильность зависит от множества факторов: стенды (API), инфраструктура (обновление Xcode, машин, СI), кодовая база. Даже из-за проблем в самом XCUITest тесты могут начать выдавать аномалии. Если хотите узнать про наш процесс -- смело нажимайте "Читать далее". Читать далее

## Кошелёк запускает конкурс мобильных разработчиков с призовым фондом в 1 000 000 рублей

DevFeed: [Кошелёк запускает конкурс мобильных разработчиков с призовым фондом в 1 000 000 рублей](<https://devfeed.tech/articles/1-000-000-37992.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/koshelek/articles/526054/>)

Author: ksenia\_r (Кошелёк)

Published: 2020-11-02T09:00:24Z

Content type: news

Language: ru

Sources: ["Кошелёк" RU](<https://devfeed.tech/sources/ru.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [cardsmobile](<https://devfeed.tech/tags/cardsmobile.md>), [geekbrains](<https://devfeed.tech/tags/geekbrains.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [tag-03968a887ba5](<https://devfeed.tech/tags/tag-03968a887ba5.md>), [tag-ae979152fd5d](<https://devfeed.tech/tags/tag-ae979152fd5d.md>), [tag-bd401315e831](<https://devfeed.tech/tags/tag-bd401315e831.md>), [tag-f538878e20ff](<https://devfeed.tech/tags/tag-f538878e20ff.md>)

### AI overview

Cardsmobile has launched the Wallet Mobile Challenge, a competition for iOS and Android developers running from November 2 to December 15. Participants will redesign the Wallet app's main screen and card-details screen, with prizes for the top three entries on each platform and potential invitations to join the team.

### Source excerpt

Полчаса назад мы запустили Кошелёк Mobile Challenge -- конкурс для iOS и Android разработчиков, в котором можно решить реальный кейс приложения и заработать от 100 до 250 тысяч рублей. Лучших участников мы также пригласим в команду, чтобы вместе запустить наш сервис на европейских рынках в 2021 году. Читать дальше ->