AppFiles - Mobile Development
2.16K subscribers
3.03K photos
41 videos
12 files
4K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download 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
DiffableKit - декларативная обертка для Diffable Data Source

DiffableKit - декларативная обертка над UITableViewDiffableDataSource и UICollectionViewDiffableDataSource. Описывает разделы и элементы, вызывает метод set() — сравнение, анимация и обновление ячеек обрабатываются автоматически.

Пример использования:
class SettingsController: DiffableTableController {

override func viewDidLoad() {
super.viewDidLoad()
configureDiffable(
sections: [
DiffableSection(
id: "general",
header: DiffableTextHeaderFooter(text: "General"),
items: [
DiffableTableRow(text: "Theme", detail: "System", accessoryType: .disclosureIndicator)
]
)
],
cellProviders: DiffableTableDataSource.CellProvider.default
)
}
}

DiffableKit на GitHub: https://github.com/sparrowcode/DiffableKit
Платформа: iOS
⭐️: 132

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

Оптимизация производительности в Swift — это не про написание «умного» кода.

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

Статья: https://apptractor.ru/info/articles/10-optimizatsiy-swift-kotorye-uluchshat-proizvoditelnost-prilozheniya.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Этот проект создан для настройки и демонстрации анимаций Jetpack Compose на реальном устройстве Android, используя Compose HotSwan для  редактирования в реальном времени. Анимации физические: коэффициент затухания 0,6 против 0,8, сглаживание FastOutSlowIn против EaseOutBack, гравитация частиц 1100 против 1800. Ни один из этих параметров не отображается на экране. Вы ощущаете их на устройстве, и единственный способ найти правильное значение — это постоянно менять его и смотреть на результат.
Jetpack Compose Animations - коллекция анимаций и лучших практик

Каждый пример здесь представляет собой один composable файл с настраиваемыми значениями, указанными как vals в начале функции: длительность, сглаживание, жесткость, цветовые палитры, количество частиц. Вы меняете число, сохраняете файл, и запущенное приложение подхватывает новое значение в течение миллисекунд, без перестройки проекта или потери вашего места в стеке навигации. Идея этого цикла и то, как он меняет способ создания анимаций, описана в статье «Compose Animation: Hot Reload».

Вы также можете запустить это приложение как обычный проект Compose без Compose HotSwan, но примеры построены вокруг цикла настройки параметров. В этом репозитории вы найдете множество самодостаточных примеров, охватывающих основные API анимации (animate*AsState, AnimatedContent, AnimatedVisibility, Animatable, rememberInfiniteTransition, updateTransition, SharedTransitionLayout), движение, управляемое жестами, симуляцию Canvas и физические эффекты.

Jetpack Compose Animations на GitHub: https://github.com/skydoves/compose-animations
Платформа: Android
⭐️: 195

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

В Kotlin появилась долгожданная возможность использовать литералы коллекций, аналогично Python и JavaScript. Теперь можно создавать списки, множества и пользовательские коллекции с помощью квадратных скобок, что значительно упрощает синтаксис. Например, val numbers = [1, 2, 3, 4, 5] создает список, а val names: Set = ["Alice", "Bob", "Charlie"] – множество.

Статья 🇺🇸: https://kt.academy/article/collection-literals
Платформа: Android

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

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

EventBus предоставляет дополнительный инструмент для слабосвязанных уведомлений, когда прямое владение добавило бы ненужную сложность. Цель этого компонента проста: позволить одной части приложения опубликовать событие, а другим частям приложения — подписаться на события определенного типа.

Статья 🇺🇸: https://livsycode.com/best-practices/a-type-safe-eventbus-in-swift/
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Xcode Instruments Trace Analyzer (MCP) - ИИ-анализатор для Instruments

С помощью Xcode Instruments Trace Analyzer вы можете попросить Claude записать и проанализировать трассировки Xcode Instruments, выявить регрессии Time Profiler и получить практические рекомендации по оптимизации через локальный MCP-сервер.

Фичи:

• Автоматическое обнаружение узких мест — находит медленные функции, рассчитывает их влияние
• Автоматическая запись — подключитесь к запущенному приложению, запишите трассировку, откройте ее в Instruments.app по умолчанию и проанализируйте за один вызов MCP
• Многоинструментальный анализ — автоматически определяет данные о памяти, сети, энергии, распределении ресурсов и утечках
• Рабочий процесс, ориентированный на зависания — фиксирует события зависания, ограничивает последующий анализ окном зависания и определяет код, его вызвавший
• Регрессионный анализ — сравнивает сборки для выявления проблем с производительностью
• Интеллектуальные рекомендации — предложения на основе шаблонов с примерами кода Swift
• Интерфейс на естественном языке — просто спросите Claude на простом английском языке
• Честная диагностика — сообщает о статусе поддержки, попытках экспорта и неэкспортируемых данных
• Безопасная очистка трассировки — предварительный просмотр или удаление пакетов .trace после того, как пользователь закончит их проверку

Этот проект является дополнением к Instruments, а не полной заменой Instruments.app. Он автоматизирует части, которые Apple предоставляет через xcrun xctrace: запись, экспорт TOC/XML/HAR, символизация, парсинг, отчеты, проверки на регрессию и безопасная очистка трассировки. Инструменты записи по умолчанию открывают сохраненный файл .trace в Instruments.app, поэтому области, отсутствующие в трассировке или недоступные для экспорта, можно проверить в графическом интерфейсе. Если шаблон или представление Instruments недоступны для экспорта, сервер сообщает об этом ограничении, вместо того чтобы создавать собственные данные.

Xcode Instruments Trace Analyzer (MCP) на GitHub: https://github.com/jamesrochabrun/XcodeTraceMCP
Платформа: iOS
⭐️: 14

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Опенсорсим yx_navigation — декларативную навигацию для Flutter

Навигация во Flutter — это постоянные компромиссы. Сначала кажется всё просто: push и pop. А потом проект растёт, появляются табы, вложенные модули, диплинки — и выясняется, что каждый следующий экран открывается по‑разному, а pop() в одном месте ведёт себя не так, как в другом. 

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

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

Средний iOS-разработчик, скорее всего, использует лишь 30% того, что на самом деле умеет Xcode 16. А остальные 70%? Они прямо перед глазами — и ждут, чтобы сэкономить вам часы работы.

Если вы обновились до Xcode 16 и подумали: «Да ничего не изменилось», — пристегнитесь. Этот материал для вас.

Статья: https://apptractor.ru/info/articles/sovety-i-hitrosti-xcode-16.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👎1
10 фич Jetpack Compose, которые изменят ваш подход к разработке Android-приложений

Вы всё ещё копируете и вставляете один и тот же шаблонный код Compose, который использовали два года назад? Тогда вы разрабатываете медленнее, чем могли бы. В Jetpack Compose незаметно появлялись всё новые и новые фичи, которые снова делают разработку Android UI увлекательной. И знание этих возможностей превращает хорошее приложение в отличное.

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

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