AppFiles - Mobile Development – Telegram
AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.69K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Расширенные архитектурные правила в 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
Отлаживаем приложение вместе со SwiftUI Instruments

Apple по доброте душевной поделилась с разработчиками инструментом отладки SwiftUI. Удобный он или не очень — разберёмся вместе с Surf iOS Team.

Статья: https://habr.com/ru/companies/surfstudio/articles/903264/
Платформа: iOS
👍3
Закулисный взгляд на то, как Spotify выпускает приложения

Чтобы проиллюстрировать наш релизный цикл, давайте проследим путь версии 8.9.2 от зарождения до внедрения.

Статья: https://apptractor.ru/info/articles/spotify-release-1.html
Платформа: разработка
👍3
AAInfographics - элегантный современный декларативный фреймворк для создания графиков и визуализации данных для iOS, iPadOS и macOS. Чрезвычайно мощный, поддерживает около 20 типов диаграмм, с его помощью можно очень быстро добавлять интерактивные графики в мобильные проекты. Он поддерживает касание для проверки данных, мультитач для масштабирования и улучшенную отзывчивость для ваших приложений.

AAInfographics на GitHub: https://github.com/AAChartModel/AAChartKit-Swift
Платформа: iOS
⭐️: 2.5K
👍3
Транзакционные рассылки без головной боли для разработчиков

Чего обычно ждут от транзакционных рассылок? Они должны быть быстрыми, надёжными и безопасными. И настраиваться за пару кликов.

Если вы не хотите заниматься настройкой почтовой инфраструктуры, попробуйте Yandex Cloud Postbox:

• Быстро: медианное время отправки – меньше 3 секунд
• Надёжно: доставляемость в 99,9%
• Безопасно: отправляет email по TLS 1.2+ и соответствует DMARC, DKIM и SPF

Можно выбрать протокол: SMTP/AWS SES API. Первые 2 000 писем в месяц - бесплатно. Попробовать
CI/CD по кнопке: как мы автоматизировали сборку SampleApp для SDK RuStore

В этой статье расскажу, как мы автоматизировали сборку нашего SampleApp — внутреннего Android‑приложения для тестирования SDK RuStore — и сделали процесс сборки максимально простым, быстрым и доступным для всей команды. Теперь любой участник проекта — даже без навыков Android‑разработки — может собрать актуальный APK с набором поставляемых SDK в пару кликов через CI/CD.

Статья: https://habr.com/ru/companies/vk/articles/903528/
Платформа: Android
👍1👎1