AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.69K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
ToastKit - это легкий и полностью настраиваемый Swift-пакет, который поможет вам отображать информационные тосты в вашем приложении. Он прост в использовании, поддерживает различные встроенные стили, такие как success, warning, info, error, с иконками и т.п., а также позволяет полностью настраивать их под ваши нужды.

ToastKit на GitHub: https://github.com/Desp0o/ToastKit
Платформа: iOS
⭐️: 19
👍1
Сканирование баркодов c помощью камеры и внешних устройств в Compose

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

Статья: https://habr.com/ru/companies/sberbank/articles/901630/
Платформа: Android
1
📺 Видео и подкасты за неделю на @AppFiles

(iOS Ru) От модуляризации к Clang и обратно
(iOS Ru) Суперапп с чистого листа
(iOS Ru) SwiftUI Network Observer - Network Monitor
(iOS En) Animated Redacted Modifier - SwiftUI
(iOS En) Crafting Effective SwiftUI ViewModifiers
(iOS En) SwiftUI Skeleton View - Skeleton Loading Animations
(And Ru) Универсальное демоприложение
(And Ru) Не два байта переслать: эмуляция бесконтактных карт на мобильных устройствах
(And Ru) Архитектурное собеседование Android разработчика (все собеседования)
(And En) Clean Architecture: The ONE Change That Transforms Use Cases From Terrible to Super Useful
(And En) Troubleshooting Gradle and Maven builds with Develocity
(Crs Ru) Как Kotlin Multiplatform изменил наши процессы
(Crs En) Build an agent-powered travel planning app with Generative AI
(Crs En) React Native Isn't as Popular as You Think
(Crs En) Vibe Coding an Online Card Game with Flutter
(Dev Ru) Fusion, или Как мы реализовали нашу версию BDUI
(Dev Ru) Что показали на АврораКонф?
(Dev Ru) Crystal – это Ruby без недостатков
(Dev En) Ktor vs. Spring Boot - Which Backend Framework Is Best For Mobile Developers?
(Dev En) Getting started with Agent Development Kit

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

(iOS Ru) А так ли нужна Swift Modern Concurrency?
(iOS Ru) Мгновенный фидбэк: как оперативно получать отзывы о приложении в App Store
(And Ru) Устройство Android Music SDK или как мы встроили музыку в суперапп-приложение
(And Ru) Интеграция MediaPipe в Android-приложение видеоконференцсвязи
(Dev Ru) Инженерная культура BigTech: работа мечты или испытание на прочность?
(Dev Ru) Как устроена мобильная разработка в Кинопоиске
(Dev Ru) Пробить стеклянный потолок и стать сеньором
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Расширенные архитектурные правила в SwiftLint

В статье автор сначала троллит идею использования SwiftLint для архитектурных проверок. Но потом внезапно... показывает, как это можно реально реализовать.

Это не совсем production-ready подход, но зато классный способ:

• Навести архитектурный порядок в проекте
• Поиграться с автоматизацией через статический анализ

Статья с юмором, но с полезными идеями. Особенно для тех, кто хочет держать архитектуру под контролем, а не полагаться только на ревью.

Статья: https://itnext.io/advance-architectural-rules-in-swiftlint-just-kidding-80ac5e5a911d
Платформа: iOS
👏: 194

👍 если хотите русский перевод
👍5
Learn Kotlin Flow - проект для тех, кто хочет начать работать с Kotlin Flow. Автор собрал практические примеры того, как использовать потоки в реальных приложениях. Плюс у него есть блог, где он публикует статьи о работе с Flow.

Learn Kotlin Flow на GitHub: https://github.com/amitshekhariitbhu/Learn-Kotlin-Flow
Платформа: Android
⭐️: 478
1
Как работает Robolectric и почему это важно знать

Представьте, что можно тестировать android-код без эмулятора, запуская тесты за секунды вместо минут. Именно это обещает Robolectric — библиотека, которую либо любят, либо ненавидят, но точно не игнорируют.

За кажущейся простотой «просто добавь зависимость» скрывается удивительная магия модификации байткода, о которой не рассказывают в статьях. Предлагаю разобраться, как на самом деле работает магия Robolectric и почему эти знания пригодятся любому android-разработчику.

Статья: https://habr.com/ru/companies/tbank/articles/902180/
Платформа: Android/тестирование
1
Архитектурный линтинг для Swift: часть 2

Продолжение первой статьи - автор рассказывает про сделанный ими Harmonize, первый архитектурный линтер для Swift. Harmonize позволяет внедрить любое архитектурное или структурное правило линтинга всего в нескольких строках кода, не требуя крутого обучения или мастерского владения регулярными выражениями. В отличие от SwiftLint, правила линтинга просто пишутся в виде юнит-тестов, а не регулярных выражений, и каждое правило имеет полный доступ к вашей кодовой базе (и AST) с помощью удобного, идиоматического DSL. Точно так же, как вы написали бы тест для функции вашего приложения, теперь вы пишете тесты и делаете утверждения об архитектуре вашего кода.

Статья: https://apptractor.ru/info/articles/arhitekturnyy-linting-dlya-swift-chast-2.html
Платформа: iOS
👍2
Как правильно обрабатывать UI-события в Kotlin ViewModel

Если вы когда-либо пытались показать Toast, Snackbar или осуществить навигацию между экранами из ViewModel — вы знаете, насколько это может быть неудобно. Особенно с LiveData: события могут дублироваться при повороте экрана или при повторной подписке.

В статье описан чистый и удобный способ организации UI-событий с помощью sealed-классов и SharedFlow.

Статья: https://vaibhav3011.medium.com/handling-ui-actions-the-right-way-in-kotlin-viewmodels-119a06bb43ef
Платформа: Android
👏: 145
👎1
История K2 Mode и как он работает

JetBrains представила K2 Mode — новое поколение поддержки Kotlin в IntelliJ IDEA. Это не просто улучшение, а почти полная переработка архитектуры плагина Kotlin, направленная на повышение стабильности, производительности и поддержку будущих возможностей языка.​

K2 Mode — это новый механизм анализа кода Kotlin в IntelliJ IDEA, основанный на интеграции с компилятором K2. В отличие от предыдущей реализации (K1), K2 Mode использует общую семантическую модель как для компилятора, так и для IDE, что обеспечивает более точный и согласованный анализ кода. Это позволяет IDE быстрее и надежнее выполнять подсветку синтаксиса, автодополнение, рефакторинг и другие функции.​

Ранее JetBrains приходилось поддерживать отдельные реализации анализа кода для компилятора и IDE, что приводило к дублированию усилий и потенциальным несоответствиям. С K2 Mode эта проблема решена: теперь IDE и компилятор "понимают" язык одинаково. Это особенно важно для поддержки новых возможностей Kotlin 2.0 и выше.

Статья: https://blog.jetbrains.com/idea/2025/04/the-story-behind-k2-mode-and-how-it-works/
Платформа: Android
1
SnapshotTestingMacros - тонкая прослойка над Swift Testing и Swift SnapshotTesting, позволяющий делать снепшоты на основе макросов, используя синтаксис, похожий на Swift Testing.

Подобно тому, как в Swift Testing есть @Suite и @Test, SnapshotTestingMacros использует @SnapshotSuite и @SnapshotTest для разметки кода.

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

В простейшем случае это все, что нужно для снепшот теста:

//  Create a simple snapshot test for some SwiftUI text.

@Suite
@SnapshotSuite
struct MySnapshots {

@SnapshotTest
func myView() -> some View {
Text("Some text")
}
}


SnapshotTestingMacros на GitHub: https://github.com/adammcarter/swift-snapshot-testing-macros
Платформа: iOS
⭐️: 31
👍3
Optional vs Nullable на стыке технологий

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

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

Статья: https://habr.com/ru/articles/902552/
Платформа: разработка
1
Карты в Jetpack Compose - руководство для начинающих

Если вы только начинаете работать с картами в Jetpack Compose, статья в Kotlin Academy станет отличной отправной точкой. В ней автор делится практическим подходом к интеграции Google Maps в Compose-проекты, демонстрируя, как с нуля создать экран с картой, добавить маркеры и управлять состоянием карты в реактивном стиле.

Особое внимание уделяется тому, как правильно подключить зависимости, использовать AndroidView для внедрения MapView и при этом не терять преимущества декларативного подхода. Автор также объясняет, как настроить карту через MapView.getMapAsync, управлять перемещением камеры и работать с пользовательскими событиями.

Материал хорошо подходит для тех, кто знаком с Jetpack Compose, но пока не имел дела с Google Maps API. Он помогает быстро войти в тему и понять, какие сложности могут возникнуть при интеграции карт, а также как их обойти. Отличный выбор для первого опыта с геолокацией в Compose.

Статья: https://blog.kotlin-academy.com/maps-in-jetpack-compose-a-beginners-guide-a7f01e1c3ff4
Платформа: Android
👏: 8

👍 если хотите русский перевод
👍3
Монотонный стек: мощный инструмент для оптимизации алгоритмов

В программировании при решении задач на массивы и последовательности часто возникает необходимость находить предыдущий или следующий элемент, удовлетворяющий определённому условию — например, ближайший больший или меньший элемент. Решать такие задачи в лоб — медленно и неэффективно. Но существует шаблон, позволяющий обрабатывать подобные задачи за линейное время — монотонный стек (monotonic stack).

Статья: https://apptractor.ru/info/articles/monotonic-stack.html
Платформа: алгоритмы
👍1
Вайб кодинг - не оправдание для некачественной работы

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

Однако, как скажет вам любой опытный инженер, скорость ничего не значит, если на дороге отваливаются колеса. И вот тут-то и начинаются проблемы — в разрыве между вайбом и реальностью создания поддерживаемого, надежного программного обеспечения.

Статья: https://apptractor.ru/info/articles/vayb-koding-ne-opravdanie-dlya-nekachestvennoy-raboty.html
Платформа: разработка/ИИ
2👍2
Есть ли лучшая AsyncButton?​

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

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

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

Статья: https://captainswiftui.substack.com/p/is-there-a-better-asyncbutton
Платформа: iOS
👍1
Тестировать мобильные приложения – сложно.

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

Точнее, так было раньше. Сейчас об этих QA-практиках можно забыть благодаря Мобильной ферме.

Это решение от Selectel для удаленного тестирования мобильных приложений на реальных устройствах, а не на эмуляторах. Здесь доступно 200+ моделей телефонов на Android и iOS, чтобы проверять удобство интерфейсов, проводить автотесты и параллельное тестирование. Оплачивайте Мобильную ферму только за использование – 1 р/мин или 30 р/час.

Запросите демо продукта и убедитесь в удобстве Мобильной фермы сами. Оставляйте заявку по ссылке: https://slc.tl/2r8m1

Реклама. АО «Селектел», ИНН 7810962785, ERID: 2VtzqwvWNUa
👍1
AstraCrypt - это бесплатное, мощное приложение для шифрования с открытым исходным кодом, в котором есть все необходимое для обеспечения безопасности ваших данных.

Фичи: надежные алгоритмы шифрования, мультишифрование, безопасное хранение, дополнительная аутентификация пользователя, поддержка внешних хранилищ, пользовательские настройки безопасности, современный пользовательский интерфейс на основе Material You и пр.

Технический стек: чистая архитектура и MVVM, Google Tink, Room & Paging, Kotlin Coroutines и AndroidX Work, Jetpack Compose и Metrics, AndroidX Navigation-Compose, Junit v4, Mockk, Robolectric и KotlinX Coroutines Test, AndroidX DataStore, KotlinX Serialization и Kotlin Parcelize, Dagger Hilt и пр.

AstraCrypt на GitHub: https://github.com/gromif/AstraCrypt
Платформа: Android
⭐️: 48
👍2
Понимание порядка выполнения в Jetpack Compose: DisposableEffect, LaunchedEffect и Composables

Механика работы Jetpack Compose может сбивать с толку, особенно когда дело доходит до порядка выполнения кода. Почему LaunchedEffect не срабатывает сразу? Когда именно вызывается DisposableEffect? Эти вопросы критичны, если вы хотите точно контролировать поведение ваших компонентов и избегать багов, связанных с жизненным циклом.

Статья разбирает порядок выполнения в Compose на практических примерах. Автор шаг за шагом показывает, что сначала вызываются сами @Composable функции, затем в них могут запускаться эффекты вроде LaunchedEffect, но уже в следующем фрейме. Это значит, что если вы ожидаете немедленного запуска эффекта после первого отображения компонента — стоит пересмотреть эту логику. С DisposableEffect тоже всё непросто: он срабатывает при монтировании и размонтировании, но строго после завершения компоновки.

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

Статья: https://proandroiddev.com/understanding-execution-order-in-jetpack-compose-disposableeffect-launchedeffect-and-composables-d2d0b75b7ec8
Платформа: Android
👏: 132
1