AppFiles - Mobile Development
2.15K subscribers
2.92K photos
40 videos
11 files
3.86K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Как я пытался чинить анимацию в 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
Приложение без MVC или MVVM — опыт разработки

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

Но на этот раз я решил попробовать именно то, что предложил клиент.

Никакой архитектуры.

Никакого MVC.

Никакого MVVM.

Никакой чистой архитектуры.

Просто создаем приложение и заставляем его работать.

Поначалу это оказалось на удивление эффективным.

Статья: https://apptractor.ru/info/articles/prilozhenie-bez-mvc-ili-mvvm-opyt-razrabotki.html
Платформа: iOS/архитектура

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

Pillarbox — это современная экосистема мультимедийных плееров, построенная на основе AndroidX Media3. Pillarbox разработан с учетом надежности, гибкости и эффективности, с полной возможностью настройки, с учетом адаптивности и универсальности, что гарантирует его развертывание в различных медиаприложениях. Ключевой принцип Pillarbox заключается в отсутствии ограничений пользовательского интерфейса, что позволяет каждой команде разработчиков создавать свой собственный уникальный опыт воспроизведения.

Он легко интегрируется с функциями платформы и предлагает широкие возможности настройки обработки метаданных, управления активами и аналитики.

Pillarbox на GitHub: https://github.com/SRGSSR/pillarbox-android
Платформа: Android
⭐️: 23

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

(iOS En) SwiftUI Under The Hood: What's Really Happening When You iOS Updates
(iOS En) Agent Skills in Xcode - Build better SwiftUI apps with AI agents
(iOS En) SwiftUI: Collapsible View with Interactive Bottom Sheet
(And Ru) Неочевидное решение очевидной проблемы: грузим файлы
(And Ru) Конец Android: план Google на 2026 год
(And En) My #1 Tip When ViewModels Grow Too Big
(And En) Is THIS the Future of Jetpack Compose UI?
(And En) Kotlin Flow Operators: You Can't Do THAT with Collections...
(Dev Ru) Гайд по релокации в любую страну — релокация, эмиграция
(Dev En) CI/CD in Production with Jenkins – Complete DevOps Course

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

(iOS Ru) Жизнь iOS разработчика в условиях санкций
(iOS Ru) Моменты неотзывчивости iOS-приложений: как найти и исправить
(And Ru) Ultron — фреймворк для тестирования Android UI и Compose
(And Ru) Собираем грабли при профилировании Android-приложений
(Crs Ru) Полный разбор Kotlin Inject — Dagger для Kotlin Multiplatform
(Dev Ru) Зачем программисту знать лямбда исчисление
(Dev Ru) Мок интервью на позицию СТО
(Dev Ru) Публичное собеседование по System Design
(Dev Ru) Мобильная инфраструктура. Взгляд изнутри
(Dev Ru) BDUI – удовольствие или боль?
(Dev Ru) BDUI на 100%: управляем шиммерами с бэкенда

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

Если вы используете Koin в своих Kotlin-проектах, то знаете, как легко пропустить ошибку в описании модулей, которая «выстрелит» только в рантайме. Новая библиотека detekt-rules-koin переносит проверку архитектуры на этап статического анализа. Теперь вместо того, чтобы вручную выискивать циклические зависимости или неправильно объявленные параметры, вы можете делегировать это detekt. Правила помогают автоматически находить потенциальные утечки памяти и следить за тем, чтобы ваши модули оставались лаконичными и предсказуемыми.

Переход на автоматизированный контроль — это не просто вопрос «красивого кода», а реальный способ сократить время на отладку. В статье подробно разбирается, как подключить кастомные правила, какие именно проверки уже доступны «из коробки» и как интегрировать их в ваш CI/CD пайплайн. Если вы хотите, чтобы ваш Dependency Injection был под надежным присмотром линтера, а код-ревью проходили быстрее, этот инструмент определенно стоит вашего внимания.

Статья: https://blog.insert-koin.io/detekt-rules-koin-c0b6330fc37b 🇬🇧
Платформа: Android

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

FuzzyMatch - высокопроизводительная библиотека для нечеткого сопоставления строк в Swift.

FuzzyMatch был разработан для поиска в базах данных финансовых инструментов — тикерах акций, названиях фондов, ISIN — где важны допустимые опечатки, ранжирование с учетом префиксов и задержка менее миллисекунды. Эти же качества делают его хорошо подходящим для любой области с большим, разнородным набором данных: идентификаторы кодов, имена файлов, каталоги продукции, списки контактов или что-либо еще, что пользователь может искать с неточным вводом.

FuzzyMatch на GitHub: https://github.com/ordo-one/FuzzyMatch
Платформа: iOS
⭐️: 113

Вот еще одна библиотека для нечеткого поиска на Swift.

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

Dejavu преобразует поведение рекомпозиции в тестовые утверждения. Никаких изменений в производственном коде, кроме Modifier.testTag() (который вы, вероятно, уже используете).

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
Snappy Swipe - упругий swipe to delete

Snappy Swipe - "упругий" способ удаления компонента из списка с помощью свайпа, вдохновленный выразительными уведомлениями Material 3.

Snappy Swipe на GitHub: https://github.com/KlassenKonstantin/SnappySwipe
Платформа: Android
⭐️: 31

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Пишем декларативный Package.swift: DSL для модульной архитектуры iOS проекта

В этой статье вместо того чтобы рассматривать Package.swift как простой конфигурационный файл, превратим его в типобезопасный DSL для модульной архитектуры.

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

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

В статье покажу:

• как запускать тесты для нескольких мобильных приложений в одном Appium-проекте
• как выбирать приложение через аннотацию
• как сделать потокобезопасный фреймворк
• как избежать дублирования кода

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

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

Встроенный фото-пикер — это не «кастомный интерфейс галереи». Это системный инструмент выбора фотографий, отображаемый внутри вашей иерархии UI, обладающий теми же свойствами безопасности и конфиденциальности, что и классический инструмент выбора, поскольку система отрисовывает его в выделенном SurfaceView (внутренне подключаемом через SurfaceView.setChildSurfacePackage). Именно это архитектурное решение открывает ключевой сдвиг в продукте: пользователь остается на вашем экране во время просмотра и выбора, а ваше приложение может реагировать на обновления выбора в реальном времени, поскольку ваша активити остается рабочей.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Внедряем Yandex MapKit SDK в SwiftUI приложение. Пишем Demo проект

Сегодня я поделюсь с вами пошаговым планом создания демо приложения на SwiftUI с использованием Yandex MapKit SDK.

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

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

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

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

Статья: https://apptractor.ru/info/articles/copy-on-write-v-swift-semantika-zabluzhdeniya-i-kastomnaya-realizatsiya.html
Платформа: iOS

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

NVActivityIndicatorView - коллекция потрясающих анимаций загрузки. Больше 30 вариантов показать, что ваш контент загружается. 

NVActivityIndicatorView на GitHub: https://github.com/ninjaprox/NVActivityIndicatorView
Платформа: iOS
⭐️: 10.7K

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

Если привести аналогии, то логи — это жалобная книга, а креш‑отчет — это заключение судмедэксперта. В нём написано точное время смерти, причина и состояние памяти устройства в последний момент жизни приложения.

Для тестировщиков поймать креш и не допустить его до прода — это как для сапёра обезвредить мину раньше, чем на неё наступят. Работу можно сделать и после взрыва, но цена вопроса уже совсем другая. Сегодня я расскажу о 4+ проверенных способах собрать информацию о креше: от уже знакомых нам способов из предыдущей статьи до продвинутых систем мониторинга.

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

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

Сегодня поговорим о том, как заставить Android Studio самостоятельно следить за порядком в коде – без ручных проверок и без вечных напоминаний в командном чате.

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

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

«Дороги? Куда мы едем, дороги не нужны».

И, судя по всему, там, куда мы идем, нам не нужны обновления приложений для изменения пользовательского интерфейса. Давайте вернемся в будущее и посмотрим, что может предложить Remote Compose.

Статья: https://apptractor.ru/info/articles/remote-compose-nazad-v-buduschee.html
Платформа: Android

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

Иногда собеседования проверяют ваши знания. Иногда они проверяют ваше терпение. Собеседование в Experian? Оно проверяло мою психику.

Если вам когда-нибудь доведется столкнуться с таким интервьюером, вот мой совет:

• Сохраняйте спокойствие. Сумасшедшие интервьюеры проверяют вашу реакцию под давлением.
• Думайте вслух. Даже если вопрос не имеет смысла, покажите свою логику.
• Помните, дело не в вас. Иногда дело просто в интервьюере.

И, по крайней мере, вы уйдете с собеседования с историей, которая рассмешит ваших друзей.

Статья: https://apptractor.ru/info/articles/sobesedovanie-na-dolzhnost-ios-razrabotchika-v-experian-kogda-vse-poshlo-ne-po-planu.html
Платформа: iOS

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

Rebound — это плагин компилятора Kotlin, который инструментирует каждую функцию с аннотацией @Composable легковесными вызовами отслеживания. Во время выполнения он отслеживает частоту рекомпозиции в соответствии с бюджетами для каждого composable-объекта, обнаруживает нарушения и сообщает о них через окно инструментов Android Studio, CLI или logcat. Работает на Android и iOS (Compose Multiplatform). Настройка не требуется — просто примените плагин Gradle. Плагин IDE предоставляет панель мониторинга производительности с 5 вкладками, включающую мониторинг в реальном времени, ранжирование проблемных мест, тепловую карту временной шкалы, анализ стабильности и историю сессий с корреляцией с системами контроля версий.

Rebound на GitHub: https://github.com/aldefy/compose-rebound
Платформа: Android
⭐️: 41

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

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

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

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

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