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

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

Открыть в Telegram

Актуальное по мобильной разработке — Android, iOS, кроссплатформа Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/oVBP

Больше

📈 Аналитический обзор Telegram-канала Мобильная разработка

Канал Мобильная разработка (@mobi_dev) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 13 198 подписчиков, занимая 9 283 место в категории Технологии и приложения и 48 844 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 13 198 подписчиков.

Согласно последним данным от 15 сентября, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -102, а за последние 24 часа — -12, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 15.30%. В первые 24 часа после публикации контент обычно набирает 9.56% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 2 020 просмотров. В течение первых суток публикация набирает 1 263 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 4.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как интерфейс, swift, доходность, linux, perfetto.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
Актуальное по мобильной разработке — Android, iOS, кроссплатформа Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/o...

Благодаря высокой частоте обновлений (последние данные получены 16 сентября, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

13 198
Подписчики
-1224 часа
-237 дней
-10230 дней
Привлечение подписчиков
сентябрь '26
сентябрь '26
+23
в 6 каналах
август '26
+37
в 3 каналах
Get PRO
июль '26
+50
в 1 каналах
Get PRO
июнь '26
+38
в 0 каналах
Get PRO
май '26
+47
в 1 каналах
Get PRO
апрель '26
+31
в 3 каналах
Get PRO
март '26
+43
в 0 каналах
Get PRO
февраль '26
+48
в 2 каналах
Get PRO
январь '26
+73
в 0 каналах
Get PRO
декабрь '25
+102
в 1 каналах
Get PRO
ноябрь '25
+49
в 0 каналах
Get PRO
октябрь '25
+140
в 0 каналах
Get PRO
сентябрь '25
+33
в 0 каналах
Get PRO
август '25
+68
в 1 каналах
Get PRO
июль '25
+169
в 3 каналах
Get PRO
июнь '25
+183
в 3 каналах
Get PRO
май '25
+134
в 3 каналах
Get PRO
апрель '25
+173
в 4 каналах
Get PRO
март '25
+231
в 5 каналах
Get PRO
февраль '25
+169
в 7 каналах
Get PRO
январь '25
+149
в 7 каналах
Get PRO
декабрь '24
+111
в 2 каналах
Get PRO
ноябрь '24
+81
в 1 каналах
Get PRO
октябрь '24
+105
в 6 каналах
Get PRO
сентябрь '24
+113
в 1 каналах
Get PRO
август '24
+115
в 2 каналах
Get PRO
июль '24
+95
в 5 каналах
Get PRO
июнь '24
+121
в 7 каналах
Get PRO
май '24
+120
в 5 каналах
Get PRO
апрель '24
+170
в 5 каналах
Get PRO
март '24
+137
в 8 каналах
Get PRO
февраль '24
+111
в 9 каналах
Get PRO
январь '24
+198
в 11 каналах
Get PRO
декабрь '23
+254
в 7 каналах
Get PRO
ноябрь '23
+92
в 7 каналах
Get PRO
октябрь '23
+99
в 8 каналах
Get PRO
сентябрь '23
+67
в 0 каналах
Get PRO
август '23
+79
в 0 каналах
Get PRO
июль '23
+64
в 0 каналах
Get PRO
июнь '23
+83
в 0 каналах
Get PRO
май '23
+83
в 0 каналах
Get PRO
апрель '23
+118
в 0 каналах
Get PRO
март '23
+94
в 0 каналах
Get PRO
февраль '23
+89
в 0 каналах
Get PRO
январь '23
+185
в 0 каналах
Get PRO
декабрь '22
+158
в 0 каналах
Get PRO
ноябрь '22
+156
в 0 каналах
Get PRO
октябрь '22
+282
в 0 каналах
Get PRO
сентябрь '22
+169
в 0 каналах
Get PRO
август '22
+383
в 0 каналах
Get PRO
июль '22
+315
в 0 каналах
Get PRO
июнь '22
+362
в 0 каналах
Get PRO
май '22
+502
в 0 каналах
Get PRO
апрель '22
+2 326
в 0 каналах
Get PRO
март '22
+685
в 0 каналах
Get PRO
февраль '22
+1 000
в 0 каналах
Get PRO
январь '22
+852
в 0 каналах
Get PRO
декабрь '21
+390
в 0 каналах
Get PRO
ноябрь '21
+2 348
в 0 каналах
Get PRO
октябрь '21
+2 515
в 0 каналах
Get PRO
сентябрь '21
+209
в 0 каналах
Get PRO
август '21
+458
в 0 каналах
Get PRO
июль '21
+717
в 0 каналах
Get PRO
июнь '21
+464
в 0 каналах
Get PRO
май '21
+129
в 0 каналах
Get PRO
апрель '21
+2 702
в 0 каналах
Get PRO
март '21
+707
в 0 каналах
Get PRO
февраль '21
+861
в 0 каналах
Get PRO
январь '21
+5 692
в 0 каналах
Дата
Привлечение подписчиков
Упоминания
Каналы
16 сентября0
15 сентября0
14 сентября+2
13 сентября+2
12 сентября0
11 сентября+3
10 сентября+2
09 сентября+2
08 сентября+1
07 сентября+4
06 сентября+1
05 сентября0
04 сентября+4
03 сентября+1
02 сентября0
01 сентября+1
Посты канала
Как отделить данные от интерфейса во Flutter с помощью репозитория Репозиторий помещают в слой данных между источником и бизн
Как отделить данные от интерфейса во Flutter с помощью репозитория Репозиторий помещают в слой данных между источником и бизнес-логикой. Он вызывает REST API или базу данных, преобразует JSON в типизированные сущности и отдаёт их приложению. Виджеты не зависят от сетевого клиента и формата ответа, а изменение стороннего API исправляют только в репозитории. В примере WeatherRepository задаёт получение погоды по городу, а реализация запрашивает OpenWeatherMap и разбирает ответ. В тестах сетевой код заменяют тестовым репозиторием. Абстрактный класс для этого необязателен: в Dart у каждого класса есть неявный интерфейс. Разбор Repository Pattern для Flutter сравнивает абстрактные и конкретные классы и показывает полный код приложения.

2
Было: качаешь альбом через торрент трое суток, боишься выключить компьютер. Стало: включаешь трек в одно нажатие и не думаешь
Было: качаешь альбом через торрент трое суток, боишься выключить компьютер. Стало: включаешь трек в одно нажатие и не думаешь, где он хранится. Между этими двумя точками — двадцать пять лет, которые SpaceWeb прошёл вместе с рунетом. Анкета к юбилею компании как раз про этот путь.
427
3
Как найти причину утечки памяти в Android с LeakCanary Утечка возникает, когда приложение сохраняет ссылку на уже ненужный объект. LeakCanary строит leak trace: цепочку сильных ссылок от неудаляемого корня сборщика мусора до удерживаемого объекта. По состоянию и жизненному циклу объектов инструмент сокращает список подозрительных ссылок. В примере из статьи синглтон Application хранит TextView в списке. TextView через поле mContext удерживает уничтоженную MainActivity. Такая цепочка указывает, где искать причину: View добавили в долгоживущую коллекцию приложения. В руководстве LeakCanary разложены четыре этапа: получить цепочку, сузить подозрения, найти ссылку, которая вызывает утечку, и убрать её. LeakCanary выполняет первые два этапа, а решение в коде остаётся разработчику.
620
4
Как Baidu переносила бизнес-логику iOS и Android на Kotlin Multiplatform В приложении Wonder одинаковые правила отдельно реал
Как Baidu переносила бизнес-логику iOS и Android на Kotlin Multiplatform В приложении Wonder одинаковые правила отдельно реализовывали на Swift и Kotlin. Изменения приходилось синхронизировать между командами, а корректность проверять дважды. Связанный с логикой интерфейс также мешал повторно использовать код и писать модульные тесты. Команда начала с общего слоя данных: объединила модели, REST-запросы, разбор JSON и кеш данных по ключу. Нативные интерфейсы iOS и Android сохранили. Позже часть интерфейсной логики перенесли на шаблон MVI для управления состоянием, а настройку модулей упростили собственными плагинами Gradle. Подключение модуля добавляло 2 МБ из-за встроенной среды выполнения, а отладка общего Kotlin-кода для iOS сводилась к логам и замедлялась по мере роста проекта. Кейс Baidu показывает порядок внедрения и ограничения, которые стоит проверить на пилотном модуле.
812
5
Как акторы Swift защищают состояние от гонок данных Гонка данных возникает, когда потоки без синхронизации обращаются к облас
Как акторы Swift защищают состояние от гонок данных Гонка данных возникает, когда потоки без синхронизации обращаются к области памяти и хотя бы один пишет в неё. Актор изолирует изменяемое состояние: снаружи его методы и свойства доступны через await, а компилятор проверяет синхронизированный доступ. Неизменяемые свойства можно читать напрямую. Каждый await может приостановить код. Между двумя вызовами актор способен обработать другой запрос, поэтому связанные операции лучше объединять в одном методе. Для методов и вычисляемых свойств, которым нужны только неизменяемые данные, есть nonisolated: их вызывают без ожидания. В разборе SwiftLee есть код до и после замены очереди с барьером на актор и объяснение изоляции. Граница подхода тоже обозначена: акторы уменьшают риск гонок данных, но состояния гонки всё ещё возможны.
887
6
Как убрать нестабильность скриншот-тестов Paparazzi с Lottie Paparazzi снимает Android-интерфейс через Layoutlib без эмулятор
Как убрать нестабильность скриншот-тестов Paparazzi с Lottie Paparazzi снимает Android-интерфейс через Layoutlib без эмулятора. Layoutlib обычно вызывают из одного потока, а приложение запускает фоновые задачи. В нестабильном тесте Lottie загружала анимацию в фоне, а затем отправляла задачу через Handler. Одновременно Paparazzi перебирала карту очереди обработчиков. Добавление обработчика во время перебора вызывало ConcurrentModificationException и периодически роняло часть CI-прогона. Обход для тестов: в методе @Before заменить LottieTask.EXECUTOR исполнителем, который запускает задачу в текущем потоке. Исправление в Layoutlib требует синхронизировать доступ к карте и её спискам. Код воспроизведения и вариант синхронизации есть в подробном разборе.
1 019
7
Как отделить загрузку данных от экранов на SwiftUI Если экран сам запускает запрос, хранит результат и переключается между за
Как отделить загрузку данных от экранов на SwiftUI Если экран сам запускает запрос, хранит результат и переключается между загрузкой, ошибкой и контентом, интерфейс смешивается с сетевой логикой. Swift by Sundell сначала показывает эту схему на ArticleView, а затем выносит загрузку и состояние в модель представления. Дальше появляются общий LoadingState с четырьмя состояниями, протокол LoadableObject и универсальный AsyncContentView. Контейнер выбирает представление по состоянию источника, а экран только отрисовывает готовые данные. Материал написан для Swift 5.3 и уже помечен архивным: архитектурный приём полезен, но API стоит сверять с текущим SwiftUI. В статье Swift by Sundell есть код всех трёх вариантов.
994
8
Как защитить доступность iOS-приложения от регрессий Разметить элементы для VoiceOver недостаточно: после редизайна доступный
Как защитить доступность iOS-приложения от регрессий Разметить элементы для VoiceOver недостаточно: после редизайна доступный сценарий может сломаться. В 2ГИС первая версия адаптации со временем именно так и потеряла работоспособность. Во второй итерации разработчик начал со snapshot-тестов. Они сохраняют текстовый слепок экрана: набор элементов и фразы, которые услышит незрячий пользователь. Если слепок меняется, тест падает до слияния кода. Автор выбрал этот путь вместо UI-тестов, которые выполняются десятки секунд, а причину расхождения здесь видно в тексте. В статье 2ГИС на Хабре есть рабочий проект и нюансы адаптации: действие Escape, динамический расчёт доступности и укрупнение элементов. Подход пригодится командам с частыми изменениями интерфейса, где ручная регрессия VoiceOver не успевает за разработкой.
996
9
Task и Task.detached в Swift: как выбрать задачу для iOS-кода Обычная Task {} пригодится, когда нужно вызвать async-функцию и
Task и Task.detached в Swift: как выбрать задачу для iOS-кода Обычная Task {} пригодится, когда нужно вызвать async-функцию из синхронного viewDidLoad. Такая задача не становится дочерней: вызвавший её метод может завершиться раньше. При этом она наследует текущий актор, локальные значения задачи и приоритет. Поэтому внутри @MainActor код задачи остаётся в изоляции текущего актора, а ожидание через await не блокирует актор. Task.detached не наследует ни актор, ни локальные значения задачи. Для доступа к состоянию актора понадобится await. При этом detached-задача не определяет, где исполняется вызываемая async-функция: это задаёт изоляция самой функции. В статье о задачах Swift разобраны оба варианта с кодом. Практическое правило: начинайте с Task, а Task.detached оставляйте для редкой работы, которую нужно отделить от актора и структурированной конкурентности.
1 007
10
Как подготовить Android-приложение к лимитам памяти в Android 17 В Android 17 появились лимиты памяти для каждого приложения,
Как подготовить Android-приложение к лимитам памяти в Android 17 В Android 17 появились лимиты памяти для каждого приложения, сначала на Pixel. Их начнут применять другие производители на устройствах с 4–16+ ГБ ОЗУ. После превышения бюджета система переносит страницы приложения в сжатую оперативную память. Сжатие нагружает процессор, поэтому интерфейс может дёргаться. Если расход продолжит расти, процесс завершат. До релиза проверьте приложение командами Memory Limiter в adb. В работе отслеживайте расход и память изображений через Android vitals. Crashlytics 20.1.0 покажет завершения по лимиту и нехватке памяти, а ProfilingManager из Android 15 соберёт дампы памяти. В статье Android Developers' Blog собраны метрики, способы диагностики и рекомендации по оптимизации.
1 083
11
try/catch или Result: как обрабатывать ошибки во Flutter В Dart сигнатура Future не показывает, что функция может б
try/catch или Result: как обрабатывать ошибки во Flutter В Dart сигнатура Future<Location> не показывает, что функция может бросить исключение. Без try/catch сетевой сбой или ошибка разбора JSON могут остаться необработанными. В материале Code with Andrea показана альтернатива из Dart 3: тип Result возвращает либо Success со значением, либо Failure с исключением. В switch код отдельно разбирает Success и Failure; если убрать один вариант, компилятор сообщит об ошибке. Цена зависит от структуры кода. Один try/catch перехватывает исключение из всей цепочки асинхронных вызовов. Result делает ошибку частью типа возврата, но каждый промежуточный результат приходится извлекать перед следующим вызовом. Сравнение поможет выбрать подход для Flutter-приложения.
1 137
12
Как не сортировать данные заново при пересчёте SwiftUI-представления Вычисляемое свойство в Swift пересчитывается при каждом
Как не сортировать данные заново при пересчёте SwiftUI-представления Вычисляемое свойство в Swift пересчитывается при каждом обращении. Если body читает sortedItems, то ввод каждого символа в TextField меняет локальное состояние, заново вычисляет body и снова сортирует словарь напоминаний. На большой коллекции эта работа может стать заметной. Автор разбирает три варианта: сортировать данные при загрузке и передавать представлению готовый массив, выполнить сортировку в init или вынести её в модель представления с ObservableObject. Инициализатор сокращает повторы, но родительский body может создать новый экземпляр представления и снова запустить сортировку. Материал Swift by Sundell написан для Swift 5.4 и перенесён в архив, поэтому примеры API стоит сверять с текущим SwiftUI. Проверьте вычисляемые свойства, которые сортируют или преобразуют коллекции при пересчёте body.
1 176
13
Как собрать Flutter-приложение, которое работает без сети В архитектуре с приоритетом локальных данных экран читает и меняет
Как собрать Flutter-приложение, которое работает без сети В архитектуре с приоритетом локальных данных экран читает и меняет базу на устройстве. Создание задачи не ждёт сервера: изменения уходят к нему после возвращения связи. Приложение продолжает работу, но разработчику нужно разрешать конфликты правок и сбои синхронизации. Автор показывает Todo-приложение: Riverpod управляет состоянием и зависимостями, Drift хранит данные на устройстве, а PowerSync отслеживает изменения и синхронизирует их с Supabase. Также разобраны очередность операций, повторы после ошибок и пакетная отправка изменений. В статье Динко Маринаца есть схема слоёв и ключевые фрагменты реализации. Для Flutter-проекта это отправная точка: интерфейс работает с локальной базой, а сетевой запрос не блокирует действие пользователя.
1 204
14
Как Android фиксирует ANR и почему стек вызовов может указать не туда В Android 12 у ANR нет одного общего таймера. Фреймворк
Как Android фиксирует ANR и почему стек вызовов может указать не туда В Android 12 у ANR нет одного общего таймера. Фреймворк задаёт срок каждой операции: BroadcastReceiver должен завершить onReceive за 10 секунд, ContentProvider ответить на запрос типа данных за одну. Если компонент успел, отложенный вызов отменяют; иначе система запускает обработку ANR. Стек вызовов может показать последнюю задачу в главном потоке, а не основную причину. В примере BroadcastReceiver занимает 4,8 секунды, затем Activity ещё 0,3 секунды, однако виновником выглядит Activity. Поэтому ищите повторяющуюся медленную работу в отчётах, а не чините каждый стек изолированно. ANR из-за таймаута ввода попадают в Android Vitals и влияют на видимость приложения в Google Play. Разбор Embrace показывает цепочку срабатывания и сбора данных. Материал касается Android 12; в других версиях реализация может отличаться.
1 242
15
Как обновлять токен без гонок в Swift Если срок действия токена истёк у нескольких запросов, каждый из них может запустить об
Как обновлять токен без гонок в Swift Если срок действия токена истёк у нескольких запросов, каждый из них может запустить обновление. В схеме из статьи AuthManager сделан актором: он последовательно обращается к своему состоянию и хранит текущую Task. Первый вызов создаёт задачу обновления, остальные ждут её результат. После завершения defer очищает ссылку на задачу. Так приложение отправляет один запрос на новый токен вместо нескольких. Перед сетевым вызовом Networking просит у менеджера действующий токен. Если запрос завершается ошибкой из-за токена, клиент обновляет его и повторяет исходный запрос один раз. Повторная ошибка завершает операцию, поэтому цикл не становится бесконечным. В разборе потока на Swift Concurrency показаны реализации обоих объектов. Пример упрощён: токен хранится в свойстве только для демонстрации, а в приложении автор рекомендует Keychain.
1 189
16
Как сохранить экран Android после завершения процесса Когда системе не хватает памяти, Android может завершить процесс прилож
Как сохранить экран Android после завершения процесса Когда системе не хватает памяти, Android может завершить процесс приложения. При возвращении выбранная карточка или поля формы пропадут, если состояние осталось только во ViewModel. SavedStateHandle хранит небольшое состояние интерфейса как пары ключей и значений. В примере на Kotlin и Compose идентификатор места записывается из ViewModel, а getStateFlow() возвращает поток состояния, который передаёт новое значение интерфейсу. При уходе с экрана запись очищается через null. Так стоит сохранять идентификаторы, ввод формы и состояние навигации. Для больших объектов и долгого хранения нужны Room или DataStore. SavedStateHandle переживает системное завершение процесса и смену конфигурации, но не явное закрытие приложения. Код и рекомендации есть в разборе Atomic Object.
1 269
17
Все дела подождут, потому что сегодня ваш день! Поздравляем с Днем программиста и желаем меньше багов и больше фич, меньше со
Все дела подождут, потому что сегодня ваш день! Поздравляем с Днем программиста и желаем меньше багов и больше фич, меньше созвонов и больше фокуса, меньше тасок с пометкой «срочно» и больше времени на отдых. Забирайте подарок из нашей IT-коробки. Мы уверены, этот презент точно пригодится вам в работе: https://tprg.ru/4kC6
1 320
18
Аська. Скайп. Биткоин, который все игнорировали. «Превед медвед» и Ждун в ленте. Всё это — в одной анкете. Пройди и узнай, ск
Аська. Скайп. Биткоин, который все игнорировали. «Превед медвед» и Ждун в ленте. Всё это — в одной анкете. Пройди и узнай, сколько информации можно было бы на тебя записать.
1 421
19
Arm обещает ускорить мобильную графику без лишнего нагрева Mali G2-Ultra NX — новый мобильный GPU, рассчитанный на нейронные
Arm обещает ускорить мобильную графику без лишнего нагрева Mali G2-Ultra NX — новый мобильный GPU, рассчитанный на нейронные вычисления. Arm утверждает, что обработка ИИ прямо на устройстве повысит графическую производительность и позволит активнее использовать трассировку лучей при меньшем расходе энергии и тепловыделении. Для разработчиков это пока ориентир, а не готовый пункт плана релиза: в Arm не подтвердили, какие устройства получат чип. GPU уже связывают с MegaLights в Unreal Engine; его возможности должны использовать Arena Breakout Infinite, Where Winds Meet и Infinity Nikki. В материале GamesIndustry.biz объясняют, почему Arm считает свой подход более открытым, чем DLSS 5, и как компания хочет приблизить мобильную графику к настольной.
2 215
20
Суд велел Google убрать лишние шаги из установки сторонних Android-сторов Если вы раздаёте приложение мимо Google Play, польз
Суд велел Google убрать лишние шаги из установки сторонних Android-сторов Если вы раздаёте приложение мимо Google Play, пользователю надо пройти цепочку экранов и предупреждений. Часть этих шагов судья Джеймс Донато назвал «антиконкурентным трением» и приказал убрать. Epic показала в суде установку чужого стора, а её юрист ввёл в поиске Play запрос «store for apps»: сторонних магазинов приложений в выдаче нет, зато есть офлайновые. «Почему всплыл Walmart?» — спросил судья. Раньше тот же суд признал монополию Google на распространение Android-приложений незаконной и обязал на несколько лет пустить конкурирующие сторы внутрь Play с доступом ко всему каталогу. Для мобильного разработчика это второй канал дистрибуции, и на нём должно отсеиваться меньше пользователей. Дело идёт в США. Если раздаёте приложение вне Play, следите, как Google перепишет экраны установки. #android #новости
1 516