AppFiles - Mobile Development
2.16K subscribers
3.03K photos
41 videos
12 files
4K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Flutter после увольнений: вот честная оценка, которую никто не хочет давать

В апреле 2024 года Google уволил инженеров из команд Flutter, Dart и Python — за несколько недель до Google I/O, конференции, где они годами объявляли о светлом будущем Flutter.

Никто из Google не подтвердил точное количество. CNBC сообщило о примерно 200 сотрудниках во всех командах. Кевин Мур, менеджер по продуктам Flutter, через несколько часов написал на Reddit: «Flutter и Dart пострадали не больше и не меньше, чем другие. Это был тяжёлый день».

Сообщество читало между строк ещё несколько недель.

А затем произошло нечто интересное: Flutter продолжил выпускать релизы. Impeller стал стабильным. Dart 3.x вышел. Дорожная карта на 2024 год была выпущена практически без изменений. Два года спустя Flutter работает в продакшене в BMW, Alibaba и eBay. Опрос Stack Overflow 2024 показал, что Flutter используется в кроссплатформенных фреймворках на уровне 46%, опережая React Native с 35%.

Так что кризис закончился, верно? Те, кто говорил, что «Flutter мертв», ошибались, заверения были точными, и у истории счастливый конец?

Я не думаю, что все так просто. И я думаю, что разработчики, принявшие любой из выводов — «Flutter кончился» или «Flutter в полном порядке» — совершили ошибку, которая их еще настигнет.

Статья: https://apptractor.ru/info/articles/flutter-posle-uvolneniy-vot-chestnaya-otsenka-kotoruyu-nikto-ne-hochet-davat.html
Платформа: кроссплатформа/Flutter

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

AgentRunKit - Swift 6 SDK, предназначенный для создания агентов на основе LLM с типобезопасным вызовом инструментов.

Фичи:

• Циклы работы агентов с настраиваемыми ограничениями по количеству итераций и бюджетами токенов
• Потоковая передача данных с использованием AsyncThrowingStream и обертки SwiftUI с аннотацией @Observable
• Типобезопасные инструменты с проверкой JSON-схемы на этапе компиляции
• Композиция суб-агентов с контролем глубины и распространением потоковой передачи
• Управление контекстом: автоматическое сжатие, очистка, бюджеты токенов
• Структурированный вывод с ограничениями JSON-схемы
• Мультимодальный ввод: изображения, аудио, видео, PDF
• Преобразование текста в речь с одновременным разбиением на фрагменты и конкатенацией MP3
• Клиент MCP: передача stdio, обнаружение инструментов, JSON-RPC
• Поддержка расширенной модели мышления/рассуждения

AgentRunKit на GitHub: https://github.com/Tom-Ryder/AgentRunKit
Платформа: iOS
⭐️: 18

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Динамические product flavors в Android: когда статической конфигурации уже мало

Рано или поздно каждый Android‑разработчик сталкивается с задачей «одно приложение — много сборок»: white‑label‑решения, региональные версии, отдельные сборки для разных магазинов приложений, демо для клиентов, внутренние окружения.

Встроенный механизм product flavors в Android Gradle Plugin отлично справляется со своей задачей — пока количество вариантов умещается в голове и в паре экранов build.gradle.kts.

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

В этой статье разбирается подход, при котором конфигурация flavors строится динамически: список вариантов и их параметры живут вне build.gradle.kts.

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

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

В мире Android-разработки «адаптивная вёрстка» (Adaptive Layout) перестала быть роскошью — теперь это необходимость. С появлением складных устройств и девайсов с большими экранами приложениям уже недостаточно просто растягиваться — им нужно перестраивать свою структуру UI.

Традиционно реализация сценариев вроде List-Detail или Supporting Pane требовала большого количества бойлерплейта: проверки классов window size, ручное управление back stack и обработка условной логики интерфейса. Nav3 — современный подход к навигации от Google — предлагает новый способ моделирования адаптивного UI через метаданные навигации.

Статья: https://apptractor.ru/info/articles/nav3.html
Платформа: Android

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

ConsultMe — это шаблонный проект для приложений на Jetpack Compose, включающий интегрированные инструменты для проверки качества кода и автоматизации. Он включает в себя:

• Spotless: автоматическое форматирование и линтинг кода
• Detekt: статический анализ кода
• Lint: линтинг кода Kotlin и Compose

Особенности

• Полностью настроен для Jetpack Compose и многомодульной архитектуры
• Включены и предварительно настроены инструменты проверки качества кода
• 100% кодовая база на Kotlin с использованием корутин и Flow
• Внедрение зависимостей с помощью Hilt

ConsultMe на GitHub: https://github.com/Tarek-Bohdima/ConsultMe
Платформа: Android
⭐️: 20

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

В этой статье мы обсудим, как писать код на Swift, который будет выглядеть так, как будто его написал опытный Senior разработчик.

1. Отдавайте предпочтение value-типам вместо reference-типов
2. Грамотно работайте с Optional
3. Используйте расширения, чтобы поддерживать чистоту кода
4. Отдавайте предпочтение let вместо var
5. Документируйте код
6. Делайте функции короткими и сфокусированными
7. Пишите декларативный код
8. Заменяйте цепочки if на switch

Статья: https://apptractor.ru/info/articles/praktiki-swift-kotorye-pomogut-vam-vyglyadet-senior-razrabotchikom.html
Платформа: iOS

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

ScanNow - быстрое и простое приложение для сканирования документов на iOS.

Фичи:

• Быстро и легко сканируйте документы
• Настраивайте параметры сканирования по мере необходимости, включая имя файла и формат отправляемого документа
• Отправляйте отсканированные документы в любое удобное для вас место

ScanNow на GitHub: https://github.com/WezSieTato/ScanNow
Платформа: iOS
⭐️: 60

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

Однажды на выходных я задумался, как бы выглядела подсветка синтаксиса в Jetpack Compose, если бы я создал её с нуля сегодня — без WebView, без HTML-шаблонов. В 2020 году я использовал подход WebView + PrismJS/highlight.js, и он работал, но всегда казалось немного неудобным встраивать браузерный движок только для отображения цветного текста. Теперь, когда Compose стал стандартом для создания пользовательского интерфейса, мне хотелось чего-то, что органично вписывалось бы в общую концепцию.

Это любопытство привело меня к исследованию Shiki, ограничений WebAssembly, Cloudflare Workers, к созданию небольшого микросервиса и, в конечном итоге, ко второму подходу с использованием грамматик TextMate, работающих полностью на устройстве. Вот как в итоге заработали оба варианта.

Статья: https://apptractor.ru/info/articles/podsvetka-sintaksisa-na-android-integratsiya-dvizhka-shiki-v-compose.html
Платформа: Android

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

ParticleEmitter - библиотека рендеринга частиц Jetpack Compose для Android. Создавайте красивые анимации частиц на основе физических принципов с помощью двух подходов, оптимизированных для различных сценариев использования.

Фичи:

• два движка рендеринга: ParticlesEmitter — основан на layout-системе Jetpack Compose, поддерживает кастомные частицы через @Composable (текст, изображения, фигуры); CanvasParticleEmitter — рендеринг через Canvas, высокая производительность (1000+ частиц)
• физическая симуляция: направленная гравитация, силы, угол, вращение
• настраиваемая гравитация: можно управлять силой и направлением, чтобы создавать эффекты падающего конфетти, дождя, всплывающих пузырей, ветра и т.д.
• гибкие формы частиц: круги, изображения с tint’ом, текст, кастомные path’ы
• поведение на границах: частицы могут отскакивать, прилипать или «зацикливаться» при достижении границ экрана
• режимы смешивания (blend modes): additive, screen и другие эффекты для свечения частиц
• оркестрация нескольких эмиттеров: последовательный или параллельный запуск через MultiEmitter
• формы источников эмиссии: точка, овал, прямоугольник, вертикальные/горизонтальные линии

ParticleEmitter на GitHub: https://github.com/PiotrPrus/ParticleEmitter
Платформа: Android
⭐️: 51

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

Речь пойдет про наш любимый fastlane, если вы являетесь специалистом по Maraphon или Emcee, то, возможно, мои советы для вас окажутся больше вредными / нелепыми / и порой даже забывными - не обессудьте.

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

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

Это статья от автора библиотеки, поэтому нейтральным разбор не будет. Но это и не рассказ про конкретный проект — а разбор задач, на которых, на мой взгляд, Paging 3 начинает буксовать, и того, как Paginator устроен, чтобы эти задачи закрывать. KMP-библиотека пагинации для Android, iOS, JVM и Desktop. Ниже — почему она появилась именно как отдельная библиотека, а не как fork или обёртка над Paging 3.

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

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

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

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

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

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

Sherlock - документация для разработчиков Apple для Claude Code. Sherlock отвечает на вопросы о фреймворках Apple в Claude Code, используя только локальный индекс.

Claude постоянно галлюцинирует про API Apple. Выдуманные названия методов, неправильные метки параметров, устаревшие символы, представленные как актуальные. Решение проблемы — стабилизация: дать ИИ локальную, доступную для поиска копию developer.apple.com и навык, который подскажет, когда именно нужно искать информацию.

Sherlock индексирует около 70 000 символов из Swift, SwiftUI, UIKit, Foundation, Combine, Core Data, SwiftData, Core ML, MapKit, AVFoundation и других фреймворков в базу данных SQLite FTS5, а затем предоставляет их ИИ в качестве MCP-инструмента. Назван в честь оригинального приложения поиска Apple для macOS (и связанной с ним мифологии разработчиков).

Sherlock на GitHub: https://github.com/hotfix-jobs/sherlock
Платформа: iOS
⭐️: 8

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
За два месяца вместо года: как мы переписали 97 тысяч строк кода с Objective-C на Swift

Миграция большого iOS-проекта с Objective-C на Swift кажется понятной задачей ровно до тех пор, пока не начинаешь считать объём. В нашем случае это были 10 тысяч файлов, сотни тысяч строк кода и постоянная необходимость не останавливать развитие продукта. Ручной подход работал слишком медленно, поэтому мы начали автоматизировать миграцию с помощью LLM — и в итоге превратили её из бесконечного техдолга в воспроизводимый процесс.

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

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

Иногда нужно реализовать поиск по данным без участия бэкенда. Самый простой вариант — обычное вхождение строки — не прощает опечаток. Одна лишняя буква, и поиск выдает пустоту. В статье разберем, как усовершенствовать этот процесс: научим поиск обрабатывать ошибки и сортировать результаты по степени совпадения.

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

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

Статья показывает, как можно кардинально ускорить работу с анимациями в Jetpack Compose с помощью hot reload. Вместо привычного цикла «изменил параметр → пересобрал приложение → заново дошёл до нужного экрана», разработчик просто сохраняет изменения и сразу видит результат на устройстве. Это особенно важно для анимаций, где ключевую роль играет субъективное восприятие: длительность, плавность и отклик проще подбирать в реальном времени, чем угадывать через десятки перезапусков. Главная ценность подхода — возможность мгновенно экспериментировать: менять параметры spring, длительность, размеры или даже поведение кастомных Canvas-анимаций и сразу видеть эффект без потери состояния экрана. В некоторых случаях изменения применяются вообще без пересборки благодаря literal patching — значения обновляются прямо в памяти приложения за доли секунды. В итоге разработка становится более интерактивной, а сами анимации — заметно качественнее, потому что их действительно «нащупывают», а не подбирают вслепую.

Статья 🇺🇸: https://blog.kulman.sk/running-local-llm-coding-server/
Платформа: Android

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

Compose AI Tools рендерит элементы @Preview в формате PNG вне Android Studio, чтобы агенты ИИ могли видеть, что они изменяют. Работает с Jetpack Compose (Android, через Robolectric) и Compose Multiplatform Desktop (через ImageComposeScene).

Отображение включает захват анимации с паузой (GIF или один кадр) и проверку доступности ATF с аннотированными наложениями.

Также отображает ресурсы Android XML — векторные изображения, адаптивные иконки лаунчера, анимированные векторные изображения — и индексирует атрибуты иконок в AndroidManifest.xml, чтобы инструменты могли связывать строки манифеста с одним и тем же отрендеренным PNG. Для модулей, в которых отсутствуют подходящие ресурсы, функциональность автоматически отключается (no-op), поэтому интеграция плагина не требует дополнительных действий.

Compose AI Tools на GitHub: https://github.com/yschimke/compose-ai-tools
Платформа: Android
⭐️: 72

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Масштабирование навигации в Jetpack Compose: от простых приложений до реальной архитектуры

Речь идёт не об изучении API. Речь идёт о том, как структурировать навигацию таким образом, чтобы она не разваливалась по мере роста вашего приложения.

Статья: https://apptractor.ru/info/articles/masshtabirovanie-navigatsii-v-jetpack-compose-ot-prostyh-prilozheniy-do-realnoy-arhitektury.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
«У нас было 230 тысяч строк легаси-кода». Как мы изменяли приложение «Настройки»

Спойлер: было жестко, но все закончилось хорошо. Теперь у нас есть все основания утверждать, что работа над «внутренностями» Android — это высшая лига.

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

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

Kore — это система дизайна Compose Multiplatform, которая предоставляет красиво оформленные компоненты, помогающие создавать масштабируемые и согласованные дизайн-системы.

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

Фичи:

• Красивые предварительно оформленные компоненты пользовательского интерфейса
• Простая настройка и расширяемость
• Поддержка тем
• Изолированная компонентная архитектура
• Доступность (в основном еще в разработке)
• Приложение-конструктор тем оформления

Kore на GitHub: https://github.com/dev778g-me/Kore
Платформа: Android/кроссплатформа
⭐️: 34

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

(iOS Ru) Фильтры для лица под капотом: Vision, сегментация и шейдеры в бою
(iOS Ru) Один code style для всех: как укротить SwiftLint в масштабах компании
(iOS Ru) Онлайн-определитель номеров: секреты реализации Live Caller ID для iOS
(iOS En) Apple Wallet Card Animation Using SwiftUI
(iOS En) SwiftUI macOS Toasts
(iOS En) Building a Scalable Design System in SwiftUI: From Tokens to Components
(iOS En) Production SwiftUI: Scalable Networking Architecture with Async Await
(iOS En) iPod Style CoverFlow Carousel Using SwiftUI
(iOS En) Border Beam Effect Using SwiftUI
(And Ru) Как я искал и нашел работу в LinkedIn в 2026 году. Android
(And Ru) Kotlin Flow и реальные задачи SberDevices: решение callback hell и backpressure
(And Ru) Kotlin Flow через призму реальных задач в SberDevices: Игра Потоков
(And Ru) Rich Errors: Checked Exceptions в Kotlin
(And Ru) Подменяем зависимости не оставляя следов
(And Ru) (Не)очевидные связи: визуализация бизнес-логики через код
(And Ru) /e/OS: Android без слежки это реально?
(And En) Android Got a New CLI Tool! (Game Changer For AI-First Setups!)
(And En) Exposed 1.0 and Beyond
(And En) How to supercharge android game development: vulcan, 16kb pages, & more
(And En) How Google made their Android app start faster
(And En) The 2026 Junior Developer Trap
(And En) How to Handle Exceptions in Kotlin Flows
(Crs Ru) KMP в X5 Tech: переход бигтеха на новые технологии
(Crs En) AI-Driven APG 9 Migration using Android Skills - KMP Project
(Dev Ru) Какие инструменты дизайн-системы помогут каждому
(Dev Ru) Django — Python, web, framework
(Dev Ru) AI Dev Podcast #2: Александр Поломодов, Сергей Баранов - Архитектура в эпоху ИИ
(Dev En) Gemini CLI Essentials – Full Course
(Dev En) Beginner's Guide to Mobile App System Design (+ Tips for Interviews!) (+ все интервью)
(Mrk Ru) Вайбкодинг приложения: как выбрать нишу и дойти до стора
Please open Telegram to view this post
VIEW IN TELEGRAM