Обновить

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

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

MVVM-курильщика: почему ваша ViewModel — это помойка на 2000 строк, и как это исправить

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели6.1K

Если вы когда-нибудь открывали проект, где ViewModel превратилась в свалку логики, навигации и форматирования дат - поздравляю, вы видели MVVM-курильщика. Рассказываю, почему «чистый» MVVM из учебников рассыпается в бою, как превратить ViewModel в машину состояний вместо мусорного ведра, и почему import UIKit в вашей VM - это диагноз. Без воды, с примерами кода и болью. Эта статья - не очередной пересказ документации. Вы научитесь разделять данные и их представление так, чтобы тесты писались сами собой, а ваши коллеги не проклинали вас на код-ревью.

Продолжим

Как я решил войти в Android Developing через вайбкодинг

Время на прочтение5 мин
Охват и читатели14K

Или как собрать и довести до релиза без кодинга и почти бесплатно. Или моя попытка разобраться в процессе разработки и далее использовать как учебное пособие не делая скучные "Hello world", калькуляторы. Что-то живое, нужное и настоящее.

Читать далее

Сохранение позиции прокрутки и состояния курсора при переходах по навигации в iOS

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели7.5K

Вы когда-нибудь замечали разницу между просто хорошим приложением и тем, которое ощущается «родным», надежным и дорогим? Часто дело не в дизайне или анимациях, а в мелочах, которые мы воспринимаем как должное, пока они не ломаются. Одна из таких критических мелочей - способность приложения помнить, где вы остановились. Вы читаете длинную статью, сворачиваете приложение, чтобы ответить на сообщение, возвращаетесь через минуту, а вас выбрасывает в самое начало текста. Раздражает, правда? Или пишете заметку, переключаетесь на браузер, возвращаетесь, а клавиатура скрыта и курсор потерян. В этой статье мы разберем, как технически грамотно реализовать сохранение позиции скролла и состояния курсора в iOS-приложениях. Мы уйдем дальше банальных советов и рассмотрим реальные сценарии с навигацией, табами и асинхронной загрузкой данных, чтобы ваши пользователи никогда не чувствовали себя потерянными.

Продолжим

Паттерн Memento в Android: полный разбор сохранения состояния

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели6.1K

Если вы хоть раз теряли пользовательский ввод после поворота экрана или возвращались к приложению из фона и обнаруживали пустой экран вместо заполненной формы — вы знаете, о чем пойдет речь. Сохранение состояния в Android — одна из тех тем, которые кажутся простыми до первого бага в проде. Система может убить процесс в любой момент, конфигурация меняется, а пользователь ожидает, что все останется на своих местах.

В статье о том, как паттерн Memento реализуется в Android через CustomView, SavedStateHandle, Compose и навигацию.

Читать далее

Kotlin и Arrow: функциональное программирование с Either, Validated и эффектами

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели5.6K

Сегодня расскажем про библиотеку Arrow в Kotlin. Arrow привносит в Kotlin крутые штуки из функционального программирования: типы вроде Either и Validated для работы с ошибками, эффекты для безопасной работы с внешним миром, ну и много всего. Звучит мощно, но когда за это действительно стоит браться?

Читать далее

Особенности построения и развития дизайн-системы в мобильном приложении СберЗдоровья

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели4.9K

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

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

Меня зовут Илья Гущин. Я старший Android-разработчик в СберЗдоровье — MedTech компании №1 в России. В этой статье я расскажу, как мы в СберЗдоровье строили мобильную дизайн-систему и оптимизировали интерфейсы.

Читать далее

FlutterPulse: Январский дайджест 2026 — новости, переводы и обновления месяца

Время на прочтение2 мин
Охват и читатели5.1K

Привет, Flutter-разработчики! 👋
Январь выдался по-настоящему снежным и спокойным - идеальное время, чтобы подтянуть знания, разобрать отложенные статьи и обновить стек перед новым рабочим сезоном.

И этот месяц для нас особенный!

Читать далее

Что нам стоит на КМП построить?

Время на прочтение4 мин
Охват и читатели8.5K

Рассказываю с цифрами в руках о сокращении трудозатрат разработки под несколько платформ при использовании Kotlin Multiplatform

Читать далее

Почему PWA на iOS всё ещё не торт — и что на самом деле разрешает Apple

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели6.5K

Если вы открыли эту статью, значит, ваш менеджер или заказчик снова пришли с «гениальной» идеей: «А давайте не будем тратить бюджет на нативную iOS-разработку, а сделаем PWA? Это же кроссплатформенно, модно и дешево!». И теперь вам нужно аргументированно объяснить (или понять самому), почему в 2026 году, несмотря на все обещания открытого веба и давление регуляторов, PWA на iPhone всё ещё ощущается как гражданин второго сорта.

В этом тексте не будет маркетинговой шелухи про «единый код для всех». Мы разберем суровую техническую реальность Safari 19, ограничения WebKit, о которых Apple предпочитает молчать, и те немногие лазейки, которые позволяют сделать опыт использования веб-приложений хотя бы терпимым. Вы узнаете, почему localStorage умирает при установке, как заставить работать Deep Links (и почему они все равно ломаются), и в каких редких случаях PWA действительно может заменить App Store. Это гайд по выживанию в экосистеме, которая активно сопротивляется вашему присутствию.

Продолжим

Безопасный обмен данными между приложениями на Android: intents, URI schemes, shared preferences

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели8.4K

В Android-разработке рано или поздно придётся столкнуться с задачей передачи данных между приложениями. Казалось бы, что тут сложного - отправил intent, получил результат. Но стоит копнуть глубже, и выясняется, что за простым API скрывается целый зоопарк потенциальных дыр в безопасности. Мы разберем три основных механизма обмена данными в Android: intents, URI schemes и shared preferences. Посмотрим, как они работают под капотом, где подстерегают грабли и как защитить своё приложение от любопытных глаз. Если вы пишете на Android и хотите понять, почему «просто передать данные» - это плохая идея, читайте дальше.

Продолжим

Безопасный обмен данными между приложениями в iOS

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели5.4K

Межпроцессное взаимодействие в iOS - штука хитрая. Apple выстроила целую систему песочниц и ограничений, и просто так передать данные из одного приложения в другое не получится. Зато когда разберёшься, открывается масса возможностей: от банальной передачи изображений до выстраивания целых экосистем приложений. Давай разберем все основные способы обмена данными между приложениями (от URL Schemes до App Groups) с акцентом на безопасность и реальные проблемы, которые могут возникнуть. Покажу код, расскажу, где какой метод уместен, и объясню, как не наделать дыр в защите данных пользователя.

Продолжим

Когда данных от Apple недостаточно: собираем метрики производительности UI

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.7K

Привет, Хабр! Меня зовут Виталий Барабанов, я iOS-разработчик в hh.ru. Недавно мы столкнулись с проблемой: пришёл фидбэк от пользователей о тормозах и фризах в мобильном приложении. Но чтобы установить их причину, нам не хватило данных, которые по дефолту собирает Apple.

Что делать в такой ситуации? А запилить собственный сбор метрик: с какой угодно фильтрацией, сбором любой информации, интеграцией со своей аналитикой и наблюдением в дебаг-панели! В статье я хочу поделиться с Хабром, как мы это сделали, сколько времени потратили и как интерпретировали результаты.

Читать далее

Мобильная разработка за неделю #616 (19 — 25 января)

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели6.7K

В этом выпуске разработка приложений с помощью ИИ и состояние мобильного рынка, MVVM и плагины для Android Studio, миграция на Android Gradle Plugin 9.0, сокращение потребления памяти, бесплатный Skip, FunctionGemma от Google и многое другое. Заходите!

Читать далее

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

Deeplink-и во Flutter: динамические ссылки и app_links

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели5.1K

Привет! Меня зовут Анна Ахлестова, я Flutter Team Lead в компании Friflex. Мобильные приложения, в том числе на Flutter, позволяют настраивать обработку различных ссылок. В этой статье я разберу, как во Flutter реализовать поддержку deeplink-ов и универсальных ссылок и как управлять ими на уровне платформы.

Читать далее

Ошибки, которые убивают шанс на оффер в первые 10 минут: взгляд лида рекрутинга

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.6K

Вы классный разработчик. Знаете стек, пишете чистый код, умеете решать задачи. Но на ваши отклики не отвечают. После интервью на позицию вашей мечты говорят, что напишут позднее, но не связываются. Или отказывают после тестового — без объяснений. И вы не понимаете, в чем дело.

Меня зовут Татьяна Горбацевич, я лид рекрутинга в KODE. Я веду подбор сотрудников по всем техническим направлениям — от специалистов обеспечения качества до разработчиков — и каждый день вижу, как сильные специалисты теряют оффер в первые десять минут. Не на техническом интервью, а гораздо раньше: на этапе резюме, на скрининге, в первом разговоре. Рассказываю, что на самом деле влияет на решение о найме, и почему до проверки ваших хард-скиллов могут просто не дойти.

Узнать причину

Погружение в разработку плагинов для Android Studio (часть 2)

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели6.9K

Всем привет! Меня зовут Алексей, я техлид Android-направления в компании Домклик.

Добро пожаловать во вторую часть статьи про разработку плагинов для Android Studio. В предыдущей части мы сделали первоначальные настройки и рассмотрели некоторые задачи. Здесь рассмотрим ещё несколько примеров разных задач и способы их решения с помощью собственного плагина. Предполагается, что проект уже настроен, поэтому без вступления сразу перейдём к делу.

Читать далее

Все пути ведут к MWS Tables, или Как я искал решение для учета ИТ-оборудования со взаимосвязями и интуитивным UI

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели8.6K

Когда учет техники живет в «вечном Excel», это почти всегда заканчивается одинаково: разрозненные данные, ручные акты, сломанные формулы в онлайн-таблице, ошибки, взявшиеся «из ниоткуда», и потерянные часы, потраченные на поиск: где чей ноутбук, что выдали, что вернули и какой документ к этому относится. В результате страдает не только ИТ-отдел — без нормального реестра и связей между закупками, инвентарными единицами и актами легко получить хаос в документообороте.

Привет, меня зовут Евгений Смоленцев, я работаю программистом в АНО по развитию городской среды «МосводостокСтройТрест», которая занимается благоустройством улиц и сезонной инфраструктуры, капитальным ремонтом многоквартирных домов и объектов образования, строительством производственных баз, а также выполнением специализированных задач учредителя. В этом посте расскажу, как мы с помощью MWS Tables собрали учет оборудования в систему полного цикла — от закупки и присвоения инвентарного номера до выдачи сотруднику и возврата. Спойлер: мы сделали видимые взаимосвязи, удобные формы для внесения записей и генерацию актов по шаблону прямо из таблицы.

Читать далее

Удалил сервер из мессенджера. Как общаться по P2P в 2026 году без метаданных и Google Services. Личный опыт и KMP

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели23K

Помните обещания об «абсолютной приватности»? Марк клялся, Павел обещал, но в 2025-м новости о мессенджерах всё больше напоминали сводки с фронта: утечки сотен гигабайт переписки, найденные бэкдоры и данные, внезапно ставшие доступными «третьим лицам».

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

В чем реальная уязвимость сигнальных серверов

Многие мессенджеры гордятся стойкостью шифрования - AES-ключи, обфускация трафика и борьба с DPI выглядят солидно. Но остается один критический нюанс: у них всё равно есть сервер.

Даже если его называют «сигнальным» и говорят, что он нужен только для установления связи, это всё равно точка сбора данных. Если данные где-то собираются, за ними рано или поздно придут. Будь то хакерская атака или официальный запрос - метаданные (кто, когда и с кем общался) могут рассказать о вас больше, чем само содержание сообщений.

Ну и наконец в серверную могут просто прийти уполномоченные люди которые потребуют предоставить доступ ко всему.

Читать далее

Локальный плеер для IOS: Music is Player

Время на прочтение2 мин
Охват и читатели6.7K

Привет! Я разработчик iOS‑приложения Music Player в компании MediaRise. Хотел поделиться инженерной частью: как мы организовали импорт музыки из Files, автосканирование, защиту от дубликатов и стабильное воспроизведение.

Читать далее

Мобильная разработка за неделю #615 (12 — 18 января)

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели9.3K

Возвращаюсь с первым дайджесте в этом году. В нем про SwiftLint в масштабах компании, Android и ICMP, стабильный Compose Hot Reload и следующие два года в области разработки программного обеспечения, японская игра о скачках, электроналиватор и многое другое. Заходите!

Читать далее