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

Construkt позволяет создавать пользовательские интерфейсы на основе UIKit, используя современный декларативный синтаксис, идентичный SwiftUI.

Он переносит преимущества декларативной композиции и реактивного потока данных в устаревшие проекты UIKit, позволяя создавать динамические интерфейсы, управляемые состоянием, без сторибордов, NIB-файлов или шаблонного кода Auto Layout.
LabelView($title)
.color(.red)
.font(.title1)

Используя паттерн ResultBuilder из Swift, Construkt компонует нативные иерархии UIView. Вы получаете лаконичный, читаемый синтаксис SwiftUI, сохраняя при этом всю мощь, предсказуемость и бесконечные возможности настройки UIKit.

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

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

Сегодня я расскажу о веб-токенах JWT: как с их помощью безопасно передавать данные и реализовать авторизацию во Flutter. Разберем, чем JWT отличаются от классической схемы с сессиями, как работают Access- и Refresh-токены, зачем нужен Blacklist и как все это собрать в рабочее решение.

Статья: https://habr.com/ru/companies/friflex/articles/1005474/
Платформа: кроссплатформа/Flutter

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

Большинство разработчиков думают об офлайн-режиме в последнюю очередь - когда приложение уже готово, дизайн согласован, а PM давит на дедлайн. В результате пользователь видит белый экран, зависший спиннер или, что хуже - молча потерянные данные. Эта статья про то, как выстроить честный UX для состояний без сети: от психологии тревоги до кода с экспоненциальным откатом, от визуального языка ошибок до стратегий разрешения конфликтов. Всё это пригодится при разработке любого мобильного или веб-приложения, которое работает в условиях нестабильного соединения - а таких большинство.

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

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

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

Статья: https://apptractor.ru/info/articles/plan-razvitiya-flutter-i-dart-v-2026-godu.html
Платформа: Flutter

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

Система модификаторов Jetpack Compose долгое время была основным способом применения визуальных свойств к компонуемым элементам. Вы объединяете модификаторы, такие как background(), padding() и border(), для здания внешнего вида и поведения элементов пользовательского интерфейса. Несмотря на свою мощь, этот подход имеет ограничения при работе с интерактивными состояниями. Если вы хотите, чтобы кнопка меняла цвет при нажатии, вам необходимо вручную отслеживать состояние, создавать анимированные значения и условно применять различные модификаторы. Новый экспериментальный Styles API призван решить эту проблему, предоставляя декларативный способ определения зависимых от состояния стилей с автоматической анимацией.

Статья: https://apptractor.ru/info/articles/eksperimentalnyy-styles-api-v-jetpack-compose.html
Платформа: Android

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

В Gradle стремятся создать элегантный и расширяемый декларативный язык сборки, позволяющий выражать любую сборку ясным и понятным образом. И Declarative Gradle - часть этой концепции, декларативный способ описания сборки в системе Gradle, при котором вы описываете желаемый результат, а не пошаговые действия для его достижения.

Пока это экспериментальный проект. 

Declarative Gradle на GitHub: https://github.com/gradle/declarative-gradle
Платформа: Android
⭐️: 171

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN 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