Обновить

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

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

Как сломать Swift Concurrency

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

Нужно выполнять асинхронные операции, поддерживать многозадачность в приложении? Async/await к вашим услугам - просто и приятно. Кооперативный пул эффективно переключает потоки между задачами, а компилятор проверяет типы на потокобезопасность. И даже можно подсоединять старые части кода, написанные ещё на GCD!

Вот только приложение на проде почему-то начало виснуть…

Читать далее

Новости

Мобильная разработка за неделю #637 (29 июня — 5 июля)

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

В новом дайджесте UISlider изнутри и навигация в Jetpack Compose без магии, миграция приложения на Navigation 3 и сборщик мусора в Dart, мобильное тестирование в 2026, как меняется разработка в эпоху ИИ, новые модели Anthropic и Google и многое другое. Заходите!

Читать далее

UISlider изнутри: почему `setValue` не работает во время settle-анимации и как я это обошел

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

В iOS 26 у UISlider появился liquid-glass-вид и физика доводки (settle) после того, как пользователь отпускает палец. Если честно, я не проверял, как это выглядело в старых версиях и как оно работало, так как до iOS 26 ни в своих проектах, ни в тех, что я писал на работе, я не использовал стандартный компонент, так как его внешний вид никого не устраивал. У такой доводки есть побочный эффект: если в этот момент дернуть setValue(_:animated:) извне, наш слайдер на один кадр едет в новую точку, а потом откатывается туда, куда его тянет settle. removeAllAnimations() не помогает: анимация идёт не через CABasicAnimation, а через property-driver на display link. Дальше про то, как я нашёл рабочий путь это исправить.

Читать далее

Словари MDict в закрытом приложении, или зачем я писал RIPEMD-128 вручную

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

Добавлял в свою читалку офлайн-словари и упёрся в MDX, формат словарей MDict. Проприетарный, официальной спеки от создателей нет. Готовые Java-парсеры под GPL, а у меня закрытое приложение, тащить нельзя. Значит, пишу свой, с нуля и без зависимостей. Рассказываю, как формат устроен внутри, где я споткнулся, и почему пришлось руками писать RIPEMD-128, чтобы прочитать даже оглавление словаря.

Читать далее

Почему Android экран дёргается: простые ошибки, которые ломают плавность

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

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

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

Хочу читать дальше

Как я стал туалетным сомелье

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

История о том, как я стал туалетным сомелье Минска и создал карту всех местных уборных с расписанием, рейтингом и компасом.

Читать далее

Сборщик мусора в Dart. Часть 1: память и указатели

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


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

Эта статья — моя попытка объяснить вам доходчивым языком, что же такое Garbage Collector в Dart, объяснить почему эти некоторые знания нам нужны на практике и что из всей этой тяжелой, технической внутрянки вам необходимо знать.

Читать далее

Как энергосбережение на Android мешало Seamless-авторизации

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

Всем привет! Я Никита, тимлид команды Android в Банки.ру. 

Недавно, внедряя в приложение фичу авторизации без SMS-кода (seamless), мы столкнулись с тем, что она в упор отказывалась работать – но только на Android. Мы дебажили ее полторы недели, перепробовали все возможные варианты и закошмарили всех доступных операторов связи, прежде чем узнали, что все дело было… в энергосбережении.

В статье рассказал про наш путь борьбы с энергосбережением и, возможно, это сэкономит вам десятки часов дебага.

Читать далее

Как врач на пенсии создал AI‑приложение для определения биологического возраста на Flutter + TFLite

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

Я врач с более чем 30-летним стажем, последнее время работал доцентом медицинского вуза. Недавно вышел на пенсию и получил то, о чем мечтал всю трудовую жизнь — много свободного времени, и часть его желательно тратить с пользой (а не только играть на ПК, что я, конечно, тоже люблю).

Я давно, со студенчества, интересовался проблемами старения организма. Поработав с десятками тысяч пациентов, я уже не удивлялся, что паспортный (хронологический) возраст и реальное состояние организма — это две разные вещи. Один пациент в 60 бегает марафоны, другой в 45 еле ходит по дому. Но причины этого медицине, честно говоря, до ситх пор непонятны. Мне хотелось как‑то объективизировать, оцифровать, что ли, эту разницу без сложных анализов и дорогостоящих исследований. И чтобы каждый человек мог легко и просто оценить свой биологический возраст — не просто для того, чтобы его узнать — а сделать определенные выводы и, возможно, изменить свои привычки и даже обратиться к специалистам. Теперь для этого есть общедоступные инструменты — смартфоны с фотокамерой, искусственный интеллект и модели, способные анализировать, состояние кожи и другие показатели по фотографии. Надо попробовать, решил я. Но для этого нужно создать мобильное приложение. Раньше я бы на такое не замахнулся, ну а сейчас — время есть, инструменты есть, желание есть — why not?

Читать далее

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

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

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

В статье разберём, как работают библиотеки навигации в Jetpack Compose и какие задачи они решают на примере библиотеки навигации Modo.

Читать далее

Продолжаем рассказывать о создании продолжения DogPlanner…

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

Ну что же…, на дворе 2026 год, первый DogPlanner живёт своей жизнью, доступен на многих площадках мобильных приложений, мы о нём много писали в соцсетях и различных блогах. С тех пор как мы сделали его, а опубликовали мы его аж в июне 2020 года, вы прислали нам много различных идей по его доработке, написали множество отзывов, а также мы узнали о приличном количестве проблемных мест по его функциональности и содержанию, и всё это было абсолютно заслуженно! Хотим сказать вам огромное спасибо за всю обратную связь, которую мы получили, и получаем до сих пор от вас! Но давайте снова вернёмся к критике…

Читать далее

Народная карта бензина собрала почти 2 млн посетителей за три дня. Её навайбкодил один человек

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

Бэкенд кое-как держит нагрузку, но от нормальной монетизации автор отказывается из принципа — пока есть только донаты.

Читать далее

Лента роликов на iOS: опыт работы с AVPlayer

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

Привет, Хабр! На связи Дмитрий Андриянов, iOS-разработчик команды Медиа Платформы в Т-Банке. Одна из наших ключевых задач — разработка видеоплеера для стриминговых видео, в том числе для приложения T-Инвестиций, где есть лента тематических роликов и обучающие видео в Академии.

В T-Инвестициях на iOS лента коротких роликов — это 90% трафика, именно ее оптимизации мы уделяем больше всего внимания. В первой версии пользователи могли ждать старта видео больше 15 секунд. Мы разобрались в ограничениях AVPlayer, оптимизировали буферизацию и снизили задержки на 12% в хвосте распределения. Рассказываю, как мы улучшали пользовательский опыт и почему AVPlayer не лучшее решение для ленты роликов.

Читать далее

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

Топ-10 вопросов с Android-собеседований в 2026 — с разборами

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

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

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

Поэтому навык прохождения собеседований становится всё важнее. В этой небольшой статье хотел бы разобрать 10 популярных вопросов, с которыми можно столкнуться на собеседованиях по Android в 2026, поехали 🚀

К вопросам

Как скачать и настроить среду разработки для 1С: Элемент

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

Когда я впервые начал работать с «1С:Элемент», казалось, что установка среды - это самая простая часть. Скачать, установить, открыть - что может пойти не так?

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

Со временем у меня сформировался простой подход: минимум действий максимум результата. Делюсь, как делаю это сейчас.

Читать далее

Мобильная разработка за неделю #636 (22 — 28 июня)

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

В этом выпуске хардкорная агентская разработка под iOS и Preview-Driven скриншот тестирование для Android, кольца-расстояния и инерция пальца, пять ошибок начинающих Android‑разработчиков и пять ошибок при работе с Jetpack Compose, динамические иконки приложения на Flutter, ручной DI в Kotlin Multiplatform, расширенные возможности оплаты и низкие комиссии в Google Play, и многое другое. Заходите!

Читать далее

Тап по тысяче точек за O(log n): QuadTree и сферическая геометрия в гео-соцсети

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

9 лет назад я разрабатывал геолокационную соц.сеть на заказ, где мы отображали чаты на карте. До релиза не дошло, но интересного опыта было получено много. В очередной статье из серии рассказываю про то, как обрабатывать нажатия на MapBox и любой другой карте (Google, Yandex – не важно) и находить нужные объекты на ней, привязанные к координатам.

Читать далее

Делаем свое контекстное меню для полей ввода в Qt на мобильных устройствах

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

Не так давно возникла задача в Qt QML проекте обработать вставку изображения в поле ввода. Понимаю, что не каждый день приходится писать кроссплатформенные клиенты для настольных и мобильных систем, но если у тебя была похожая задача, то данная статья может быть тебе интересна.

Читать далее

Мессенджер с Web3 размером в 3.5 Мб: инди-разработка с нулевым бюджетом

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

ПРЕКРАСНОЕ ДАЛЕКО

Мир цифровых технологий постоянно удивляет. Сначала появились супер процессоры с тактовой частотой аж 8 мегагерц (КР1810ВМ86М — до 8 МГц), затем память (К565РУ7 - Клон Intel 41256), удивляющая своими гигантскими объемами в 256 килобай при наборе из 8 штук. Казалось, мир сошел сума и достиг поистине фантастических возможностей. Но это было в далекие 90-е.

Вспоминаю как спустя пару лет впервые запустил установку своей Windows 95 ставя будильник на два часа позже, чтобы не пропустить фееричный запуск окончания установки на моем первом DX386 с 40 мегагерцами в турборежиме. Чуть позже написал своё первое приложение на Turbo Basic, размер которого составлял всего пару десятков килобайт. Славные были времена, ведь мне тогда было около 20-ти лет.

ВСЕ ВЫШЕ И ВЫШЕ

Время шло. Технологический прорыв казалось никак не мог затихнуть. Процессоры, память, интернет, все стремительно развивалось и уже никто не думал об ограничениях. Появились первые мессенджеры. ICQ со своим уникальным "ку-ку" звучал во всех офисах. Помню даже на некоторых фирмах штрафовали своих сотрудников за использовании мессенджера на рабочем компьютере. Появились первые программы по автоматизации финансовой деятельности предприятий. 1С-ку кажется уже знают все. Встроенный язык программирования, да ещё и с русским диалектом. Вау, вот времена наступили. Всё крутиться, сверкает и манит в магазин компьютерной техники прикупить очередную видюху с двумя или даже тремя куллерами. Эх, где же вы мои любимые Trident TVGA или Cirrus Logic с одним мегабайтов видеопамяти?

Читать далее

«Люди вокруг» на SpriteKit: кольца-расстояния, инерция пальцем и виртуализация аватаров

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

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

Читать далее
1
23 ...