AppFiles - Mobile Development – Telegram
AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.69K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Открываем Konfeature, нашу open-source библиотеку для удобной работы с Feature Flags

Мы создали открытую библиотеку Konfeature для оптимизации работы с Feature Flags и хотим поделиться нашей разработкой.

Статья: https://habr.com/ru/companies/redmadrobot/articles/911972/
Платформа: Android
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Как создать кастомный угловой бейдж в Jetpack Compose

В этой статье мы рассмотрим, как создать настраиваемый угловой бейдж в Jetpack Compose. Этот значок может быть особенно полезен для отображения скидок, ярлыков новых товаров или любых других отметок. Мы также позаботимся о том, чтобы содержимое значка было полностью настраиваемым.

Статья: https://apptractor.ru/info/articles/kak-sozdat-kastomnyy-uglovoy-beydzh-v-jetpack-compose.html
Платформа: Android
1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Colibri: полностью декларативный и Тьюринг-полный язык, скрывающийся внутри системы типов Swift

Статья о Colibri — декларативном языке, скрытом внутри типовой системы Swift. Это не просто интересный эксперимент, а полноценный подход к разработке, который использует возможности Swift для создания выразительных и мощных решений.

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

Особенно впечатляет реализация игры "Жизнь" Конвея с помощью Colibri. Это доказывает, что типовая система Swift обладает тьюринг-полнотой, позволяя моделировать сложные вычисления без явного управления состоянием.

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

Статья: https://decodemeester.medium.com/colibri-the-fully-declarative-and-turing-complete-language-lurking-inside-swifts-type-system-9adfa27ce5ca
Платформа: iOS
1👍1
Vibe Lander - ретро-игра, сделанная с помощью Kotlin Multiplatform и Compose Multiplatform. Создано с применением Junie, ИИ-помощника от JetBrains, с использованием MVVM, Koin, корутин и Flow для реактивного управления состоянием.

Vibe Lander на GitHub: https://github.com/balch/lander
Платформа: Android
⭐️: 3
NativePHP: создать невозможное и заработать $100 тыс. за первые три месяца

Саймон Хэмп создал то, о чем никто не думал - NativePHP, который позволяет разработчикам создавать десктопные и мобильные приложения на PHP.

Запустив мобильную версию три месяца назад, он уже заработал 100 тысяч долларов.

Саймон рассказывает, как ему это удалось.

Статья: https://apptractor.ru/info/articles/nativephp-sozdat-nevozmozhnoe-i-zarabotat-100-tys-za-pervye-tri-mesyatsa.html
Платформа: кроссплатформа
Rafinad: сахар для UI-тестирования iOS-приложений

Мы в hh очень любим UI-тесты, ими покрывается практически вся функциональность наших приложений, и даже backend-разработчики прогоняют тесты мобильных платформ перед развертыванием своих фич. Однако наши механизмы UI-тестирования разрабатывались более 8 лет назад и с тех пор почти не изменились.

Кто-то скажет, что старые решения прошли проверку временем и что «работает — не трогай»... Возможно, и так. Но сейчас мы внедряем новую дизайн-систему, а новые компоненты требуют адаптации всех тестов — не лучшее ли время для перемен?

Поэтому мы пересмотрели наши подходы к UI-тестированию и теперь готовы поделиться наработками с сообществом в виде open-source проекта — Rafinad. В этой статье расскажем, что он умеет и как им пользоваться.

Статья: https://habr.com/ru/companies/hh/articles/910380/
Платформа: iOS
FCM для Android и Backend на Kotlin

Firebase Cloud Messaging (FCM) — это бесплатный (или почти) облачный сервис от Google, который позволяет отправлять push-уведомления и сообщения напрямую на устройства Android, iOS и веб-приложения. FCM широко используется для реализации мгновенных уведомлений, оповещений о событиях, маркетинговых рассылок и других сценариев, где требуется быстрая доставка сообщений пользователям.

В этой статье мы рассмотрим, как интегрировать FCM в Android-приложение на Kotlin и как настроить отправку push-уведомлений с небольшого, похожего backend, сервера, написанного на Kotlin. Вы узнаете, как подключить Firebase к вашему проекту, реализовать обработку входящих сообщений на устройстве, а также научитесь отправлять push-уведомления на выбранные устройства.

Статья: https://habr.com/ru/articles/912710/
Платформа: Android
Быстродействие прокрутки в SwiftUI - в погоне за 120 кадрами в секунду

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

Статья: https://apptractor.ru/info/articles/swiftui-120.html
Платформа: iOS
👍1
SUICoordinator - библиотека SwiftUI, обеспечивающая мощное управление навигацией и координацию на основе вкладок для iOS-приложений. SUICoordinator обеспечивает чистое разделение проблем, отделяя логику навигации от представлений, что делает SwiftUI-приложения более удобными в обслуживании и масштабируемыми.

Ключевые особенности

• Чистый SwiftUI: Никаких зависимостей от UIKit - построен полностью на SwiftUI
• Паттерн координатор: Чистое отделение логики навигации от представлений
• Координация вкладок: Расширенная навигация на основе вкладок с помощью TabCoordinator, кастомных представлений и бейджей
• Гибкие презентации: Поддержка push, sheet, fullscreen, detents и кастомных презентаций
• Глубокое связывание: Возможности принудительного представления для push-уведомлений и внешних триггеров
• Типобезопасные маршруты: Сильно типизированные маршруты навигации с безопасностью при компиляции
• Асинхронная навигация: Полная поддержка async/await для плавной навигации
• Кастомные панели вкладок: создание полностью кастомных интерфейсов вкладок с помощью TabCoordinator
• Поддержка бейджей: Динамическое управление бейджами для элементов вкладок в TabCoordinator
• Управление памятью: Автоматическая очистка и управление ресурсами

SUICoordinator на GitHub: https://github.com/felilo/SUICoordinator
Платформа: iOS
⭐️: 79
👍1
Создание кастомного тултипа Jetpack Compose

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

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

Статья: https://habr.com/ru/companies/wildberries/articles/905994/
Платформа: Android
👍1
VPAT для Android

Инженер-программист Хе Джун Чой делится опытом проведения оценки доступности Android-приложения Slack с использованием шаблона VPAT (Voluntary Product Accessibility Template).

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

В 2024 году, после значительных изменений в пользовательском интерфейсе, Slack привлек стороннего поставщика для проведения оценки доступности. В результате было выявлено 542 проблемы: 135 на Android, 163 на iOS и 244 на десктопе. Очевидные проблемы, такие как контрастность цветов и отсутствие подписей к изображениям, были немедленно переданы соответствующим командам для устранения.

Основные темы и решения

В статье подробно рассматриваются основные проблемы доступности на Android и способы их решения:

• Недоступные сообщения об ошибках: Обновлены компоненты OutlinedTextField и SKBanner, чтобы ошибки озвучивались с помощью TalkBack.
• Отсутствие заголовков: Добавлены семантические заголовки в списки, такие как страница настроек.
• Отсутствие меток доступности у полей ввода: Обеспечено наличие постоянных меток, а не только заполнительного текста.
• Ошибки, обозначенные только цветом: Добавлены дополнительные индикаторы для пользователей с нарушениями зрения.
• Некоторые проблемы, связанные с навигацией с клавиатуры на устройствах с большим экраном (например, планшетах), были отложены, так как Slack для Android пока не поддерживает такие устройства.

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

Статья: https://slack.engineering/android-vpat-journey/
Платформа: Android
1👍1
Создание фигур с помощью Path в представлении SwiftUI Canvas

В статье автор демонстрирует, как использовать Canvas и Path в SwiftUI для создания анимированных геометрических фигур.

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

Статья: https://www.createwithswift.com/creating-shapes-using-path-in-the-swiftui-canvas-view/
Платформа: iOS
👍1🔥1
Большинство приложений для Android нарушают это правило чистого кода!

Многие Android-разработчики неосознанно попадают в одну и ту же архитектурную ловушку — они помещают слишком много логики в классы фреймворков, такие как FirebaseMessagingService, BroadcastReceiver, Activity или Service. Поначалу это кажется быстрым и легким. Но вскоре код становится хрупким, его становится трудно тестировать и почти невозможно поддерживать.

В этой статье мы покажем, как избежать этой ловушки, применяя одно простое правило:

Делайте компоненты Android «тупыми».

Статья: https://apptractor.ru/info/articles/bolshinstvo-prilozheniy-dlya-android-narushayut-eto-pravilo-chistogo-koda.html
Платформа: Android
1
Институциональные покупки: понимание и обнаружение

Всплеск загрузок, вызванный институциональными покупками (Institutional Purchases), видимыми в App Store Connect, приводит в замешательство многих разработчиков приложений. Несколько сообщений на Reddit или форумах Apple пытаются ответить на вопрос, что это такое, но путаницы с ними по-прежнему много. Программа Apple Volume Purchase Program (VPP) имеет отношение к институциональным покупкам и приводит к измененному поведению вашего приложения.

Что такое институциональные покупки и что вы должны делать с ними по-другому?

Статья: https://apptractor.ru/info/articles/institutsionalnye-pokupki-ponimanie-i-obnaruzhenie.html
Платформа: iOS
Что такое static в Swift — вопросы с собеседований

Swift — современный язык программирования, который сочетает в себе мощь и безопасность, предоставляя разработчикам разнообразные инструменты для написания выразительного и безопасного кода. Ключевое слово static в Swift играет важную роль в определении свойств и методов, принадлежащих самому типу, а не его экземпляру. Хотя концепция может показаться знакомой тем, кто имел дело с языками вроде Java или C++, в Swift она имеет свои особенности, тонкости и области применения, которые важно понимать, чтобы использовать язык на полную мощность.

Статья: https://apptractor.ru/info/articles/static-swift.html
Все: вопросы с собеседований
Платформа: iOS
👍2
Pixel Weather App - многофункциональное погодное приложение для Android с уникальным пиксель-арт пользовательским интерфейсом, разработанное в качестве дипломного проекта. Приложение не только отображает стандартные прогнозы погоды из OpenWeatherMap API, но и использует локальную модель TensorFlow Lite для прогнозирования температуры «ощущается как».

Внутри Kotlin, Jetpack Compose, MVVM, корутины и Flow, Hilt, Room, TensorFlow Lite, Gradle.

Pixel Weather App на GitHub: https://github.com/ArtemZarubin/PixelArtWeatherML
Платформа: Android
⭐️: 29
Как мы распилили монолит Tinder

Tinder поделился опытом преодоления проблем, связанных с монолитной архитектурой в iOS-приложении. Они столкнулись с трудностями, такими как медленные сборки, отсутствие четкой ответственности за модули и сложности в тестировании. Чтобы решить эти проблемы, команда Tinder применила стратегию модульности, разделив монолит на независимые Swift-модули.

Ключевые аспекты подхода Tinder:

1. Сокращение критического пути сборки: Путем «уплощения» графа зависимостей, то есть устранения ненужных зависимостей между модулями, они добились возможности параллельной компиляции, что значительно ускорило процесс сборки.
2. Модульность как средство управления зависимостями: Разделение кода на модули позволило явно определить контракты между частями системы, уменьшить использование анти-паттернов, таких как синглтоны и циклические зависимости, и улучшить читаемость и поддержку кода.
3. Автоматизация процесса: С учетом масштабов проекта (более 1000 файлов и 150 000 строк кода), ручная модульность была бы неэффективной. Tinder разработал инструменты для автоматического рефакторинга, что обеспечило масштабируемость и последовательность изменений.

Этот опыт демонстрирует, как переход от монолитной архитектуры к модульной может значительно улучшить производительность, упростить поддержку и ускорить разработку в крупных проектах.

Статья: https://medium.com/tinder/how-we-decomposed-tinders-monolith-48dcf01a6066
Платформа: iOS
3👍3
Скриншот-тестирование для превью Compose

Скриншот-тестирование - эффективный способ проверить, как ваш пользовательский интерфейс выглядит для пользователей. Инструмент Compose Preview Screenshot Testing сочетает в себе простоту и возможности composable превью с повышением производительности при выполнении скриншот-тестов на собственном компьютере. Compose Preview Screenshot Testing разработан для того, чтобы быть таким же простым в использовании, как и сами composable превью.

Статья: https://apptractor.ru/info/articles/skrinshot-testirovanie-dlya-prevyu-compose.html
Платформа: Android
1
This media is not supported in your browser
VIEW IN TELEGRAM
Выразительные анимации для всех

По мере изучения возможностей Material 3 Expressive одним из первых компонентов, которые я собираюсь внедрить, станут кнопки-переключатели. Благодаря новой выразительной системе движений и визуальных эффектов мне не терпится увидеть, как эти кнопки могут стать более динамичными, плавными и эмоционально привлекательными - выйти за рамки статичных элементов пользовательского интерфейса и стать тем, что действительно реагирует на взаимодействие с пользователем.

Статья: https://apptractor.ru/info/articles/vyrazitelnye-animatsii-dlya-vseh.html
Платформа: Android
ObservableDefaults - библиотека Swift, которая легко интегрирует UserDefaults и NSUbiquitousKeyValueStore (iCloud Key-Value Storage) с фреймворком Observation в SwiftUI. Он предоставляет два мощных макроса (@ObservableDefaults для локального управления UserDefaults и @ObservableCloud для облачного синхронизированного хранения данных), которые упрощают сохранение данных, автоматически связывая объявленные свойства с соответствующими системами хранения. Это позволяет точно и эффективно реагировать на изменения данных, независимо от того, происходят ли они внутри приложения, извне или на нескольких устройствах.

ObservableDefaults на GitHub: https://github.com/fatbobman/ObservableDefaults
Платформа: iOS
⭐️: 152