AppFiles - Mobile Development
2.15K subscribers
2.92K photos
40 videos
11 files
3.87K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Промпт-контракты — от гадания к выпуску кода

Фреймворк промпт-контрактов не о том, чтобы писать больше кода. Он о том, чтобы думать 60 секунд, чтобы Claude Code не приходилось гадать 60 минут.

Я перешёл от азартных игр к поставке продуктов. Ваш ход.

Статья: https://apptractor.ru/info/articles/prompt-contracts.html
Платформа: разработка/ИИ

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👎1
👩‍💻 Открытый урок «Знакомство с Kotlin: пишем первый код»

🗓 5 марта в 20:00 МСК

🆓 Бесплатно. Урок в рамках старта курса «Kotlin Developer. Basic» от Otus.

Программа вебинара:

✔️Разберем три ключевых преимущества Kotlin: безопасность null, лаконичность и совместимость.
✔️Напишем небольшой, но полезный фрагмент, который решает понятную задачу.
✔️Ответим на главный вопрос: почему Kotlin — это не просто «улучшенная Java», а другой подход к разработке.

Вебинар будет полезен:

Начинающим разработчикам, разработчикам на Java, которые хотят писать современный, более безопасный и лаконичный код.

🔗 Ссылка на регистрацию: https://otus.pw/mBhz/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
This media is not supported in your browser
VIEW IN TELEGRAM
Устройства Android плавно интегрируются с подключенными дисплеями.

Google официально объявила о выходе режима рабочего стола (desktop windowing) в общую доступность вместе с релизом Android 16 QPR3. Новая функция, разработанная в партнерстве с Samsung, позволяет пользователям подключать смартфоны Pixel и Samsung к внешним мониторам для создания полноценной рабочей среды. В этом режиме на внешнем экране появляется панель задач и поддержка многооконности, что позволяет запускать несколько приложений одновременно в свободно масштабируемых окнах, превращая мобильное устройство в подобие настольного ПК.

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

Статья: https://android-developers.googleblog.com/2026/03/android-devices-extend-seamlessly-to.html
Перевод: https://apptractor.ru/info/articles/ustroystva-android-plavno-perehodyat-v-desktopnyy-rezhim.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
UIComponent - декларативный UIKit

UIComponent — еще один декларативный современный фреймворк для создания пользовательских интерфейсов с использованием UIKit. Благодаря возможностям @resultBuilder и @dynamicMemberLookup, ваш интерфейс UIKit можно легко построить с синтаксисом, аналогичным SwiftUI. UIComponent также поддерживает однонаправленный поток данных вместо двусторонней привязки и предлагает отличные возможности для повышения производительности и оптимизации.

В версии 5.0 UIComponent также может легко отображать представления SwiftUI вместе с UIView и другими компонентами.

UIComponent на GitHub: https://github.com/lkzhao/UIComponent
Платформа: iOS
⭐️: 420

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Малоизвестная возможность Swift: for case let, о которой не знают многие iOS-разработчики

Swift известен системой pattern matching. Большинство разработчиков используют её в switch, иногда в if case или guard case. Но в языке есть ещё одна конструкция, которую многие никогда не видели — for case let.

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

Статья: https://habr.com/ru/articles/1006412/
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Kotlin Multiplatform LaTeX Rendering Library - рендеринг формул LaTeX в Compose

Kotlin Multiplatform LaTeX Rendering Library - высокопроизводительная библиотека для анализа и отображения математических формул LaTeX, разработанная на основе Kotlin Multiplatform (KMP). Она поддерживает согласованные эффекты отображения на Android, iOS, Desktop (JVM) и Web (Wasm/JS).

Фичи:

• Высокопроизводительный парсинг: рекурсивный парсер на основе AST с поддержкой инкрементальных обновлений
• Кроссплатформенная консистентность: используется Compose Multiplatform для единообразного рендеринга на Android, iOS, Desktop (JVM) и Web (Wasm/JS)
• Автоматический перенос строк: умный перенос длинных формул по логическим точкам разрыва (операторы, отношения и т.д.)
• Экспорт изображений: возможность экспортировать отрендеренные формулы в изображения PNG/JPEG/WEBP с настраиваемым масштабированием разрешения
• API предварительного измерения: синхронное предварительное вычисление размеров формулы (ширина/высота/baseline) для встраивания математических выражений в Compose через InlineTextContent
• Доступность: встроенная поддержка screen reader’ов с описанием формул в стиле MathSpeak
• LaTeX → MathML: конвертация AST LaTeX в Presentation MathML
• Подсветка формул: возможность подсветки подвыражений внутри формулы через HighlightConfig
• Анимации: анимированные переходы между формулами (crossfade / slide / fade+slide)
• WYSIWYG-редактор (экспериментально): встроенный редактор LaTeX с позиционированием курсора, размещением по тапу и предпросмотром отрендеренной формулы в реальном времени

Kotlin Multiplatform LaTeX Rendering Library на GitHub: https://github.com/huarangmeng/latex
Платформа: Android/кроссплатформа
⭐️: 55

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👎1
Зачем нужен companion object в Hilt-модулях

Замечали некий companion object в интерфейсах Hilt-модулей? Что он делает, как он работает под капотом, почему так популярен в Hilt-модулях, и почему нельзя обойтись обычными классами? Сегодня я развею эту магию!

Статья: https://habr.com/ru/articles/1006844/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Я заменил все циклы рекурсией — вот что произошло

Глубоко ли я изучил рекурсию? Да. Повторил бы я этот эксперимент? Только если бы я возненавидел своих товарищей по команде.

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

Если, конечно, вам не доставляет удовольствия наблюдать за тем, как ваш код медленно саморазрушается.

Статья: https://apptractor.ru/info/articles/ya-zamenil-vse-tsikly-rekursiey-vot-chto-proizoshlo.html
Платформа: iOS/Swift

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
📺 Видео и подкасты за неделю

(iOS En) Fortify your app: Essential strategies to strengthen security
(iOS En) iOS Photos App Style Transitions Using SwiftUI
(iOS En) Building a Better Network Manager in Swift
(iOS En) Apple Stores App's Minimizable Tab Bar Using SwiftUI
(And Ru) Защищаем ресурсы Android-приложений с Runtime Resource Overlay
(And En) Migrating Kotlin Android projects to AGP 9.0
(And En) Tracing 2.0 - Performance on Android has never been easier
(Crs Ru) Flutter Dev Podcast #52: вайб-кодинг и агенты — превращение Flutter-разработчика в фуллстека
(Dev Ru) Почему свои IT-продукты выгоднее, чем работа в найме
(Dev Ru) Оконные менеджеры — стекинг, тайлинг, ментальная модель управления экраном
(Dev En) Is it still worth learning to code in 2026?
(Dev En) Learn MLOps with MLflow and Databricks – Full Course for Machine Learning Engineers
(Dsg Ru) Ozon Tech Community Design Meetup

Прошлогодние видео:

(iOS Ru) Minimal Widget Product: путь к эффективной и гибкой реализации виджетов
(iOS Ru) Уроки Swift: UITextField с анимированным плейсхолдером
(And Ru) Hilt в многомодульный проект — пособие по внедрению зависимостей для новичков
(And Ru) Как устроена мобильная архитектура. Интервью с тех. лидером юнита «Mobile Architecture» из AvitoTech
(Crs Ru) Адаптивная вёрстка во Flutter
(Crs Ru) Заезжаем в KMP. Но какой ценой?
(Dev Ru) Внедряем Server Driven UI

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Сравнение MVI и KoTEA

В мире Android-разработки существуют различные архитектурные паттерны. Многие из вас хорошо знакомы с MVVM, и возможно сталкивались с MVP. В последнее время всё чаще звучит аббревиатура MVI (Model-View-Intent). Однако наряду с MVI существует похожий на неё подход – KoTEA (Kotlin The Elm Architecture).

Оба этих паттерна следуют принципам UDF (Unidirectional Data Flow). Суть UDF архитектуры заключается в том, что данные в приложении движутся строго в одном направлении от единого источника истины к визуальным компонентам. Каждая фича (например, экран) имеет единственное неизменяемое состояние (State). Изменить его напрямую нельзя — только создать новое на основе предыдущего. Это соответствует принципу конечных автоматов и делает переходы между состояниями прозрачными и контролируемыми.

Статья: https://habr.com/ru/articles/1006782/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
SimpleChart - графики SwiftUI

SimpleChart - простая библиотека для построения графиков, использующая исключительно SwiftUI и обеспечивающая поддержку всех платформ Apple. Что особенно важно, её можно использовать в WidgetKit. SimpleChart предоставляет вспомогательные методы для создания chartData, который является единственным необходимым параметром для всех объектов конфигурации графиков. Поддерживает iOS v13, macOS v10.15, tvOS v13, watchOS v6, macCatalyst v.13.

Доступные диаграммы:

• Гистограмма
• Линейная диаграмма
• Квадратная кривая (изогнутая версия линейной диаграммы)
• Диаграмма диапазонов (диаграмма, представляющая диапазон данных за один и тот же период времени, аналогичная представлению диапазона частоты сердечных сокращений в приложении Apple Health)

SimpleChart на GitHub: https://github.com/ImpostersLimited/SimpleChart
Платформа: iOS
⭐️: 11

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Что упало — не пропало? EXC_BAD_ACCESS vs. LLDB

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

Материал основан на нашем опыте решения одной из проблем. Всё, о чём мы рассказываем ниже, — это не «правильный учебник» по LLDB, а опыт из эксперимента, который мы получили, пока работали над решением. В реальном проекте этот разбор может быть сложнее, поэтому, если у вас есть символизированный крэш-лог, или Address Sanitizer дает подсказку — скорее всего будет лучше/быстрее/качественнее разобраться с проблемой через них

Статья: https://habr.com/ru/companies/ivi/articles/1003668/
Платформа: iOS/Swift

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Asset Catalog – скрытый bottleneck сборки iOS. Разбираемся, как распараллелить компиляцию Asset’ов

2026 год. У вас 8–16 ядер в ноутбуке. M-чипы летают.

Swift компилируется параллельно.

Вы нажимаете ⌘B – и одно ядро уныло крутится на 100% загрузки, пока остальные отдыхают.

Добро пожаловать в мир однопоточной компиляции Asset Catalog’а.

В этой статье я покажу, почему Asset Catalog тормозит сборку и как заставить Xcode использовать больше ядер CPU. Пошагово и с примерами.

Статья: https://habr.com/ru/articles/1007956/
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как нарезать Android-монолит с помощью compile-time плагинов?

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

Переход к таким мини-приложениям позволяет ускорить конфигурацию Gradle и уменьшить время компиляции проекта как локально, так и на CI. Думаю, это будет полезно тем, кто интересуется архитектурой android-приложений, KSP, Dagger, а также тем, у кого крупное многомодульное приложение и есть проблемы с производительностью работы Gradle в проекте.

Статья: https://habr.com/ru/companies/alfa/articles/1002998/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
LazyAdaptiveLayout - продвинутая сетка для Android Jetpack Compose

LazyAdaptiveLayout - высокопроизводительный, настраиваемый адаптивный grid-layout для Android Jetpack Compose с ленивой загрузкой и адаптивной оптимизацией прокрутки. Поддерживает несколько типов раскладок: staggered, uniform, full-width и пользовательские layout’ы со span-настройками, с интуитивным DSL-API.

Возможности

• Несколько типов макетов: поддержка Staggered, Uniform, Full Width и пользовательских раскладок со span-настройками
• DSL API: интуитивный DSL на основе scope, похожий на LazyColumn и LazyVerticalGrid
• Ленивая загрузка: эффективный рендеринг с подгрузкой элементов на основе области видимости
• Адаптивная оптимизация прокрутки: динамический размер буфера в зависимости от скорости скролла
• Гибкая конфигурация: настраиваемые spacing, padding и размеры элементов
• Типобезопасность: обобщённая (generic) реализация с поддержкой любых типов данных
• Оптимизация производительности: минимальные рекомпозиции и эффективное использование памяти
• Контроль высоты элементов: возможность задавать индивидуальную высоту для каждого элемента внутри групп

LazyAdaptiveLayout на GitHubhttps://github.com/wayfair-incubator/compose-lazy-adaptive-layout
Платформа: Android
⭐️: 30

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Как реализовать WebSocket на Android и не сойти с ума

Как часто вы слышите что-то о протоколе WebSocket? А как часто видели его в проектах? Продакшн? Андроид? Что? Его кто-то использует?

А теперь представьте: перед вами стоит задача внедрить WS в крупный продакшн проект с нуля. С чего начать? Как подступиться?

Статья: https://habr.com/ru/companies/betboom/articles/1007816/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Начинаем работу с мониторингом (Observability) iOS-приложений

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

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

Статья: https://apptractor.ru/info/articles/observability-ios.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
SwiftUI Pro - помощник по SwiftUI для ИИ

SwiftUI Pro - агентский навык, помогающий ИИ-помощникам писать более умный, простой и современный SwiftUI, с рекомендациями по использованию API, дизайну, производительности и доступности. Охватывает навигацию, компоновку, анимацию, управление состоянием, VoiceOver, устаревшие API и многое другое, ориентируясь на ошибки, которые действительно допускают программисты с большим опытом.

Навык основан на рабочем файле AGENTS.md, а это значит, что вы можете привнести многолетний опыт и знания в выбранного вами агента всего за несколько минут. Он использует формат Agent Skills, поэтому бесперебойно работает с Claude Code, Codex, Gemini, Cursor и другими.

SwiftUI Pro на GitHub: https://github.com/twostraws/SwiftUI-Agent-Skill
Платформа: iOS
⭐️: 2K

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
20 приложений за 20 дней с Flutter и Antigravity

Недавно я присоединился к командам Dart и Flutter, и в январе этого года я поставил перед собой цель: создать 20 приложений за 20 дней, используя Flutter и Antigravity. Но зачем? Во-первых, цена любопытства официально достигла нуля. От идеи до приложения можно пройти 10 минут. Во-вторых, как новый член команды, я хотел изучить фреймворк, что-то создавая. И наконец, что наиболее важно, я хотел проверить теорию о том, что в 2026 году мы все можем быть создателями.

Я здесь, чтобы поделиться тем, чему научился на практике. Если вы вынесете из этого поста только одну вещь, пусть это будет следующее: перестаньте читать и идите что-нибудь создавать.

Статья: https://apptractor.ru/info/articles/20-prilozheniy-za-20-dney-s-flutter-i-antigravity.html
Платформа: разработка/ИИ

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👎1🔥1
Повторный вход в акторы в Swift

Акторы в Swift решают проблему гонок данных. Cам по себе актор гарантирует, что к его состоянию обращается только одна задача одновременно. Никаких мьютексов, семафоров, очередей — компилятор сам следит.

Звучит неплохо. Но есть подвох, и он называется повторный вход (reentrancy). Актор защищает от одновременного доступа, но не защищает от того, что состояние изменится между двумя вашими обращениями к нему.

Статья: https://habr.com/ru/companies/otus/articles/1005782/
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Как я пытался чинить анимацию в Jetpack Compose LazyColumn

Поделюсь с вами опытом попытки конфигурации анимаций для айтемов у Compose LazyColumn. Мы переписывали наш главный экран с XML+View на Jetpack Compose, который состоит из списка с различного рода сложности айтемами.

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

Решение казалось очевидным: настроить animateItem или написать свою реализацию. Мы перепробовали несколько вариантов через стандартный API, проваливались в исходники compose.foundation, писали кастомный модификатор. На каждом шаге казалось, что решение рядом, но каждый раз упирались в новый тупик.

В статье разберем, почему возникает рассинхрон, как устроен механизм анимаций внутри LazyColumn, почему кастомный animateItem обречен с самого начала и к какому решению мы пришли в итоге.

Статья: https://habr.com/ru/companies/tbank/articles/1009014/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM