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

(iOS Ru) Ускоряем приложение эффективно
(iOS Ru) Swift Concurrency в iOS SDK Яндекс Доставки
(iOS Ru) Как мы доверили качество наших приложений AI
(iOS En) iOS Interview Question: Build a World Clock App in SwiftUI
(iOS En) 6 Useful SwiftUI Modifiers - Xcode 16
(iOS En) How to Run Automated UI Tests in iOS with XCUITest
(iOS En) Elevate Your SwiftUI Lists with iOS 18’s New Container Features
(iOS En) SwiftUI iOS Localization Tutorial: Master String Catalogs in Xcode 16
(iOS En) How Task Cancellation Really Works in Swift (Behind the Scenes)
(iOS En) Re-creating iMessage Morph-Menu Effect Using SwiftUI
(And Ru) История одного бизнес-желания
(And Ru) Наглядный пример, когда не следовать best practices for coroutines от Google
(And Ru) Кто является Senior разработчиком?
(And En) What’s new in Jetpack Compose
(And En) Google Home APIs, tools, and Gemini capabilities for your apps
(And En) KotlinConf'25 - Keynote
(And En) Everything you need to know about NEW Navigation 3
(Crs Ru) Борьба с лишним весом, или Методы оптимизации размеров Flutter-приложений
(Crs En) Hot Reload In Compose Multiplatform (CMP) - THIS Is All You Have to Know
(Dev Ru) Анатомия энергопотребления
(Dev Ru) От J2ME до супераппов: 20 лет разработки глазами техдиректор
(Dev Ru) Вадим Чистяков — Global Talent Visa, переезд в Лондон, работа в IT
(Dev Ru) Мнемотехника: запомнить всё — развитие памяти, насмотренность, саморазвитие
(Dev En) Announcing Gemma 3n Preview: Powerful, Efficient, Mobile-First AI
(Dev En) Learn Python for Data Science – Full Course for Beginners

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

(iOS Ru) Как писать игры на Swift для Playdate
(iOS Ru) Мок-собеседование iOS-разработчика. SwiftUI (+ все собеседования)
(iOS Ru) Макросы Swift: проще, чище, быстрее
(iOS Ru) Мы решили все проблемы работы в модульном проекте. Хотите так же?
(And Ru) Оптимизация Compose: проблемы, опыт, тактика, стратегия
(Crs Ru) 5 лет с Flutter: эволюция кроссплатформенности
(Crs Ru) Flutter-диета. Как сбросить вес, выпиливая модули
(Dev Ru) Прокачиваем Code Review: как выжать максимум?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
ReadMoreTextView - библиотека реализует сворачиваемый виджет Text с «Читать дальше» в свернутом состоянии и «Читать меньше» в развернутом. Поддерживает Android View и Jetpack Compose.

ReadMoreTextView на GitHub: https://github.com/webtoon/ReadMoreTextView
Платформа: Android
⭐️: 180
Для чего я написал собственный аудиопроигрыватель

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

Статья: https://habr.com/ru/companies/ruvds/articles/912886/
Платформа: iOS
Автоматизация проверки стиля кода с помощью KtLint в Android проекте

Мне повезло участвовать в большом стартапе и начать проект самостоятельно. И в моем проекте я решил покончить с Code Review в привычном понимании.

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

В данной статье я рассмотрю только анализ стиля Kotlin кода и его автоматическое исправления согласно выработанным правилам в проекте.

Статья: https://habr.com/ru/articles/914250/
Платформа: Android
🔥1
SmartCaptcha Yandex на iOS: инструкция по внедрению

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

Материал предназначен для iOS-разработчиков, у которых уже есть базовые знания мобильной разработки, и кто хочет быстро и корректно внедрить капчу от Яндекса в свое iOS-приложение.

Статья: https://habr.com/ru/companies/simbirsoft/articles/914178/
Платформа: iOS
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Марширующие муравьи - делаем кастомный модификатор для границ

Граница в виде "марширующих муравьев" — распространенный элемент пользовательского интерфейса, используемый для обозначения «выбранного» элемента, но предоставляемый Compose модификатор border() не справляется с этой задачей.

Поэтому давайте создадим свой собственный!

И по ходу дела мы многое узнаем о Paths, измерении путей, рисовании путей и эффектах!

Статья: https://apptractor.ru/info/articles/marshiruyuschie-muravi-delaem-kastomnyy-modifikator-dlya-granits.html
Платформа: Android
🔥1
ChessKit - пакет Swift для эффективной реализации шахматной логики (не игры самой, а именно логики). Реализует представление доски и всех игровых фигур, проверку правильности хода, ветвление ходов и вариации, состояний игры (шах, мат, пат, ничья) и т.п.

ChessKit на GitHub: https://github.com/chesskit-app/chesskit-swift
Платформа: iOS
⭐️: 14
👍2