AppFiles - Mobile Development
رفتن به کانال در Telegram
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
نمایش بیشتر2 166
مشترکین
+424 ساعت
-27 روز
+730 روز
آرشیو پست ها
Что упало — не пропало? EXC_BAD_ACCESS vs. LLDB
Эта статья для тех, кто хочет получить ещё один инструмент локализации падений в свой арсенал, ну или просто ни разу не сталкивался с четырьмя волшебными буквами из заголовка.
Материал основан на нашем опыте решения одной из проблем. Всё, о чём мы рассказываем ниже, — это не «правильный учебник» по LLDB, а опыт из эксперимента, который мы получили, пока работали над решением. В реальном проекте этот разбор может быть сложнее, поэтому, если у вас есть символизированный крэш-лог, или Address Sanitizer дает подсказку — скорее всего будет лучше/быстрее/качественнее разобраться с проблемой через них
Статья: https://habr.com/ru/companies/ivi/articles/1003668/
Платформа: iOS/Swift
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
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: код, инструменты, практики, производительность
Сравнение 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: код, инструменты, практики, производительность
📺 Видео и подкасты за неделю
•
(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: код, инструменты, практики, производительностьЯ заменил все циклы рекурсией — вот что произошло
Глубоко ли я изучил рекурсию? Да. Повторил бы я этот эксперимент? Только если бы я возненавидел своих товарищей по команде.
Если вы вынесете из этой истории что-то одно, пусть это будет следующее:
Знайте рекурсию. Уважайте рекурсию. Но ради всего святого, не заменяйте ею свои циклы.Если, конечно, вам не доставляет удовольствия наблюдать за тем, как ваш код медленно саморазрушается. Статья: https://apptractor.ru/info/articles/ya-zamenil-vse-tsikly-rekursiey-vot-chto-proizoshlo.html Платформа: iOS/Swift 👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Зачем нужен companion object в Hilt-модулях
Замечали некий
companion object в интерфейсах Hilt-модулей? Что он делает, как он работает под капотом, почему так популярен в Hilt-модулях, и почему нельзя обойтись обычными классами? Сегодня я развею эту магию!
Статья: https://habr.com/ru/articles/1006844/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность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: код, инструменты, практики, производительность
Малоизвестная возможность 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: код, инструменты, практики, производительностьUIComponent - декларативный UIKit
UIComponent — еще один декларативный современный фреймворк для создания пользовательских интерфейсов с использованием UIKit. Благодаря возможностям
@resultBuilder и @dynamicMemberLookup, ваш интерфейс UIKit можно легко построить с синтаксисом, аналогичным SwiftUI. UIComponent также поддерживает однонаправленный поток данных вместо двусторонней привязки и предлагает отличные возможности для повышения производительности и оптимизации.
В версии 5.0 UIComponent также может легко отображать представления SwiftUI вместе с UIView и другими компонентами.
UIComponent на GitHub: https://github.com/lkzhao/UIComponent
Платформа: iOS
⭐️: 420
👨🦯➡️ AppFiles: код, инструменты, практики, производительностьУстройства Android плавно интегрируются с подключенными дисплеями.
Google официально объявила о выходе режима рабочего стола (desktop windowing) в общую доступность вместе с релизом Android 16 QPR3. Новая функция, разработанная в партнерстве с Samsung, позволяет пользователям подключать смартфоны Pixel и Samsung к внешним мониторам для создания полноценной рабочей среды. В этом режиме на внешнем экране появляется панель задач и поддержка многооконности, что позволяет запускать несколько приложений одновременно в свободно масштабируемых окнах, превращая мобильное устройство в подобие настольного ПК.
Для разработчиков это нововведение означает необходимость адаптации приложений под различные форм-факторы и способы ввода. Программы, созданные с использованием принципов адаптивного дизайна, автоматически подстраиваются под интерфейс рабочего стола, обеспечивая привычный пользовательский опыт. Google призывает девелоперов переходить от фиксированной портретной ориентации к поддержке многодисплейного режима и современных методов управления окнами, чтобы их продукты оставались актуальными и продуктивными на расширяющейся экосистеме устройств.
Статья: https://android-developers.googleblog.com/2026/03/android-devices-extend-seamlessly-to.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
👩💻 Открытый урок «Знакомство с Kotlin: пишем первый код»
🗓 5 марта в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Developer. Basic» от Otus.
Программа вебинара:
✔️Разберем три ключевых преимущества Kotlin: безопасность null, лаконичность и совместимость.
✔️Напишем небольшой, но полезный фрагмент, который решает понятную задачу.
✔️Ответим на главный вопрос: почему Kotlin — это не просто «улучшенная Java», а другой подход к разработке.
Вебинар будет полезен:
Начинающим разработчикам, разработчикам на Java, которые хотят писать современный, более безопасный и лаконичный код.
🔗 Ссылка на регистрацию: https://otus.pw/mBhz/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Промпт-контракты — от гадания к выпуску кода
Фреймворк промпт-контрактов не о том, чтобы писать больше кода. Он о том, чтобы думать 60 секунд, чтобы Claude Code не приходилось гадать 60 минут.
Я перешёл от азартных игр к поставке продуктов. Ваш ход.
Статья: https://apptractor.ru/info/articles/prompt-contracts.html
Платформа: разработка/ИИ
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Declarative Gradle - процесс сборки в ясной и понятной форме
В Gradle стремятся создать элегантный и расширяемый декларативный язык сборки, позволяющий выражать любую сборку ясным и понятным образом. И Declarative Gradle - часть этой концепции, декларативный способ описания сборки в системе Gradle, при котором вы описываете желаемый результат, а не пошаговые действия для его достижения.
Пока это экспериментальный проект.
Declarative Gradle на GitHub: https://github.com/gradle/declarative-gradle
Платформа: Android
⭐️: 171
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Экспериментальный 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: код, инструменты, практики, производительностьПлан развития Flutter и Dart в 2026 год
Погружаясь в наши планы на год, помните, что эта дорожная карта — как и всегда — является нашей амбициозной стратегией на будущее. Как и любая другая дорожная карта, планы, как правило, меняются и адаптируются в течение года, поэтому не удивляйтесь, если произойдут какие-то изменения. Хотя она в основном отражает работу, на которой сосредоточены наши команды в Google, правда в том, что Flutterverse сейчас намного больше, чем любая отдельная компания.
Статья: https://apptractor.ru/info/articles/plan-razvitiya-flutter-i-dart-v-2026-godu.html
Платформа: Flutter
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Нет соединения — не значит нет UX. Как не потерять доверие пользователя вместе с интернетом
Большинство разработчиков думают об офлайн-режиме в последнюю очередь - когда приложение уже готово, дизайн согласован, а PM давит на дедлайн. В результате пользователь видит белый экран, зависший спиннер или, что хуже - молча потерянные данные. Эта статья про то, как выстроить честный UX для состояний без сети: от психологии тревоги до кода с экспоненциальным откатом, от визуального языка ошибок до стратегий разрешения конфликтов. Всё это пригодится при разработке любого мобильного или веб-приложения, которое работает в условиях нестабильного соединения - а таких большинство.
Статья: https://habr.com/ru/articles/1002388/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Между логином и 401: как устроена JWT-авторизация во Flutter
Сегодня я расскажу о веб-токенах JWT: как с их помощью безопасно передавать данные и реализовать авторизацию во Flutter. Разберем, чем JWT отличаются от классической схемы с сессиями, как работают Access- и Refresh-токены, зачем нужен Blacklist и как все это собрать в рабочее решение.
Статья: https://habr.com/ru/companies/friflex/articles/1005474/
Платформа: кроссплатформа/Flutter
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
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: код, инструменты, практики, производительностьКак мы написали React Native библиотеку для Яндекс Карт за два дня с Claude
В одном из проектов (российская сеть ресторанов по франшизе) нам нужно было прикрутить Яндекс Карты. Изначально хотели взять либу react-native-yamap (респект тем, кто ее делал) — но как выяснилось, она работает только на старой архитектуре RN.
После обновления до 0.76 версии, где Fabric стала использоваться по умолчанию, приложения на iOS начали падать: карта не рендерится, события не доходят до JS, приложение крашится при взаимодействии с картой и вот это вот всё. И судя по открытым тикетам, мы не одни, кто столкнулся с этой проблемой.
Полезли искать, написал ли кто-то уже библиотеку под новую архитектуру — но либо таких людей нет, либо ни с кем не делятся. Спойлер: мы пока тоже не будем, ещё обкатываем либу на своих проектах — но уже сейчас хотим рассказать, как собрали новый пакет с помощью Claude Code за два дня.
Статья: https://habr.com/ru/articles/1004576/
Платформа: кроссплатформа
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Кастомная галерея на iOS: от лага на 60 000 фото до lazy-загрузки и Combine
Если вы когда-нибудь разрабатывали мессенджер, то наверняка сталкивались с задачей выбора фотографий и видео для отправки. На первый взгляд кажется, что Apple предоставляет всё необходимое:
UIImagePickerController, PHPickerViewController. Но стоит только копнуть чуть глубже, и оказывается, что стандартные компоненты не покрывают и половины того, что нужно в реальном продукте.
В этой статье я расскажу, как мы шаг за шагом построили кастомный пикер галереи для iOS-мессенджера. Пройдём путь от наивной реализации, которая зависала при открытии на устройствах с 60 000+ фотографий, до production-ready решения с lazy-загрузкой, отслеживанием прогресса скачивания из iCloud через Combine и встроенным превью камеры.
Статья: https://habr.com/ru/articles/1005060/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
