Мобильная разработка
13.1K subscribers
1.01K photos
238 videos
3.13K links
Актуальное по мобильной разработке — Android, iOS, кроссплатформа

Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/oVBP
Download Telegram
KMP-плагин прекращает поддержку редактирования Swift

В новых версиях IntelliJ IDEA и Android Studio из KMP-плагина уберут редактирование Swift, подсветку синтаксиса и навигацию внутри Swift-файлов и между Swift и Kotlin. JetBrains объясняет решение снижением использования этих функций и стоимостью их сопровождения.

Изменение начинается с IntelliJ IDEA 2026.3 и Android Studio Rabbit 2 | 2026.2.2. Запуск iOS-приложений и отладка Kotlin-кода на iOS сохраняются. Swift Export и импорт Swift-пакетов также продолжают работать.

В прежних версиях IDE функции останутся без дальнейших обновлений. Командам со смешанным кодом стоит учесть это при обновлении IDE и перенести редактирование Swift в Xcode.
🤝1
Forwarded from Типичный программист
🧑‍💻 Какие навыки помогают вам в разработке в 2026 году?

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

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

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

👉 Пройти опрос
👌1
Экран погас, а приложение продолжает разряжать батарею

Загрузка завершилась с ошибкой, а CPU остался активным. Причиной может быть WakeLock: исключение, ранний return или потерянный callback не дали коду дойти до release(). На подключённом к зарядке телефоне такую утечку легко пропустить.

В разборе freeCodeCamp показаны типичные ошибки и способы их найти. Для ручной блокировки нужны таймаут и освобождение в finally, в том числе при отмене корутины. Самой операции тоже нужен срок выполнения.

Через adb shell dumpsys power можно увидеть текущие блокировки и время их удержания, через batterystats — накопленную статистику. Отложенную синхронизацию стоит сначала примерить к WorkManager: он управляет блокировкой за вас.
❤1👍1
Тепловая карта из шестиугольников в Swift Charts

Тысячи точек на карте перекрывают друг друга. Если сгруппировать наблюдения по ячейкам и передать их количество цветом, распределение становится проще читать.

В примере Matthaus Woolard Swift Charts отображает землетрясения в Новой Зеландии. Ячейки заданы координатами q/r, а шестиугольники нарисованы через собственный ChartSymbolShape.

Есть полезная деталь: одинаковый размер символов ещё не гарантирует правильные пропорции. Автор настраивает perceptualUnitRect, чтобы соседние ячейки сходились. Затем меняет линейную цветовую шкалу на symmetricLog — слабые различия становятся заметнее, но равные шаги цвета уже не означают равные разницы значений.
👏1
Как Instagram Direct переносил списки на Compose

В Direct сотни типов элементов списка. Переписать их и одновременно заменить RecyclerView — слишком много изменений для одного сравнения производительности.

В кейсе Google и Meta миграцию разделили: сначала переводили элементы на Compose небольшими группами, затем готовили переход на LazyColumn. Одни и те же компоненты работают в обоих контейнерах, а реализация переключается флагом для A/B-тестов.

Команда сравнивает время до первого взаимодействия, полной загрузки и плавность прокрутки на реальных пользователях. Небольшой Compose-компонент внутри старого экрана может давать искажённую картину из-за затрат на взаимодействие двух UI-систем. В статье также разобрано, как новая архитектура повлияла на работу ИИ-агентов с кодом.
👍1🔥1
Forwarded from Нейроканал
Showboat и Rodney помогают показать работу ИИ-агента

Саймон Уиллисон собирает демонстрации кода с помощью двух своих инструментов. Showboat выполняет команды и записывает их вывод в документ. Rodney управляет Chrome из командной строки и делает скриншоты интерфейса.

uvx showboat --help

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

Уиллисон замечал и обход механизма: агент напрямую правит текст отчёта. Тогда записанный вывод может расходиться с реальным запуском. Содержимое демонстрации тоже требует проверки.

#ии #инструменты
❤1
Почему LLDB показывает объект, но спотыкается о его свойство

На брейкпоинте p myObj работает, а p myObj.myComputedProperty требует больше времени или упирается в импорт модуля. Эти команды проходят разными путями: значение переменной можно прочитать по отладочной информации и reflection metadata, вычисляемое свойство требует выполнения кода.

В разборе команды Swift объясняется, зачем встроенному в LLDB компилятору нужен точный модуль. Одного имени недостаточно: у модуля могут быть разные варианты для платформ или разные наборы деклараций.

Изменения в Swift 6.3–6.4 позволяют хранить точные пути к явно собранным модулям и их зависимостям. Xcode и SwiftPM передают нужные данные автоматически. Собственным системам сборки, которые напрямую вызывают Swift frontend, может понадобиться настройка debug-module-path.
👍1🔥1
Android-приложение в окне: что проверить кроме ширины

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

В руководстве Google по адаптации для Googlebook предлагается строить раскладку по доступному пространству окна через window size classes. Список и детали могут стоять рядом в широком окне и переходить к последовательной навигации в узком.

Отдельно стоит проверить фокус и клавиатурную навигацию, правый клик, hover, drag and drop и независимые экземпляры приложения. Desktop-эмулятор в Android Studio Canary позволяет прогнать изменение размеров окна и работу мыши, трекпада и клавиатуры прямо на рабочей машине.
👌1
Когда кнопки SwiftUI переезжают на край экрана

На iPhone Duo действия, навигация и вкладки могут оказаться в общей вертикальной панели. Для стандартных кнопок адаптация автоматическая, а пользовательским подписям и сложным контролам иногда нужна настройка.

В разборе Natalia Panferova показаны API iOS 27.1: axisBehavior задаёт предпочтительное размещение элемента, а toolbarVerticalEdge помогает перестроить его содержимое под выбранный край экрана.

При нехватке места toolbarVerticalCompressionBehavior позволяет выбрать приоритет: сохранить вкладки и убрать часть действий в overflow или оставить действия, свернув вкладки. Для конкретного окна или sheet вертикальную панель можно отключить через toolbarVerticalBehavior(.disabled).
👌2❤1
Почему SwiftUI не видит Map без второго import

В представлении есть import SwiftUI, но компилятор не находит Map. Тип действительно существует — просто одного импорта для него недостаточно.

В разборе cross-import overlays показано, что при совместном импорте SwiftUI и MapKit компилятор подключает дополнительный модуль _MapKit_SwiftUI. Именно там находится представление Map. Импортировать этот внутренний модуль вручную не нужно.

Так устроены и другие интеграции: для PhotosPicker нужен PhotosUI, для WebView — WebKit, для VideoPlayer — AVKit вместе со SwiftUI.

Если знакомого типа нет ни в области видимости, ни в автодополнении, проверьте пару фреймворков, которые он связывает. В SDK правила таких подключений можно найти в каталогах .swiftcrossimport и файлах .swiftoverlay.
👌1
KMP-проект с Kotlin Toolchain 0.13: меньше ручной настройки

JetBrains теперь рекомендует Kotlin Toolchain для большинства новых KMP-проектов. Версия 0.13 объединяет создание проекта, настройку окружения, сборку и запуск через CLI.

В разборе обновления команда показывает kotlin new: мастер предлагает выбрать тип приложения и целевые платформы. Недостающие компоненты Android SDK устанавливаются и при импорте проекта в IDE. Для iOS улучшили диагностику Xcode и автоматическую подготовку симулятора.

Появился импорт SwiftPM-зависимостей через их Objective-C API. А кеши Kotlin/Native позволяют повторно использовать собранные зависимости и пересобирать затронутые файлы в поддерживаемых отладочных конфигурациях.

Для существующих Gradle-проектов это пока не рекомендация к массовой миграции: JetBrains продолжает закрывать пробелы в их поддержке.
👍1
Как передать ИИ-агенту результаты Xcode Instruments

Файл .trace содержит множество таблиц: CPU, зависания, задачи Swift, обновления SwiftUI. Если агент экспортирует их подряд, большая часть работы уходит на чтение и фильтрацию данных.

В разборе RocketTrace автор показывает другой порядок: приложение анализирует запись локально, ранжирует найденные проблемы и передаёт агенту краткую сводку с доказательствами. Затем можно запросить детали конкретной находки.

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

В авторском бенчмарке агенты находили больше проблем с меньшими затратами токенов. Это эксперимент на одной подготовленной записи; результат своего приложения нужно измерять отдельно.
👍1🔥1