AppFiles - Mobile Development
Открыть в Telegram
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Больше2 176
Подписчики
Нет данных24 часа
+47 дней
+930 день
Архив постов
SwiftyChat - интерфейс чата на SwiftUI
SwiftyChat - готовый интерфейс чата со встроенными ячейками сообщений для быстрого старта.
Фичи:
• Поддержка строк с атрибутами
• Поддержка альбомной ориентации (автоматически масштабирует ячейки сообщений с заданным свойством cellWidth, если оно задано)
• Аватар пользователя (с различными вариантами расположения, использование необязательно)
• Сокрытие клавиатуры (при касании за ее пределами)
• Многострочная панель ввода
• Прокрутка в самый вниз
• Воспроизведение видео в фоновом режиме «Картинка в картинке»
• Скругление определённых углов текстовых сообщений.
• Реализация кастомных ячеек сообщений
• Свайп для скрытия клавиатуры
SwiftyChat на GitHub: https://github.com/EnesKaraosman/SwiftyChat
Платформа: iOS
⭐️: 312
Преодолевая барьер скорости: как неблокирующие заставки сокращают время запуска приложений Android на 90%
В статье показано, что классический SplashActivity тормозит старт, ведь пока экран с логотипом не закроется, контент не рендерится. Вместо этого автор предлагает неблокирующий splash screen — накладывать анимацию поверх основной активити и управлять показом через OnPreDrawListener, чтобы UI подгружался параллельно.
Результаты впечатляют: по данным тестов, время до первого отображения контента сокращается до 90%, а при сложных Lottie-анимациях — до 95%. Приложение визуально стартует почти мгновенно, а splash становится не тормозом, а маской загрузки.
Минусы тоже есть — повышенное потребление памяти и нагрузка на слабых устройствах. Поэтому автор советует адаптивный подход: лёгкий splash для low-end девайсов и анимированный для мощных. Полный разбор с кодом и графиками — в оригинальной статье.
Статья: https://sankalpchauhan.com/breaking-the-speed-barrier-how-non-blocking-splash-screens-cut-android-app-launch-time-by-90
Платформа: Android
Compose Exploded Layers - слои Compose в 3D
Compose Exploded Layers позволяет визуально разделить пользовательский интерфейс на слои, расположенные вдоль вектора смещения, визуализируя компонуемое дерево в трёхмерном пространстве.
Используйте библиотеку для:
• Показа структуры или иерархии в сложных макетах
• Создания динамических визуализаций для карточек, списков или фотографий
• Добавления глубины переходам, вступлениям или интерфейсам редактора
Compose Exploded Layers на GitHub: https://github.com/pingpongboss/compose-exploded-layers
Платформа: Android
⭐️: 38
Делаем анимацию отрисовки для SF Symbols в SwiftUI
В отличие от традиционной анимации с плавным изменением масштаба, плавным изменением направления движения или эффектом подпрыгивания, анимация рисования имитирует естественный процесс рисования символа пером, создавая более привлекательные и выразительные пользовательские интерфейсы. В результате получается более выразительный и продуманный эффект, который ощущается как созданный вручную, динамичный и реалистичный.
Статья: https://apptractor.ru/info/articles/delaem-animatsiyu-otrisovki-dlya-sf-symbols-v-swiftui.html
Платформа: iOS
Как я писал свою звонилку для видеозвонков
После запуска VK MAX звонков все мы ощутили «улучшение качества связи»: WhatsApp и Telegram-звонки внезапно стали то заикаться, то просто падать. На парковке созвониться? Забудьте. Через VPN по мобильной сети? Тоже боль. Добавим к этому ещё и порезанную сотовую связь «из-за дронов» — и получаем настоящий ад для тех, кто привык общаться через привычные мессенджеры.
Решение? Сделать свою звонилку. Так родился проект JOPA Call — Just One Peer App (или, если по-русски: «Просто одно приложение для звонков»).
Статья: https://habr.com/ru/articles/953222/
Платформа: Android
Swift Codable
На этой неделе мы поговорим ещё об одном встроенном типе Swift -
Codable. Думаю, все, кто писал клиент-серверные приложения, сталкивались с этим протоколом: он позволяет преобразовывать наши структуры в бинарные данные и обратно. Однако, полагаю, немногие задумывались, как этот привычный механизм работает под капотом. Сегодня я постараюсь рассказать об этом.
Статья: https://habr.com/ru/articles/953560/
Платформа: iOS/SwiftSwiftUI-Adapter - поддержка новых модификаторов SwiftUI на старых версиях iOS
Библиотека от читателя:
SwiftUI-Adapter избавит вас от головной боли при работе с новыми модификаторами SwiftUI.
Недавно я наткнулся на удобную Android-библиотеку, которая упрощает работу с разными версиями API и подумал: «Почему бы не сделать что-то подобное для SwiftUI?». После этого родилась идея разработать инструмент, который избавит вас от бесконечных проверок available и сделает код чище.
Установка библиотеки выполняется через Swift Package Manager.
Зачем это нужно?
Каждый раз, когда Apple выпускает новый модификатор в SwiftUI, нам приходится писать такие конструкции:
if #available(iOS 15.0, macOS 12.0, *) {
YourView()
.badge(5)
} else {
YourView()
}
SwiftUI-Adapter делает эту рутину за вас! Просто используйте единый синтаксис – проверки версий останутся под капотом:
YourView() .adapter.badge(5)Преимущества • Не влияет на производительность: все проверки производятся на этапе компиляции • Чистая кодовая база: больше никаких available в каждом втором файле • Простота интеграции: добавляется за пару минут через SPM • Открытый исходный код: полная прозрачность, возможность вносить правки и участвовать в развитии • Библиотека поддерживает модификаторы доступные с iOS 15 и выше, а так же macOS 12 и выше • SwiftUI-Adapter поддерживает большое количество модификаторов, включая новые модификаторы, которые были добавлены в iOS 26 и macOS 26. Описание каждого из модификаторов доступно на странице в GitHub. SwiftUI-Adapter на GitHub: https://github.com/Wolfaks/SwiftUI-Adapter Платформа: iOS ⭐️: 10
SwiftUI-Adapter - поддержка новых модификаторов SwiftUI на старых версиях iOS
Библиотека от читателя:
SwiftUI-Adapter избавит вас от головной боли при работе с новыми модификаторами SwiftUI.
Недавно я наткнулся на удобную Android-библиотеку, которая упрощает работу с разными версиями API и подумал: «Почему бы не сделать что-то подобное для SwiftUI?». После этого родилась идея разработать инструмент, который избавит вас от бесконечных проверок available и сделает код чище.
Установка библиотеки выполняется через Swift Package Manager.
Зачем это нужно?
Каждый раз, когда Apple выпускает новый модификатор в SwiftUI, нам приходится писать такие конструкции:
if #available(iOS 15.0, macOS 12.0, *) {
YourView()
.badge(5)
} else {
YourView()
}
SwiftUI-Adapter делает эту рутину за вас! Просто используйте единый синтаксис – проверки версий останутся под капотом:
YourView() .adapter.badge(5)ПреимуществаНе влияет на производительность: все проверки производятся на этапе компиляции Xистая кодовая база: больше никаких available в каждом втором файле Простота интеграции: добавляется за пару минут через SPM Открытый исходный код: полная прозрачность, возможность вносить правки и участвовать в развитии Библиотека поддерживает модификаторы доступные с iOS 15 и выше, а так же macOS 12 и выше SwiftUI-Adapter поддерживает большое количество модификаторов, включая новые модификаторы, которые были добавлены в iOS 26 и macOS 26. Описание каждого из модификаторов доступно на странице в GitHub. SwiftUI-Adapter на GitHub: https://github.com/Wolfaks/SwiftUI-Adapter
Отделяем мух от Kotlett. Динамические обновления без релизов и BDUI
Kotlett — это внутренняя платформа VK, которая реализует паттерн code-push, то есть динамическую доставку фич для Android- и iOS-приложений без использования BDUI и релиза приложения в магазине. В этой статье автор подробно рассказывает, как устроен Kotlett, как он решает проблемы BDUI, обеспечивает офлайн-работу и почему в компании считают его перспективным фреймворком «динамики для народа».
Статья: https://habr.com/ru/companies/vktech/articles/950588/
Платформа: разработка
📺 Видео и подкасты за неделю @AppFiles
•
(iOS Ru) Переезд на Swift 6: строим графы для успешной миграции
• (iOS En) Code along with the Foundation Models framework
• (iOS En) iOS 26 Custom Tab Bar With Action Button Using SwiftUI
• (iOS En) SwiftUI WebView (URL Argument) – Features, Validation & More
• (And Ru) Android добрался до ноутбуков
• (And Ru) Как убрать Activity context из ViewModel и написать Unit-test
• (And En) Under the hood with Google AI on Android
• (And En) Android developer verification
• (And En) The New Material3 Expressive Explained In 7 Minutes
• (And En) Avoid this App Crash Issue in a Production
• (And En) Mobile System Design Interview With Lead Android Engineer
• (Crs En) Is Kotlin Multiplatform Right for Your App?
• (Dev Ru) Docs as Code. Когда документация становится частью кода, а не пыткой
• (Dev Ru) Архитектура LLM — BERT, трансформеры, attentions
• (Dev En) AWS CloudOps Engineer Associate (SOA-C03) Certification Course – Pass the Exam
Прошлогодние видео:
• (iOS Ru) Как мы запекали 3D-пиццу
• (iOS Ru) Есть ли ORM круче SwiftData
• (iOS Ru) Макросы спустя полгода: не все так гладко
• (iOS Ru) DriverKit: гоняем данные по проводу без мам, пап и MFi
• (Dev Ru) Уволить нельзя терпеть
• (Dev Ru) Lua – идеальный встраиваемый языкQuickBall - быстрый доступ к системным настройкам
QuickBall - плавающее меню, обеспечивающее быстрый доступ к системным функциям, таким как регулировка громкости, яркости и блокировка экрана. Шар остаётся видимым поверх всех приложений и автоматически скрывается на экране блокировки.
QuickBall на GitHub: https://github.com/chayanforyou/QuickBall
Платформа: Android
⭐️: 9
Скрытые угрозы Room: почему база тормозит и как это исправить
Вам говорят добавить офлайн кэширование в приложение для Android. «Просто используйте Room, всё будет просто». Несколько запросов, пара сущностей, и всё готово за полдня.
Три дня спустя ваше приложение зависает, запросы еле ползают, а в консоли Play накапливаются ANR-ошибки.
Знакомо?
Вот что происходит, когда база данных Room сталкивается с реальными масштабами. А хорошая новость? У большинства этих проблем есть проверенные решения.
Статья: https://apptractor.ru/info/articles/skrytye-ugrozy-room-pochemu-baza-tormozit-i-kak-eto-ispravit.html
Платформа: Android
Погружаемся в недра Retrofit
Думаю, многие задумывались о том, что происходит с функциями в интерфейсе Retrofit сервиса, когда мы помечаем их ключевым словом suspend? У некоторых даже есть заблуждение, что для сетевых запросов в таком случае используется корутиновский Dispatchers.IO. Спойлер — это не совсем так.
В этой статье мы как раз разберёмся, как всё работает на самом деле.
Статья: https://habr.com/ru/companies/alfa/articles/947908/
Платформа: Android
Swift Configuration - чтение конфигураций
Swift Configuration - библиотека от Apple для чтения конфигураций в приложениях. Swift Configuration задает уровень абстракции между читателями конфигурации и провайдерами. Приложения и библиотеки считывают конфигурацию через согласованный API, в то время как фактический поставщик настраивается один раз в точке входа приложения. Библиотека позволяет объединять нескольких поставщиков в иерархию, где значения из источников с более высоким приоритетом переопределяют значения из источников с более низким приоритетом. Поддерживает множество встроенных провайдеров - переменные окружения, аргументы командной строки, JSON или YAML файлы, директории файлов, значения в памяти и т.п.
Swift Configuration на GitHub: https://github.com/apple/swift-configuration
Платформа: iOS
⭐️: 393
Что произойдет, если заменить каждый цикл For в Swift на map, filter и reduce?
Каждый разработчик Swift обожает хороший цикл
for. Это наш хлеб насущный. Нужно перебрать числа? Цикл for. Собрать данные? Цикл for. Изменить состояние? Да, снова цикл for.
Но я всё время слышал из «лагеря функционального программирования» шепоток о том, что map, filter и reduce могут заменить большинство циклов for — и не просто заменить их, а сделать их чище, быстрее и выразительнее.
Поэтому я задал себе простой вопрос: а что, если я полностью откажусь от циклов for в своей кодовой базе Swift и заменю их функциональными конструкциями?
Я решил попробовать. И результаты оказались… удивительными.
Статья: https://apptractor.ru/info/articles/for-map-filter-reduce.html
Платформа: iOS/SwiftУкрощаем Android UI-тесты на Compose: как Page Object спас нас от рутины
Вы когда-нибудь тратили слишком много драгоценного времени на поиск нужного testTag в иерархии Compose Screen? А потом еще полдня чинили тесты после каждого чиха в UI? Или, может быть, несколько недель ждали, пока в дизайн-систему добавят недостающий тег или семантику, чтобы вообще начать писать свой UI-тест? Если вы хоть на один вопрос ответили «Да», эта статья для вас. Давайте навсегда покончим с этой рутиной и займемся более креативными задачами!
Статья: https://habr.com/ru/companies/raiffeisenbank/articles/950474/
Платформа: Android
ShadowGlow - улучшенные тени для Jetpack Compose
ShadowGlow — это библиотека Jetpack Compose с широкими возможностями настройки, разработанная для отображения теней у элементов. Создавайте потрясающие визуальные эффекты глубины, свечения и динамики с помощью таких функций, как параллакс, управляемый гироскопом, и плавная анимация дыхания.
Фичи:
🎨 Сплошные и градиентные тени
📐 Настройка форм
🎭 Различные стили размытия
🌌 Эффект параллакса с гироскопом
🌬 Эффект пульсирующей анимации
🚀 Простота использования
📱 Совместимость со светлыми и темными темами
ShadowGlow на GitHub: https://github.com/StarkDroid/compose-ShadowGlow
Платформа: Android
⭐️: 17
Derived Data: 5 ошибок iOS-разработчиков
Папка Derived Data (производные данные) — один из важнейших каталогов, используемых iOS-разработчиком. Хотя вы не работаете с ней напрямую, Xcode активно использует её для кэширования информации и оптимизации разработки.
Тем не менее, у iOS-разработчиков есть множество возможностей максимально эффективно использовать Derived Data. Будь то удаление файлов для оптимизации сборки или просмотр информации о каталоге, все эти действия могут улучшить работу разработчиков. Давайте рассмотрим 5 ошибок, которые совершают iOS-разработчики.
Статья: https://apptractor.ru/info/articles/derived-data.html
Платформа: iOS
Почему loadKoinModules и unloadKoinModules в Koin могут ломать ваши зависимости и как этого избежать
В Android-проектах Koin остаётся одной из самых популярных DI-библиотек, особенно в MVP/MVI и Compose-приложениях. Она проста в настройке, гибкая и хорошо работает в больших кодовых базах.
Но многие команды, стремясь к модульности и тестопригодности, начинают активно использовать функции loadKoinModules() и unloadKoinModules(). И здесь разработчики часто натыкаются на странную ошибку:
org.koin.core.error.NoBeanDefFoundException: No definition found for …Статья: https://habr.com/ru/articles/951778/ Платформа: Android
Мой iPhone 8 отказывается умирать: теперь это OCR-сервер на солнечном питании
Большинство людей после апгрейда закидывают свои старые iPhone в ящик. А вот автор статьи превратил свой старый iPhone 8 в OCR-сервер на солнечных батареях, используя фреймворк Apple и зарядную станцию EcoFlow River 2 Pro. Он месяцами напролёт работает в режиме 24/7, обрабатывая тысячи изображений на полностью автономном питании. За год с лишним сервер обработал 83 418 запросов на распознавание текста (OCR) и 48 ГБ изображений, используя только фреймворк Apple Vision и возобновляемую энергию.
Статья: https://habr.com/ru/companies/ruvds/articles/950814/
Платформа: iOS
