New We are sorting MAX channels into categories and territories. Read the news
Public channel ID 69133383259449

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

Актуальное по мобильной разработке — Android, iOS, кроссплатформа

Всё о вебе: @tproger_web
Новости IT: @your_tech
IT Юмор: @ithumor
Типичный программист: @tproger
Для новичков в IT: @prog_point
Инструменты для программистов: @prog_tools
Всё о Python: @zen_of_python

Правила общения: tprg.ru/rules

Сайт: tprg.ru/site

Разместить рекламу: t.me/tproger_sales_bot

Channels in category
315
This channel's rank
№ 315
Open category →
Open in MAX

Posts for the period

By reactions

Search and the whole feed — after free registration. Custom dates — with a subscription; the channel owner sees them for free. Sorting by reactions — with a subscription. Sign up

Loading…

🧑‍💻 Какие навыки помогают вам в разработке в 2026 году?

Что вы чаще используете в работе? В каких задачах помогает ИИ, а где проще справиться самостоятельно?

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

Опрос анонимный и займёт около 5 минут. Результаты опубликуем в общем большом исследовании.

👉 Пройти опрос
Views: 38
Go to post Open in MAX Report an inaccuracy
Loading image…
В Kotlin появятся companion-блоки и расширения

Фабричный метод можно будет добавить типу, которым вы не управляете, даже если у него нет companion object. В новом механизме companion для этого предусмотрены companion extensions.

Companion-блоки на JVM компилируются в статические члены. Для KMP это также позволяет объявлять ожидаемые члены блока и предоставлять реализацию через статические члены Java-класса.

Функции экспериментальные и доступны с Kotlin 2.5.0-Beta1 через флаги компилятора. Companion extensions создают pre-release-бинарники с ограничениями для использования библиотек. Переписывать существующие companion object не требуется; они остаются нужны, например, когда объект реализует интерфейс.
Views: 38
Go to post Open in MAX Report an inaccuracy
Loading image…
Как собрать Swift-пакет через Gradle без CocoaPods

Kotlin/Native получает привязки к Apple-коду через cinterop, которому нужны C- или Objective-C-заголовки. У Swift-пакета таких заголовков изначально нет, а Gradle самостоятельно его не собирает.

В разборе SDK RevenueCat показана цепочка: SwiftPM описывает пакет, Gradle запускает сборку Swift, создаёт Objective-C-заголовок, статическую библиотеку и module map. Затем cinterop упаковывает привязки и библиотеку в klib.

Отдельная проблема — кеш. Изменение тела Swift-функции может не изменить заголовок, и cinterop пропустит обновление. RevenueCat добавляет хеш исходников в .def, чтобы изменения запускали задачу заново. У этого решения есть ограничения для зависимостей и конфигураций сборки.
Views: 28
Go to post Open in MAX Report an inaccuracy
Loading image…
SwiftFairy проверяет структуру SwiftUI-кода локально

Агент может знать правило и всё равно написать код, который ему противоречит. SwiftFairy разбирает Swift-код на Mac, ищет известные проблемные конструкции и через MCP возвращает замечания с привязкой к строкам и примерами исправлений.

Один из примеров — ForEach внутри List, где каждый элемент создаёт разное количество строк. Чтобы посчитать их, SwiftUI приходится вычислять содержимое для всех элементов коллекции, что замедляет длинный список.

Проверки сопоставляют структуру кода с заданными шаблонами. Сейчас есть наборы для SwiftUI, Swift Charts и современного Swift; найденное замечание стоит рассматривать вместе с контекстом конкретного экрана.
Views: 30
Go to post Open in MAX Report an inaccuracy
Loading image…
Пять функций Android Studio для работы с изменениями в коде

Android Studio умеет отложить локальные правки без коммита, упаковать их в патч и разобрать конфликт слияния в редакторе из трёх секций. Это пригодится Android-разработчику при переключении между задачами и ревью кода.

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

Отложенные правки хранит сама IDE, а не Git. Если установка Android Studio повредится, изменения можно потерять. В материале показаны действия в меню и снимки интерфейса.
Views: 30
Go to post Open in MAX Report an inaccuracy
Loading image…
SwiftUI List против UICollectionView: как измерить тяжёлую ленту в iOS 26.1

Автор собрал две версии одной ленты: с GIF-анимациями, изображениями высокого разрешения, градиентами, ячейками разного размера и жестами. Общую модель данных и обработку GIF он по возможности оставил одинаковыми, чтобы сравнение SwiftUI и UIKit не свелось к разнице в реализации.

В разборе профилирования List и UICollectionView показаны замеры задержек кадров, памяти, загрузки процессора и нагрева на iPhone 17 с iOS 26.1. Например, SwiftUI-версия за 24 секунды получила 78 задержек кадров и два зависания примерно по две секунды.

Это не универсальный приговор фреймворку, а воспроизводимый стенд с открытым проектом. Его можно взять за основу, чтобы прогнать собственный экран через Instruments и сравнить реализации на целевых устройствах перед выбором UI-фреймворка.
Views: 26
Go to post Open in MAX Report an inaccuracy
Loading image…
Как закрепить границы Clean Architecture в Swift Packages

Папки Domain, Data и Presentation сами по себе не мешают экрану обратиться к базе или стороннему SDK. В разборе SwiftUI-приложения Popcorn каждую архитектурную границу превращают в отдельный Swift Package с явным списком зависимостей.

Контексты отвечают за предметные области вроде фильмов и поиска, а feature-модули содержат экраны и модели представления. Внутри контекста домен не зависит ни от чего, прикладной слой хранит сценарии, инфраструктура работает с источниками данных, а композиционный модуль связывает части. SDK TMDb остаётся в адаптере, поэтому остальной код о нём не знает.

Такие границы проверяет компилятор: запрещённый импорт ломает сборку, а добавление зависимости в Package.swift видно на ревью. Сценарии можно тестировать с поддельным репозиторием, без сети, базы и симулятора.
Views: 22
Go to post Open in MAX Report an inaccuracy
Loading image…
Как нативные контролы SwiftUI меняются в iOS 26 без правок интерфейса

Один бинарник, собранный в Xcode 26.6 с SDK iOS 26.5 и минимальной версией iOS 17, запустили на iOS 17.5 и 26.3. Визуальное сравнение интерфейсов показывает изменения, которые SwiftUI применяет автоматически: добавлять glassEffect() не требуется.

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

После обновления SDK стоит пересобрать приложение и проверить основные экраны на старой и новой iOS. Сворачивание панели вкладок и собственные стеклянные эффекты уже требуют дополнительных API.
Views: 23
Go to post Open in MAX Report an inaccuracy
Loading image…
Как собрать стабильную пирамиду тестов для Flutter-приложения

Руководство по тестированию Flutter разбирает unit-, widget-, golden- и integration-тесты. Логику предлагают выносить из виджетов, связи интерфейса проверять widget-тестами, а запуск, авторизацию, покупки, плагины и платформенные каналы — на устройстве или эмуляторе.

pumpAndSettle() ждёт прекращения новых кадров, поэтому бесконечный индикатор приводит к тайм-ауту. Вместо него автор управляет кадрами через pump(), а асинхронным результатом — через Completer.

Для golden-тестов разобраны расхождения снимков в macOS и Linux CI: влияют шрифты и окружение. Их лучше оставить для выбранных компонентов и запускать в зафиксированной среде.
Views: 20
Go to post Open in MAX Report an inaccuracy
Loading image…
Почему @ObservedObject сбрасывает модель в SwiftUI

@ObservedObject следит за изменениями модели, полученной извне, но не хранит созданный внутри представления экземпляр. Когда состояние родителя меняется, SwiftUI может заново создать значение дочернего View. Вместе с ним появится новый CounterViewModel, а счётчик вернётся к нулю.

Если дочернее представление само создаёт модель, объявляйте её через @StateObject. SwiftUI сохранит экземпляр, пока считает представление тем же самым. Если модель создаёт родитель, он хранит её через @StateObject и передаёт ребёнку как @ObservedObject.

Для нового кода под iOS 17 и новее источник предлагает @Observable с @State, но правило владения остаётся тем же. Пример со сбрасывающимся счётчиком и варианты исправления приведены с кодом.
Views: 19
Go to post Open in MAX Report an inaccuracy
The full feed — after free sign-up
VKontakte Telegram Odnoklassniki
Favorites at datool.ru

Follow the channel in your account

Sign up at datool.ru to add the channel “Мобильная разработка” to favorites and track its metrics.

Sign up
For channel owners

Verify your channel

Sign in or sign up at datool.ru, then add our bot to the channel following the instructions in your account. Once ownership is verified, the lock disappears and channel management becomes available.

Sign in or sign up

Report an inaccuracy

Describe what needs fixing. If you have a source, add a link.

You are leaving datool.ru

The link leads to an external website. datool.ru is not responsible for its content — check the address before entering passwords or payment details.

Redirecting in 10 s

Go