AppFiles - Mobile Development
Открыть в Telegram
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Больше2 166
Подписчики
+124 часа
+17 дней
+930 день
Архив постов
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
SQLiteData - быстрая и легкая замена SwiftData с SQL и CloudKit
SQLiteData — это быстрая и лёгкая замена SwiftData от Point-Free, включающая SQL и синхронизацию с CloudKit (и даже шаринг CloudKit), построенная на основе популярной библиотеки GRDB.
Пример:
@FetchAll
var items: [Item]
@Table
struct Item {
let id: UUID
var title = ""
var isInStock = true
var notes = ""
}
Этот пример извлекают элементы из внешнего хранилища данных с использованием типов данных Swift, и автоматически отслеживается SwiftUI, поэтому представления пересчитываются при изменении внешних данных. При этом SQLiteData работает непосредственно с SQLite и может использоваться откуда угодно, включая UIKit, модели @Observable и многое другое.
SQLiteData на GitHub: https://github.com/pointfreeco/sqlite-data
Платформа: iOS
⭐️: 1.1KKotlin QA: как перейти с Java и писать тесты в 2 раза быстрее
С момента официального объявления Kotlin как предпочтительного языка для Android‑разработки в 2017 году, язык стремительно завоевал популярность не только в мобильной сфере, но и в автоматизации тестирования.
Многие команды QA инженеров сталкиваются с выбором: остаться на привычном Java‑стеке или перейти на Kotlin. В этой статье мы рассмотрим некоторые ключевые различия, преимущества и практические аспекты перехода на Kotlin в контексте автоматизации тестирования.
Статья: https://habr.com/ru/companies/otus/articles/950864/
Платформа: Android
Analytiks - события, пользователи и данные
Analytiks — это мощная библиотека для Android, разработанная для упрощения интеграции аналитики путём централизации нескольких аналитических сервисов в едином унифицированном интерфейсе. Вместо управления несколькими SDK и их различными API, Analytiks предлагает единый способ отслеживания событий, идентификации пользователей и управления аналитикой во всём приложении.
Analytiks на GitHub: https://github.com/aminekarimii/analytiks
Платформа: Android
⭐️: 54
Загрузка данных во ViewModel: рекомендации и Flow-based архитектура
Дискуссии об архитектуре Android часто перерастают в жаркие споры, вызывая и восторг, и резкую критику. Писать на такие темы непросто, и именно поэтому это стоит делать.
Эта статья показывает мой субъективный взгляд на паттерны загрузки данных. Взгляд, отточенный опытом и восстановлением после недавних операций (одно из которых еще продолжается).
Рассматривайте статью как снапшот моих навыков и знаний в 2025 году.
Статья: https://habr.com/ru/articles/950494/
Платформа: Android
Миграция на SPM: что мы выиграли и что потеряли
В этом году мы решили сменить менеджер зависимостей и мигрировать с CocoaPods на SPM. Результаты оправдали ожидания, хотя и сложности на этом пути, конечно, были. В статье расскажу про проблемы, с которыми мы столкнулись в процессе, и предупрежу, на что стоит обратить внимание, чтобы не повторить наши ошибки.
Статья: https://habr.com/ru/companies/tuturu/articles/948276/
Платформа: iOS
📺 Видео и подкасты за неделю @AppFiles
•
(iOS En) Code along with the Foundation Models framework
• (iOS En) SwiftUI Pro Components Collection - Build Amazing iOS Apps Faster!
• (iOS En) SwiftUI WebView reloaded: adding a "View Original" feature
• (iOS En) Convert SwiftUI Views into Multi-Page PDF File
• (iOS En) Is MVVM a bad architecture for SwiftUI?
• (iOS En) iOS 26 Custom Menu Using SwiftUI
• (And Ru) Роболектрик-скриншот-тесты на платформе Android
• (And En) Optimize your app battery drain using Android Vitals wake lock metric
• (And En) Threads vs. Kotlin Coroutines vs. Dispatchers
• (And En) Everything About Context Parameters In Kotlin (Super Cool New Feature!)
• (Crs En) Make your UI Beautiful and Adaptive on each platform (Compose Multiplatform
• (Dev Ru) Кто такой сеньор глазами тимлида
• (Dev Ru) Как нейросети обещали ускорить тестирование, а сделали только хуже
• (Dev Ru) Строим продукт на основе AI
• (Dev En) REST API Design for Mobile Apps: A Complete Guide
• (Dev En) Your First AI Agent in Kotlin
• (Dev En) How to Build Advanced AI Agents – Course for Beginners (LiveKit, Exa, LangChain)
Прошлогодние видео:
• (iOS Ru) Ускоряем SwiftUI с Observable
• (iOS Ru) Как укротить виджеты в супераппе?
• (iOS Ru) UICollectionViewLayout с самого начала
• (iOS Ru) UITableView с различными типами ячеек
• (And Ru) Размер имеет значение: как измерить и уменьшить вес Android-приложения
• (And Ru) Установка Android-приложений от доисторических времен до наших дней
• (Crs Ru) React Native перевернул игру
• (Crs Ru) Темная сторона изолятов в Dart
• (Dev Ru) Интероп – неизбежность в больших системах: C и C++, JNI, WinAPISwift Explorer - глубокий анализ кода Swift
Swift Explorer - инструмент для быстрого исследования и анализа Swift Intermediate Representation (IR), созданного компилятором LLVM, и сгенерированного ассемблерного кода.
Что дает:
• Глубокое понимание кода: Разработчики могут видеть, как код Swift преобразуется в LLVM IR и код ассемблера, что помогает им лучше понимать оптимизацию и низкоуровневое поведение.
• Расширенная отладка: Просмотр LLVM IR и ассемблерного кода может помочь выявить проблемы производительности или трудноотслеживаемые ошибки в исходном коде.
• Образование и обучение: Ценный образовательный инструмент для изучения компиляторов и того, как различные языковые конструкции преобразуются в промежуточное представление и код ассемблера.
• Оптимизация: Помогает выявить и оптимизировать фрагменты кода, которые неэффективно компилируются, предоставляя информацию из LLVM IR и кода ассемблера.
• Сравнительный анализ: Позволяет сравнить, как разные подходы или версии кода генерируют различный IR и ассемблерный код, облегчая выбор оптимальных практик программирования.
Swift Explorer на GitHub: https://github.com/heroesofcode/swift-explorer
Платформа: iOS
⭐️: 9
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
