Чем полезен Server Driven UI
Сегодня поговорим о Server Driven UI вот по такому плану:
• что это вообще за технология
• из чего она состоит
• рассмотрим наши подходы к ее реализации
Статья: https://habr.com/ru/companies/mkb/articles/885648/
Платформа: разработка
Сегодня поговорим о Server Driven UI вот по такому плану:
• что это вообще за технология
• из чего она состоит
• рассмотрим наши подходы к ее реализации
Статья: https://habr.com/ru/companies/mkb/articles/885648/
Платформа: разработка
👍1
Прекратите использовать тестовые теги в Jetpack Compose
Тестирование UI с помощью Jetpack Compose в основном основано на поиске узлов в дереве семантики, которое состоит из composable элементов.
Я заметил, что некоторые люди используют тестовые теги (test tags) в качестве модификаторов для своих составных элементов, чтобы сделать их легкодоступными.
Статья: https://apptractor.ru/info/articles/prekratite-ispolzovat-testovye-tegi-v-jetpack-compose.html
Платформа: Android
Тестирование UI с помощью Jetpack Compose в основном основано на поиске узлов в дереве семантики, которое состоит из composable элементов.
Я заметил, что некоторые люди используют тестовые теги (test tags) в качестве модификаторов для своих составных элементов, чтобы сделать их легкодоступными.
Статья: https://apptractor.ru/info/articles/prekratite-ispolzovat-testovye-tegi-v-jetpack-compose.html
Платформа: Android
Добавляем SharePlay в iOS-приложение
Недавно я работал над функцией NowPlaying, которая использует API SharePlay в iOS, позволяя пользователям присоединяться к сеансам прослушивания и открывать новую музыку вместе со своими друзьями.
Мне пришлось немало потрудиться, чтобы заставить все работать, и я обнаружил, что документация Apple по настройке сессий SharePlay скудная и немного запутанная. По этой причине я решил написать исчерпывающее руководство по настройке сеанса SharePlay, в котором собраны все мои находки.
Статья: https://apptractor.ru/info/articles/dobavlyaem-shareplay-v-ios-prilozhenie.html
Платформа: iOS
Недавно я работал над функцией NowPlaying, которая использует API SharePlay в iOS, позволяя пользователям присоединяться к сеансам прослушивания и открывать новую музыку вместе со своими друзьями.
Мне пришлось немало потрудиться, чтобы заставить все работать, и я обнаружил, что документация Apple по настройке сессий SharePlay скудная и немного запутанная. По этой причине я решил написать исчерпывающее руководство по настройке сеанса SharePlay, в котором собраны все мои находки.
Статья: https://apptractor.ru/info/articles/dobavlyaem-shareplay-v-ios-prilozhenie.html
Платформа: iOS
👍1
Video Player App - пример приложения для Android, написанный на Kotlin и Jetpack Compose, поддерживающий различное расположение навигации в зависимости от размера экрана. Media 3 Exoplayer реализован на основе single activity архитектуры. Он полностью функционален и поддерживает функцию «картинка в картинке». Еще в приложении используется MVVM, корутины и Flow, Dagger Hilt, Material 3, динамический лейаут с Windows Size Class, Gradle Kotlin DSL, базовые профили.
Video Player App на GitHub: https://github.com/ryanw-mobile/video-player-app
Платформа: Android
⭐️: 14
Video Player App на GitHub: https://github.com/ryanw-mobile/video-player-app
Платформа: Android
⭐️: 14
This media is not supported in your browser
VIEW IN TELEGRAM
Протокол Animatable: укрощение анимаций в SwiftUI
В SwiftUI-разработке вы когда-нибудь сталкивались с ситуацией, когда, казалось бы, правильный код анимации не работает так, как ожидалось? Или анимации, которые отлично работают на одних версиях iOS, ведут себя ненормально на других? Эти досадные проблемы с анимацией часто можно решить с помощью мощного, но не слишком заметного инструмента - протокола
Статья: https://apptractor.ru/info/articles/animatable-2.html
Платформа: iOS
В SwiftUI-разработке вы когда-нибудь сталкивались с ситуацией, когда, казалось бы, правильный код анимации не работает так, как ожидалось? Или анимации, которые отлично работают на одних версиях iOS, ведут себя ненормально на других? Эти досадные проблемы с анимацией часто можно решить с помощью мощного, но не слишком заметного инструмента - протокола
Animatable.Статья: https://apptractor.ru/info/articles/animatable-2.html
Платформа: iOS
👍2🔥1
Что такое Single Activity архитектура в Android
В последние годы Single Activity архитектура набирает популярность в разработке Android-приложений. Такой подход предполагает использование единственной Activity, внутри которой осуществляется навигация между различными экранами. Давайте разберёмся, в чём преимущества этого подхода, как его реализовать и какие инструменты помогут упростить работу с ним.
Статья: https://apptractor.ru/info/articles/chto-takoe-single-activity-arhitektura-v-android.html
Платформа: Android
В последние годы Single Activity архитектура набирает популярность в разработке Android-приложений. Такой подход предполагает использование единственной Activity, внутри которой осуществляется навигация между различными экранами. Давайте разберёмся, в чём преимущества этого подхода, как его реализовать и какие инструменты помогут упростить работу с ним.
Статья: https://apptractor.ru/info/articles/chto-takoe-single-activity-arhitektura-v-android.html
Платформа: Android
Остерегайтесь READ_MEDIA_IMAGES
Если вы являетесь Android-разработчиком, то, возможно, знаете о недавнем изменении политики Google Play в отношении разрешения READ_MEDIA_IMAGES. К сожалению, мы не знали. В этом посте поделимся опытом того, как добавление этого разрешения в манифест заблокировало нам возможность выпустить приложение в альфа-канал, и почему вы должны быть осторожны, прежде чем добавлять это разрешение в свой проект.
Статья: https://apptractor.ru/info/articles/osteregaytes-read_media_images.html
Платформа: Android
Если вы являетесь Android-разработчиком, то, возможно, знаете о недавнем изменении политики Google Play в отношении разрешения READ_MEDIA_IMAGES. К сожалению, мы не знали. В этом посте поделимся опытом того, как добавление этого разрешения в манифест заблокировало нам возможность выпустить приложение в альфа-канал, и почему вы должны быть осторожны, прежде чем добавлять это разрешение в свой проект.
Статья: https://apptractor.ru/info/articles/osteregaytes-read_media_images.html
Платформа: Android
BikeShare - проект Kotlin Multiplatform с Jetpack Compose и SwiftUI на основе CityBikes API. Поддерживает iOS, Android, десктопы, веб. Нужна Android Studio Arctic Fox и Xcode 13.2.
BikeShare на GitHub: https://github.com/joreilly/BikeShare
Платформа: Android/кроссплатформа
⭐️: 728
BikeShare на GitHub: https://github.com/joreilly/BikeShare
Платформа: Android/кроссплатформа
⭐️: 728
•
(iOS Ru) Переходим на SwiftUI•
(iOS Ru) Задачи с собеседования: LeetCode — Перестановка в строке•
(iOS En) Apple Books Scroll Animation - Complex UI - SwiftUI•
(iOS En) Power of new Scroll APIs - Custom Scroll Indicators - SwiftUI•
(iOS En) Mastering Images in SwiftUI – Assets, Bundles, Remote URLs & Effects•
(iOS En) SwiftUI Ripple Transition Effects - Custom Transitions•
(iOS En) Trie Data Structure Explained in Swift: The Ultimate Guide to Efficient Search•
(iOS En) Capture & Share SwiftUI Views as Images with ImageRenderer & ShareLink•
(And Ru) Производительность sequence, stream и collection в JVM•
(And Ru) Непростые вопросы про Kotlin Coroutines•
(And En) Single State Fields VS. State Data Class In Your ViewModel - What's Best?•
(Dev Ru) Архитектурный надзор и анализ трейсов в Авито•
(Dev Ru) Логистические системы — Логистика, доставка, трекинг посылки•
(Dev En) Junie - The New AI Coding Agent from JetBrains - Can it build a Compose Desktop app?•
(Dev En) Kubernetes and EKS for Beginners – Crash Course•
(Anl Ru) Мышление аналитика: как цифры превращаются в деньгиЧто было год назад:
•
(iOS Ru) Пишем текстовую RPG•
(iOS Ru) How to Create 3D App Icons for visionOS•
(And Ru) Наш опыт внедрения Compose в большой проект•
(And Ru) Многомодульность: что это такое?•
(And Ru) Жизнь инди в Google Play•
(And Ru) Разработка новостного приложения. Часть 2•
(Dev Ru) Топ 5 книг для синьораPlease open Telegram to view this post
VIEW IN TELEGRAM
Komikku - бесплатная и открытая программа для чтения манги, основанная на TachiyomiSY и Mihon/Tachiyomi. Этот форк предназначен для предоставления новых и полезных функций, при этом регулярно заимствуя функции/обновления из Mihon или других форков, таких как SY, J2K и Neko.
Komikku на GitHub: https://github.com/komikku-app/komikku
Платформа: Android
⭐️: 1.2K
Komikku на GitHub: https://github.com/komikku-app/komikku
Платформа: Android
⭐️: 1.2K
Эффективный бэкграунд: организация стабильной фоновой работы в связке двух мобильных медтех приложений
В статье я поделюсь опытом нашей команды по организации стабильной фоновой работы в мобильном медтех-приложении, предназначенном для взаимодействия с медицинским оборудованием.
Статья: https://habr.com/ru/articles/886132/
Платформа: Android
В статье я поделюсь опытом нашей команды по организации стабильной фоновой работы в мобильном медтех-приложении, предназначенном для взаимодействия с медицинским оборудованием.
Статья: https://habr.com/ru/articles/886132/
Платформа: Android
Простая настройка модульности для нового приложения
В статье автор предлагает эффективный подход к модульной архитектуре iOS-приложений с использованием локальных пакетов Swift Package Manager. Основные преимущества модульности включают улучшение времени сборки, четкое разделение ответственности, повышенную тестируемость, облегчение совместной работы и возможность повторного использования кода. Предлагаемая структура разделяет проект на три основных слоя: Core, Domain и Presentation, что способствует чистой иерархии зависимостей и предотвращает циклические зависимости.
Локальные пакеты позволяют ускорить процесс разработки, устраняя необходимость управления версиями на начальном этапе. Однако автор отмечает, что тестовые цели модулей не отображаются в основной рабочей области приложения, что требует использования дополнительных инструментов для запуска тестов из консоли. В статье также рассматриваются рекомендации по управлению зависимостями между модулями, где основные модули (Core) должны иметь минимальные или отсутствующие зависимости, доменные модули (Domain) могут зависеть от основных, а модули представления (Presentation) могут зависеть от доменных и основных модулей.
Статья: https://www.manu.show/2025-02-27-simple-modularization-setup/
Платформа: iOS
В статье автор предлагает эффективный подход к модульной архитектуре iOS-приложений с использованием локальных пакетов Swift Package Manager. Основные преимущества модульности включают улучшение времени сборки, четкое разделение ответственности, повышенную тестируемость, облегчение совместной работы и возможность повторного использования кода. Предлагаемая структура разделяет проект на три основных слоя: Core, Domain и Presentation, что способствует чистой иерархии зависимостей и предотвращает циклические зависимости.
Локальные пакеты позволяют ускорить процесс разработки, устраняя необходимость управления версиями на начальном этапе. Однако автор отмечает, что тестовые цели модулей не отображаются в основной рабочей области приложения, что требует использования дополнительных инструментов для запуска тестов из консоли. В статье также рассматриваются рекомендации по управлению зависимостями между модулями, где основные модули (Core) должны иметь минимальные или отсутствующие зависимости, доменные модули (Domain) могут зависеть от основных, а модули представления (Presentation) могут зависеть от доменных и основных модулей.
Статья: https://www.manu.show/2025-02-27-simple-modularization-setup/
Платформа: iOS
Настройка Visual Studio Code для разработки iOS с использованием Copilot
А тут настраиваем Visual Studio Code в качестве среды разработки для iOS-приложений, что позволяет расширить функциональность по сравнению с Xcode. Для интеграции Xcode с VSCode предлагается установить xcode-build-server через Homebrew, что обеспечивает поддержку Language Server Protocol (LSP) и улучшает такие функции, как автодополнение и подсветка синтаксиса. Далее рекомендуется установить официальное расширение Swift для VSCode и расширение Sweetpad, которое добавляет поддержку разработки iOS-приложений в VSCode.
После установки необходимых расширений автор демонстрирует настройку iOS-проекта в VSCode на примере своего проекта iOSSampleApp. Процесс включает выбор рабочей области в панели Sweetpad, генерацию конфигурации сервера сборки и настройку отладчика с помощью файла launch.json. После завершения настройки разработчики могут использовать возможности GitHub Copilot для упрощения процесса разработки, получая предложения по автодополнению и открывая окно чата Copilot для получения ответов на вопросы о кодовой базе или реализации функций.
Статья: https://blog.kulman.sk/vscode-ios-setup/
Платформа: iOS
А тут настраиваем Visual Studio Code в качестве среды разработки для iOS-приложений, что позволяет расширить функциональность по сравнению с Xcode. Для интеграции Xcode с VSCode предлагается установить xcode-build-server через Homebrew, что обеспечивает поддержку Language Server Protocol (LSP) и улучшает такие функции, как автодополнение и подсветка синтаксиса. Далее рекомендуется установить официальное расширение Swift для VSCode и расширение Sweetpad, которое добавляет поддержку разработки iOS-приложений в VSCode.
После установки необходимых расширений автор демонстрирует настройку iOS-проекта в VSCode на примере своего проекта iOSSampleApp. Процесс включает выбор рабочей области в панели Sweetpad, генерацию конфигурации сервера сборки и настройку отладчика с помощью файла launch.json. После завершения настройки разработчики могут использовать возможности GitHub Copilot для упрощения процесса разработки, получая предложения по автодополнению и открывая окно чата Copilot для получения ответов на вопросы о кодовой базе или реализации функций.
Статья: https://blog.kulman.sk/vscode-ios-setup/
Платформа: iOS
Server-Driven UI с Compose Remote Layout
Автор представляет библиотеку для разработки Server-Driven интерфейсов с использованием Jetpack Compose и Multiplatform. Эта библиотека предоставляет основу для реализации серверно-управляемого UI в Jetpack Compose, позволяя динамически изменять структуру и содержимое пользовательского интерфейса без необходимости обновления приложения. Подход Server-Driven UI позволяет контролировать структуру и содержимое пользовательского интерфейса с серверной стороны, что обеспечивает более гибкое и динамичное взаимодействие с пользователем.
Статья: https://medium.com/@utsmannn/server-driven-ui-with-compose-remote-layout-bdc902d973f8
Платформа: Android
Еще про SDUI:
• Server-Driven UI с DivKit
• Глубокое погружение в Server-Driven UI систему Airbnb
• Реализация Server-Driven UI в Android
• Component Box: Server-driven UI на Kotlin Multiplatform
• Server Driven UI: 6 причин его НЕ использовать
• Паттерны SDUI
Автор представляет библиотеку для разработки Server-Driven интерфейсов с использованием Jetpack Compose и Multiplatform. Эта библиотека предоставляет основу для реализации серверно-управляемого UI в Jetpack Compose, позволяя динамически изменять структуру и содержимое пользовательского интерфейса без необходимости обновления приложения. Подход Server-Driven UI позволяет контролировать структуру и содержимое пользовательского интерфейса с серверной стороны, что обеспечивает более гибкое и динамичное взаимодействие с пользователем.
Статья: https://medium.com/@utsmannn/server-driven-ui-with-compose-remote-layout-bdc902d973f8
Платформа: Android
Еще про SDUI:
• Server-Driven UI с DivKit
• Глубокое погружение в Server-Driven UI систему Airbnb
• Реализация Server-Driven UI в Android
• Component Box: Server-driven UI на Kotlin Multiplatform
• Server Driven UI: 6 причин его НЕ использовать
• Паттерны SDUI
Собственная цветовая система Swift обеспечивает только базовую функциональность для представления цвета. Собственные цвета ограничены RGB и HSL, которые не обеспечивают единообразия восприятия. Это может привести к непоследовательному цветовому восприятию на разных устройствах и в разных средах. ColorTokensKit - мощная система цветовых маркеров для платформ Apple. ColorTokensKit расширяет возможности Swift, предлагая эргономичный доступ к цветовой системе LCH (Lightness, Chroma, Hue) и тысячам доступных цветов.
Фичи:
• Простой в использовании API цветовых маркеров
• Предопределенные цветовые палитры LCH
• Встроенная поддержка доступных коэффициентов контрастности
• Встроенная поддержка темного режима
• Встроенная тематика для всех приложений
• Легкое преобразование между пространствами RGB/HSL/LCH/LAB/XYZ
• Отсутствие зависимостей
ColorTokensKit на GitHub: https://github.com/metasidd/ColorTokensKit-Swift
Платформа: iOS
⭐️: 107
Фичи:
• Простой в использовании API цветовых маркеров
• Предопределенные цветовые палитры LCH
• Встроенная поддержка доступных коэффициентов контрастности
• Встроенная поддержка темного режима
• Встроенная тематика для всех приложений
• Легкое преобразование между пространствами RGB/HSL/LCH/LAB/XYZ
• Отсутствие зависимостей
ColorTokensKit на GitHub: https://github.com/metasidd/ColorTokensKit-Swift
Платформа: iOS
⭐️: 107
Заезжаем в Kotlin Multiplatform. Но какой ценой?
Использование Kotlin Multiplatform в разработке оказалось не таким болезненным, как может показаться на первый взгляд. Общая бизнес-логика действительно позволяет сократить затраты на разработку примерно на 30%, а аналогичную экономию можно получить и на тестировании.
При этом использование Jetpack Compose уже сейчас выглядит оправданным шагом, особенно если закладывать возможность перехода на Compose Multiplatform в будущем — это бесплатно и может дать преимущества. Однако полностью переходить на CMP пока рискованно, поскольку технология еще находится в стадии бета-тестирования. На данный момент разумнее всего экспериментировать с небольшими фичами, минимизируя потенциальные риски. Ну, и, конечно, с нетерпением ждем стабильной поддержки iOS в CMP, которая может значительно улучшить мультиплатформенную разработку.
Статья: https://habr.com/ru/articles/887574/
Платформа: кроссплатформа
Использование Kotlin Multiplatform в разработке оказалось не таким болезненным, как может показаться на первый взгляд. Общая бизнес-логика действительно позволяет сократить затраты на разработку примерно на 30%, а аналогичную экономию можно получить и на тестировании.
При этом использование Jetpack Compose уже сейчас выглядит оправданным шагом, особенно если закладывать возможность перехода на Compose Multiplatform в будущем — это бесплатно и может дать преимущества. Однако полностью переходить на CMP пока рискованно, поскольку технология еще находится в стадии бета-тестирования. На данный момент разумнее всего экспериментировать с небольшими фичами, минимизируя потенциальные риски. Ну, и, конечно, с нетерпением ждем стабильной поддержки iOS в CMP, которая может значительно улучшить мультиплатформенную разработку.
Статья: https://habr.com/ru/articles/887574/
Платформа: кроссплатформа
🤡3
Что такое структурированный параллелизм (Structured Concurrency)
Когда мы говорим о параллелизме Swift (Swift Concurrency), мы также часто упоминаем структурированный параллелизм (Structured Concurrency). Это фундаментальная часть async/await в Swift и она помогает нам понять, как работают последние усовершенствования Swift в области параллелизма.
До async/await мы писали наши асинхронные методы, используя замыкания и Grand Central Dispatch (GCD). Это работало хорошо, но часто приводило к так называемому аду замыканий - отсутствию понимания из-за перетекающих друг в друга связанных замыканий. Структурированный параллелизм упрощает выполнение асинхронного кода, но у нас все еще есть неструктурированные задачи. Поэтому пришло время углубиться в фундаментальный аспект параллелизма Swift.
Статья: https://apptractor.ru/info/articles/chto-takoe-strukturirovannyy-parallelizm-structured-concurrency.html
Платформа: iOS
Когда мы говорим о параллелизме Swift (Swift Concurrency), мы также часто упоминаем структурированный параллелизм (Structured Concurrency). Это фундаментальная часть async/await в Swift и она помогает нам понять, как работают последние усовершенствования Swift в области параллелизма.
До async/await мы писали наши асинхронные методы, используя замыкания и Grand Central Dispatch (GCD). Это работало хорошо, но часто приводило к так называемому аду замыканий - отсутствию понимания из-за перетекающих друг в друга связанных замыканий. Структурированный параллелизм упрощает выполнение асинхронного кода, но у нас все еще есть неструктурированные задачи. Поэтому пришло время углубиться в фундаментальный аспект параллелизма Swift.
Статья: https://apptractor.ru/info/articles/chto-takoe-strukturirovannyy-parallelizm-structured-concurrency.html
Платформа: iOS
Локализация в Jetpack Compose
Локализация относится к изменению текста приложения, форматов валют и других визуальных элементов для соответствия локали пользователя на основе его региональных предпочтений.
С введением языковых предпочтений для каждого приложения (Per-app Language Preference) в Android 13 (API уровня 33) управление языками, специфичными для приложений, стало намного проще.
Статья: https://apptractor.ru/info/articles/lokalizatsiya-v-jetpack-compose.html
Платформа: Android
Локализация относится к изменению текста приложения, форматов валют и других визуальных элементов для соответствия локали пользователя на основе его региональных предпочтений.
С введением языковых предпочтений для каждого приложения (Per-app Language Preference) в Android 13 (API уровня 33) управление языками, специфичными для приложений, стало намного проще.
Статья: https://apptractor.ru/info/articles/lokalizatsiya-v-jetpack-compose.html
Платформа: Android
Compose Permission Manager - легковесная библиотека Android, которая упрощает управление разрешениями в приложениях Jetpack Compose. Эта библиотека предоставляет композабл API для простого запроса, проверки и обработки разрешений приложений. Она поддерживает настраиваемые диалоги обоснований и настроек, проверку разрешений в манифесте и потоки разрешений с учетом жизненного цикла.
Compose Permission Manager на GitHub: https://github.com/meticha/permissions-compose
Платформа: Android
⭐️: 40
Compose Permission Manager на GitHub: https://github.com/meticha/permissions-compose
Платформа: Android
⭐️: 40
👍1
Как мы ускорили работу с базой данных в Android-приложении
Эта небольшая статья про то, как мы ускорили работу с БД в Android-приложении, исправив очевидные и не слишком ошибки.
Проблемы:
• Обращение к БД в циклах
• Хранение JSON-объектов в БД
Статья: https://habr.com/ru/companies/scanny/articles/883398/
Платформа: Android
Эта небольшая статья про то, как мы ускорили работу с БД в Android-приложении, исправив очевидные и не слишком ошибки.
Проблемы:
• Обращение к БД в циклах
• Хранение JSON-объектов в БД
Статья: https://habr.com/ru/companies/scanny/articles/883398/
Платформа: Android
Как очистить Xcode от мусора и освободить ценное дисковое пространство на вашем Mac
Окончательное и бесповоротное руководство по очистке Mac от мусора Xcode.
Статья: https://apptractor.ru/info/articles/kak-ochistit-xcode.html
Платформа: iOS
Окончательное и бесповоротное руководство по очистке Mac от мусора Xcode.
Статья: https://apptractor.ru/info/articles/kak-ochistit-xcode.html
Платформа: iOS
👍5