AppFiles - Mobile Development
Открыть в Telegram
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Больше2 165
Подписчики
-124 часа
Нет данных7 дней
+130 день
Архив постов
Ищете эффективные инструменты для создания DSL?
Узнайте, как Kotlin может упростить разработку с помощью JsonBuilder!
Приглашаем на открытый урок.
🗓 22 мая в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».
На открытом уроке вы разберете, как Kotlin позволяет создавать DSL (Domain-Specific Languages), оптимизируя процесс разработки. Мы покажем теорию и практику создания DSL на примере JsonBuilder.
Вы не только научитесь создавать собственные DSL, но и освоите замыкания и extension-методы Kotlin, которые дадут вам дополнительные преимущества при написании чистого и гибкого кода.
🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - Kotlin5
👉 Регистрация на вебинар: https://otus.pw/CDe0/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Современные приложения имеют сложную внутреннюю архитектуру, которую при правильном понимании можно оптимизировать для повышения производительности, эффективности и удобства использования. Rosalind от Tuist анализирует пакеты приложений, чтобы выявить скрытые структуры, предоставляя разработчикам четкие и действенные сведения об их коде, зависимостях, ресурсах и общей структуре. Делая невидимое видимым, Rosalind дает командам разработчиков возможность принимать обоснованные решения при доработке приложений.
В настоящее время Rosalind обеспечивает всесторонний анализ артефактов приложений, созданных в Xcode, а в планах есть поддержка платформ Android и React Native. Цель авторов - предложить единый подход к пониманию ДНК ваших приложений во всех основных экосистемах разработки приложений.
Rosalind на GitHub: https://github.com/tuist/Rosalind
Платформа: iOS
⭐️: 56
Робот Android - любимый маскот пользователей и разработчиков Android. И предыдущие версии конструктора таких ботов были очень популярны - в Google решили, что в этом году переделать конструктор ботов с нуля, используя новейшие технологии, поддерживаемые Gemini. Сегодня компания выпустила новое приложение с открытым исходным кодом Androidify, с помощью которого можно научиться создавать мощный опыт на базе искусственного интеллекта на Android с использованием новейших технологий, таких как Jetpack Compose, Gemini API через Firebase AI Logic SDK, CameraX и Navigation 3.
Примечание: это приложение все еще находится в стадии разработки. В настоящее время в этом приложении используется стандартная модель Imagen, но авторы работают над усовершенствованной моделью, которая специально обучена всем элементам, делающим Android-бота милым и забавным, ею поделятся позже этим летом. А пока не удивляйтесь, если приложение-образец выдаст несколько интересных вариантов!
Приложение сочетает в себе множество различных технологий Google, таких как:
• Gemini API - через Firebase AI Logic SDK для доступа к базовым моделям Imagen и Gemini.
• Jetpack Compose - для создания пользовательского интерфейса с восхитительными анимациями и адаптации приложения к различным размерам экрана.
• Navigation 3 - новейшая навигационная библиотека для построения навигационных графов с помощью Compose.
• CameraX и Media3 Compose - для создания кастомной камеры с пользовательскими элементами управления пользовательским интерфейсом (поддержка задней камеры, поддержка зума, тап-фокус) и воспроизведения промо-видео.
Androidify на GitHub: https://github.com/android/androidify
Статья: https://apptractor.ru/androidify-link
Платформа: Android
⭐️: 308
Repost from Mobile Development by AppTractor
Google анонсирует Jetpack Navigation 3
Долгие годы разработчики жаловались на Jetpack Navigation (2) и теперь компания выпускает абсолютно новую библиотеку навигации, которая должна устранить все предыдущие проблемы.
Основные принципы:
• Вы владеете стеком: Вы, разработчик, а не библиотека, владеете и контролируете бэкстек.
• Не мешает: Nav3 спроектирована как открытая и расширяемая библиотека, предоставляя вам строительные блоки и полезные настройки по умолчанию.
• Выбираете свои строительные блоки: Вместо того чтобы встраивать все поведение в библиотеку, Nav3 предлагает небольшие компоненты, которые вы можете комбинировать для создания более сложной функциональности.
Ключевые особенности
• Анимации
• Адаптивные макеты
• Разграничение состояний
• Модульность
Есть пример кода и типовые решения.
В настоящее время Nav3 находится в стадии альфа-версии, что означает, что API может быть изменен на основе отзывов.
Комбинируем жесты и анимации в SwiftUI
В статье демонстрируют, как объединение жестов и анимаций в SwiftUI может повысить интерактивность и отзывчивость пользовательского интерфейса. Они начинают с простого примера, где изображение перемещается в соответствии с положением пальца пользователя, используя модификатор
position и DragGesture. Затем они усложняют пример, добавляя анимацию возврата объекта в исходное положение с помощью withAnimation(.spring()), что делает взаимодействие более естественным и плавным. Этот подход подчеркивает важность визуальной обратной связи и демонстрирует, как SwiftUI позволяет легко создавать динамичные и интуитивно понятные интерфейсы.
Статья: https://www.createwithswift.com/combining-gestures-and-animations-with-swiftui/
Платформа: iOSМечтают ли андроиды о Robolectric? Разбираем фреймворк по косточкам
Robolectric — это мощный инструмент для UI‑тестирования Android‑кода без эмулятора. Когда я использовал Robolectric в работе, испытал удивление от того, как работает библиотека.
Помимо возможности в юнит‑тестах работать с Android‑компонентами, Robolectric позволяет работать с View и получать из неё Bitmap, что решает не только задачу проверки взаимодействия с View, но и позволяет проверить отображение экрана. И хотя в Android‑комьюнити у Robolectric неоднозначная репутация из‑за трудностей совместимости с другими библиотеками, его почти бесценные возможности пробудили любопытство копнуть глубже и осмыслить этот инструмент.
Статья: https://habr.com/ru/companies/alfa/articles/910226/
Платформа: Android
Видим невидимое: контроль качества Android-библиотек через объектив AppTracer Lite SDK
Мы усиленно работаем над качеством нашего SDK, и одним из важных аспектов стал контроль работы SDK на устройствах пользователей. Было решено собирать краши и перформанс-метрики. Для этого отлично подходит новый инструмент AppTracer Lite SDK, разработанный в VK. Сейчас он доступен только внутри VK.
В статье я расскажу о самом инструменте, о том, для чего его можно использовать, и поделюсь подводными камнями, с которыми я столкнулся при разработке. Подход, описанный тут, универсален, при рассказе я буду говорить вещи, применимые к любой библиотеке.
Статья: https://habr.com/ru/companies/vk/articles/911120/
Платформа: Android
ZenTone - библиотека для Android, которая генерирует звуковые сигналы определенной частоты и громкости.
ZenTone на GitHub: https://github.com/nisrulz/zentone
Платформа: Android
⭐️: 123
Когда отладчик Swift лжет: скрытая стоимость компиляторных оптимизаций
Итак, я создаю приложение SwiftUI, а в нем параллельно вызываю две конечные точки бэкенда с помощью async let. Оба возвращают массивы пользователей, и я хочу объединить их результаты в операторе switch. Достаточно просто, верно?
Оказалось, что да, но при этом немного запутанно.
Во время отладки я заметил нечто странное: один из моих массивов (
users2) оказался загадочно пуст прямо перед оператором возврата, хотя я только что перебирал его и видел все правильные данные!
Так в чем же дело? Неужели Swift съел мой массив? Это ошибка в моем API-клиенте? Или что-то более глубокое?
Статья: https://apptractor.ru/info/articles/kogda-otladchik-swift-lzhet.html
Платформа: iOSKStorage — единый подход к key-value хранилищам на Kotlin Multiplatform
Key-Value хранилища — это очень удобно... пока вам не захочется большего.
SharedPreferences на Android, DataStore, NSUserDefaults на iOS, Multiplatform Settings, локальные файлы или вообще SQL - под все эти варианты нужно писать специфичный код.
Каждое из этих апи нуждается в создании дополнительных оберток, репозиториев, для повышения абстракции и упрощения замены конкретных библиотек.
KStorage — ультимативная обёртка, которая решает эту проблему. Библиотека позволяет создавать обёртки для Key-Value хранилищ, таких как DataStore. Также можно создавать Key-Value хранилище, где ключ — это название файла, а значение — это его сериализуемое значение.
Более того, вы даже можете спокойно сделать обёртку над SQL-запросом. Например, для создания пользователя, обновления или удаления.
Статья: https://habr.com/ru/articles/910392/
Платформа: Android/кроссплатформа
Новый плагин KMP для IntelliJ IDEA и Android Studio
JetBrains выпустил бета-версию нового плагина KMP для IntelliJ IDEA и Android Studio. Этот плагин упрощает все этапы работы с KMP, от настройки проекта до кроссплатформенной разработки и предварительного просмотра пользовательского интерфейса Compose.
Что нового:
• Встроенный расширенный визард для новых проектов — поддерживает все целевые комбинации Android, iOS, десктоп, веб и сервер
• Предварительные проверки — когда вы открываете проект, плагин автоматически запускает проверку окружения
• Готовность к запуску — после индексации плагин автоматически генерирует конфигурации запуска для всех платформ, доступных в вашем проекте, — Android, iOS, web, desktop и server
• Поддержка языков — для проектов с Kotlin и Swift плагин обеспечивает межъязыковую навигацию, подсветку синтаксиса, быстрое документирование и отладку в вашей IDE
• Поддержка Compose Multiplatform — Compose Multiplatform для iOS недавно получил статус Stable, что позволяет уверенно создавать красивые общие пользовательские интерфейсы для использования в производственных условиях на iOS, Android и настольных компьютерах
• Горячая перезагрузка Compose — быстрая итерация является ключевым моментом при создании пользовательских интерфейсов, с помощью Compose Hot Reload вы можете мгновенно увидеть изменения в пользовательском интерфейсе, не перезапуская приложение и не теряя его состояние
Новость: https://apptractor.ru/info/news/novyy-plagin-kmp-dlya-intellij-idea-i-android-studio.html
Платформа: кроссплатформа
Xtool - кроссплатформенная среда разработки, замена Xcode. Создавайте и развертывайте приложения для iOS с SwiftPM на Linux, Windows и macOS.
В нем есть:
• Сборка пакета SwiftPM в приложение для iOS
• Подпись и установка приложений для iOS
• Взаимодействие с Apple Developer Services программным способом
Xtool на GitHub: https://github.com/xtool-org/xtool
Платформа: iOS
⭐️: 2.4K
ErrorKit - сообщения об ошибках Swift, удобные для человека
Несмотря на элегантный дизайн Swift, системные сообщения об ошибках часто бывают загадочными и бесполезными. Вместо того чтобы просто жаловаться, я создал ErrorKit, инструмент, который отображает эти сообщения в виде понятных человеку описаний. Но обработка всей экосистемы Apple - слишком большая задача для одного человека, это должна быть работа сообщества.
В этом посте я расскажу о том, как я создал основу для улучшения описаний ошибок, и приглашаю вас присоединиться ко мне в создании всеобъемлющего словаря удобных сообщений об ошибках для разработчиков Swift.
Статья: https://apptractor.ru/info/articles/errorkit.html
Платформа: iOS
10 трюков Jetpack Compose, о которых вы, вероятно, не знаете
Jetpack Compose произвел революцию в разработке пользовательских интерфейсов для Android благодаря своему декларативному и интуитивно понятному подходу. Но даже для опытных разработчиков многие мощные функции и скрытые жемчужины остаются незамеченными. В этой статье мы рассмотрим 10 недооцененных или малоизвестных трюков с пользовательским интерфейсом в Jetpack Compose, которые помогут вам создавать более эффективные, красивые и удобные в обслуживании пользовательские интерфейсы.
1. Анимируйте видимости с помощью переходов Enter/Exit
2. Используйте модификатора Layout для создания кастомных макетов
3. Разделяйте элементы в LazyColumn
4. Используйте drawBehind для расширения фонового рисунка за пределы границ
5. Закрепляйте заголовки в LazyColumn с помощью stickyHeader
6. Используйте rememberUpdatedState, чтобы избежать устаревших лямбд
7. Не забывайте о pointerInput для кастомных жестов
8. Прокручивайте любой компонент с помощью Modifier.scrollable
9. Используйте CompositionLocal для тематического поведения
10. Используйте Modifier.graphicsLayer для создания эффектов
Статья: https://apptractor.ru/develop/10-tryukov-jetpack-compose.html
Платформа: Android
MagicMirror - умное зеркало своими руками
Подробная инструкция по созданию собственного MagicMirror — умного зеркала, которое отображает время, погоду, новости и другую полезную информацию прямо на поверхности зеркала.
🔧 Что входит в проект:
• Raspberry Pi в качестве основного контроллера
• Монитор за полупрозрачным зеркалом
• Корпус с элементами, напечатанными на 3D-принтере
• Настройка программного обеспечения MagicMirror² и добавление модулей для отображения различной информации.
Этот проект требует базовых навыков в электронике и программировании, а также некоторого времени на сборку и настройку. Однако результат стоит затраченных усилий: вы получите стильный и функциональный элемент интерьера, который можно адаптировать под свои нужды.
Если вы ищете интересный DIY-проект на выходные, создание MagicMirror может стать отличным выбором.
Статья: https://nerdiy.de/en/howto-magicmirror-build-your-own-magicmirror/
Платформа: интернет вещей
WikWok - это красивое и функциональное приложение, которое превращает чтение Википедии в увлекательную ленту статей в стиле TikTok. Доступно на iOS, Android, Macos, Windows, Linux и в веб.
WikWok на GitHub: https://github.com/terrakok/WikWok
Платформа: Android
⭐️: 568
📺 Видео и подкасты за неделю на @AppFiles
•
(iOS Ru) Учим Metal и image processing лишь бы не верстать на iOS
• (iOS Ru) Race Condition: проблема гонки потоков — что это и как избежать?
• (iOS Ru) Под капотом iOS-крешей
• (iOS En) Resizable ScrollView Header | Scroll To Hide Header - SwiftUI
• (iOS En) SwiftUI Theme Switcher in 3 Minutes – Light & Dark Mode Made Easy
• (iOS En) Building emoji reactions in 5 minutes with SwiftUI
• (iOS En) Customized Paywall using Native SwiftUI StoreKit APIs
• (iOS En) Apple Engineer Shows How To Build a SwiftUI Sleep Tracker
• (iOS En) 3 Ways to Initialize @State in SwiftUI
• (And Ru) Тестирование Compose по-новому: простота, надежность, гибкость
• (And En) The Android Show: I/O Edition
• (And En) Now in Android: 116 – Google I/O, Gemini, and Jetpack Compose 1.8
• (And En) What's new in Android Studio Meerkat Feature Drop
• (And En) Android Testing Strategies
• (And En) Tools and patterns for scalable Android app testing
• (And En) 5 Anti-Patterns With Coroutines & Flows You MUST Avoid!
• (And En) How Kotlin is Powering TV Broadcasts Worldwide
• (And En) Android & Kotlin Development Masterclass – Full Course
• (And En) Build your App from Scratch without Material 3 Color System
• (Crs Ru) Kotlin Multiplatform vs Compose Multiplatform: отличия, способы создания и как запустить на iOS
• (Crs Ru) Готов ли Compose iOS к продакшену?
• (Crs En) Kotlin Multiplatform: Have your code and eat it too
• (Dev Ru) Разработчик HarmonyOS Next про ArkTS и HarmonyOS
• (Dev Ru) Язык программирования Groovy: JVM языки, Java, Kotlin, Gradle, DSL
• (Tcn Ru) Как работают нейроинтерфейсы: киборги, Neuralink, brain-computer interface
• (Dev En) Design Messenger - Mobile System Design Mock Interview
• (Dev En) C++ Course: Build an Audio Plugin
Прошлогодние видео:
• (iOS Ru) TextField с автодополнением
• (iOS Ru) SwiftUI-навигация: просто, нативно и декларативно
• (iOS Ru) Удивительный мир внутри .ipa
• (iOS Ru) Core Motion framework в финансовых приложениях
• (And Ru) Путешествие к центру Композиции
• (And Ru) Scout: новый фреймворк для ускоренного и безболезненного управления зависимостями
• (And Ru) Компиляторные плагины: модификация и анализ Сompose
• (And Ru) Как я code coverage внедрял да Gradle plugin для baseline писал
• (Dev Ru) Грабим Дома на Собеседовании в Google (+ другие вопросы с собеседований)Прячем код по-настоящему: тёмные уголки обфускации R8 и ProGuard
Обфускация — важная часть защиты Android-приложений. Однако даже если вы используете R8 или ProGuard - это не гарантия высокой устойчивости к тому что вас код не взломают. Стандартная настройка обфускации довольно простая и нацелена на уменьшение размера сборки, а не повышение защиты от взлома. В этой статье разберу как происходит обфускация в стандартной конфигурации, как можно её сделать сложнее для разбора, а по итогу и уникальной для каждой сборки.
Статья: https://habr.com/ru/articles/909638/
Платформа: Android
The Composable Architecture: мои 3 года использования
TCA — это сторонний фреймворк, не поддерживаемый Apple, и он зависит всего от двух гениальных парней, на которых вы, по сути, ставите всё — всю свою кодовую базу. Это фреймворк, основанный на функциональном программировании, который противоречит объектно-ориентированному наследию и влиянию SwiftUI. Возможно, вы будете более продуктивны в работе с новыми разработчиками и добавлении функций с другой архитектурой и все же сможете достичь желаемой дисциплины с помощью MVVM или Чистой архитектуры.
Статья: https://apptractor.ru/info/articles/the-composable-architecture-moi-3-goda-ispolzovaniya.html
Платформа: iOS
Мантры программирования — это не догмы, а выражения
Это значит, что мы можем цитировать Кнута, говорящего, что преждевременная оптимизация — корень всех зол, и при этом считать, что производительность — это важная характеристика.
Мы можем понимать и применять разделение ответственности, но при этом видеть ценность локальности поведения.
Есть время для YAGNI, и есть время для воздержания от YAGNI.
Ни одно из этих положений не содержит логических противоречий. Пословицы заключают в себе небольшую толику мудрости в краткой фразе, но вам еще нужно научиться правильно применять эту мудрость.
Статья: https://apptractor.ru/info/articles/mantry-programmirovaniya-eto-ne-dogmy-a-vyrazheniya.html
Платформа: разработка
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
