MarkupEditor - WYSIWYG редактор для SwiftUI и UIKit
MarkupEditor - WYSIWYG-редактор для SwiftUI и UIKit. Поддерживает представление абзаца или заголовка с предопределенным размером шрифта, маркированные и нумерованные списки, отступы, форматирование (жирный шрифт, курсив, подчеркивание, код, зачеркивание, нижний и верхний индексы),
встраивание изображений, таблиц и ссылок. Не поддерживает цвет текста и фона, изменение размера шрифта. Если вам нужен более богатый набор функций, вы можете самостоятельно расширить MarkupEditor.
Как работает на самом деле
MarkupEditor отображает вам HTML-документ во время редактирования. Он использует библиотеку JavaScript ProseMirror для изменения базового DOM и колбеки Swift при взаимодействии с документом. MarkupEditor не знает, как сохранить ваш документ или преобразовать его в какой-либо другой формат. Это то, что должно будет сделать ваше приложение, использующее библиотеку. MarkupEditor будет сообщать вашему MarkupDelegate об изменении состояния базового документа, и вы сможете использовать эти уведомления для сохранения и, возможно, преобразования HTML в другую форму.
MarkupEditor на GitHub: https://github.com/stevengharris/MarkupEditor
Платформа: iOS
⭐️: 454
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
MarkupEditor - WYSIWYG-редактор для SwiftUI и UIKit. Поддерживает представление абзаца или заголовка с предопределенным размером шрифта, маркированные и нумерованные списки, отступы, форматирование (жирный шрифт, курсив, подчеркивание, код, зачеркивание, нижний и верхний индексы),
встраивание изображений, таблиц и ссылок. Не поддерживает цвет текста и фона, изменение размера шрифта. Если вам нужен более богатый набор функций, вы можете самостоятельно расширить MarkupEditor.
Как работает на самом деле
MarkupEditor отображает вам HTML-документ во время редактирования. Он использует библиотеку JavaScript ProseMirror для изменения базового DOM и колбеки Swift при взаимодействии с документом. MarkupEditor не знает, как сохранить ваш документ или преобразовать его в какой-либо другой формат. Это то, что должно будет сделать ваше приложение, использующее библиотеку. MarkupEditor будет сообщать вашему MarkupDelegate об изменении состояния базового документа, и вы сможете использовать эти уведомления для сохранения и, возможно, преобразования HTML в другую форму.
MarkupEditor на GitHub: https://github.com/stevengharris/MarkupEditor
Платформа: iOS
⭐️: 454
Please open Telegram to view this post
VIEW IN TELEGRAM
Unidirectional Data Flow архитектура
В inDrive написали новую статью про архитектуру в iOS. В ней подробно разобрали реальный кейс: как в компании перевели большой проект с UDF-архитектуры на Clean Architecture. Со всеми практическими нюансами, компромиссами и проблемами, с которыми столкнулись по пути. Статья показывает, как принимать архитектурные решения в уже большом проекте, когда UDF перестает масштабироваться. Особо задорно то, что раньше у inDrive было много материалов о том, как у них хорошо работает UDF, а здесь уже честный разбор следующего этапа, так сказать.
Статья:🇺🇸 https://medium.com/indriver-tech/udf-to-clean-architecture-ios-indrive-e426f1f7ec65
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В inDrive написали новую статью про архитектуру в iOS. В ней подробно разобрали реальный кейс: как в компании перевели большой проект с UDF-архитектуры на Clean Architecture. Со всеми практическими нюансами, компромиссами и проблемами, с которыми столкнулись по пути. Статья показывает, как принимать архитектурные решения в уже большом проекте, когда UDF перестает масштабироваться. Особо задорно то, что раньше у inDrive было много материалов о том, как у них хорошо работает UDF, а здесь уже честный разбор следующего этапа, так сказать.
Статья:
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Android и AccessibilityService: защита чувствительных экранов от чтения интерфейса
При обсуждении защиты чувствительных экранов в Android обычно имеют в виду механизмы защищённого вывода изображения. На практике разработчик чаще всего сталкивается с WindowManager.LayoutParams.FLAG_SECURE и близкими средствами платформы, которые запрещают создание обычных скриншотов, ограничивают вывод окна на небезопасные внешние дисплеи и в ряде сценариев затрудняют захват содержимого экрана системными средствами. Для отдельных поверхностей аналогичная защита может применяться и на уровне SurfaceView. Такой слой важен для экранов, где отображаются платёжные данные, одноразовые коды, персональная информация и другие чувствительные сведения.
Статья: https://habr.com/ru/companies/hex_team/articles/1025368/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
При обсуждении защиты чувствительных экранов в Android обычно имеют в виду механизмы защищённого вывода изображения. На практике разработчик чаще всего сталкивается с WindowManager.LayoutParams.FLAG_SECURE и близкими средствами платформы, которые запрещают создание обычных скриншотов, ограничивают вывод окна на небезопасные внешние дисплеи и в ряде сценариев затрудняют захват содержимого экрана системными средствами. Для отдельных поверхностей аналогичная защита может применяться и на уровне SurfaceView. Такой слой важен для экранов, где отображаются платёжные данные, одноразовые коды, персональная информация и другие чувствительные сведения.
Статья: https://habr.com/ru/companies/hex_team/articles/1025368/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
•
(iOS En) Все видео try! Swift Tokyo 2026•
(iOS En) iOS 26 Custom Animated Keyboard ToolBar Using SwiftUI•
(iOS En) Liquid Glass Toasts Using SwiftUI•
(iOS En) Q&A: Swift concurrency•
(iOS En) Prepare your app for Accessibility Nutrition Labels•
(And En) How to build apps faster with Android Studio Panda•
(And En) Beginner Course for AI-Assisted Android Development•
(And En) Kotlin Flows: Buffer, Conflate, and Debounce•
(And En) AI-Driven APG 9 Migration using Android Skills and Firebender - KMP Project•
(Dev Ru) Когда API-ключ ушел в свободное плавание: атаки мобильных приложений глазами хакера•
(Dev Ru) Хотел делать игры, а стал руководить тимлидами в Авито•
(Dev Ru) Как копилот генерит код? Идем под капот•
(Anl Ru) Каузальность — почему корреляция врёт, статистика, A/B тесты•
(Dsg En) I've Tried the New Claude Design Tool to Create a PL Coding App•
(Dsg En) Meet DESIGN.md: A new open standard for AI-generated UI•
(Mrk En) Why Nobody Downloads Your AppПрошлогодние видео:
•
(iOS Ru) Работа в Booking, жизнь в Амстердаме, автогонки в Европе•
(iOS Ru) Многопоточность с нуля на примере пиццы•
(iOS Ru) Организация и поддержка нативных UI-тестов в iOS•
(And Ru) Разработка SDK•
(And Ru) Прожарка на код-ревью от Яндекса•
(And Ru) Алиса, открой багажник!•
(And Ru) Зачем нужен виртуальный дисплей в Android•
(And Ru) Находим и увольняем low-перформеровPlease open Telegram to view this post
VIEW IN TELEGRAM
Jetpack Compose — обновление апреля 2026
Google выпустил очередное обновление Jetpack Compose 1.11 - это уже не просто апдейт, а ещё один шаг к окончательному закреплению Compose как основного способа создания UI на Android.
В новой версии заметно усилили стабильность. Всё меньше API остаются экспериментальными, а переходы между версиями становятся более предсказуемыми и безопасными. Это важный сигнал для продакшена: Compose окончательно выходит из стадии «осторожного внедрения» и превращается в стандарт де-факто.
Отдельный акцент сделан на производительности. Улучшения затронули recomposition, работу layout и поведение списков. Интерфейсы стали работать плавнее, особенно в сложных сценариях с большим количеством элементов на экране. Это как раз тот тип изменений, который не всегда видно в changelog, но отлично ощущается в реальных приложениях.
Параллельно развивается и сам UI-слой. Компоненты становятся более гибкими, анимации — более управляемыми, а Material 3 продолжает укрепляться как основа дизайна. Всё это делает Compose более универсальным инструментом, который подходит не только для простых экранов, но и для сложных продуктовых интерфейсов.
Интересно, что Google всё активнее двигается в сторону поддержки разных форм-факторов. Compose всё лучше адаптируется под большие экраны, складные устройства и другие нестандартные сценарии. Это отражает общее направление Android — уход от «только смартфонов» к более широкой экосистеме устройств.
Не забыли и про удобство разработчиков. Инструменты становятся стабильнее, интеграция с Android Studio — глубже, а работа с UI — более предсказуемой. Compose постепенно теряет ощущение «магии» и превращается в понятный и контролируемый инструмент.
Статья:🇺🇸 https://android-developers.googleblog.com/2026/04/jetpack-compose-april-2026-updates.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Google выпустил очередное обновление Jetpack Compose 1.11 - это уже не просто апдейт, а ещё один шаг к окончательному закреплению Compose как основного способа создания UI на Android.
В новой версии заметно усилили стабильность. Всё меньше API остаются экспериментальными, а переходы между версиями становятся более предсказуемыми и безопасными. Это важный сигнал для продакшена: Compose окончательно выходит из стадии «осторожного внедрения» и превращается в стандарт де-факто.
Отдельный акцент сделан на производительности. Улучшения затронули recomposition, работу layout и поведение списков. Интерфейсы стали работать плавнее, особенно в сложных сценариях с большим количеством элементов на экране. Это как раз тот тип изменений, который не всегда видно в changelog, но отлично ощущается в реальных приложениях.
Параллельно развивается и сам UI-слой. Компоненты становятся более гибкими, анимации — более управляемыми, а Material 3 продолжает укрепляться как основа дизайна. Всё это делает Compose более универсальным инструментом, который подходит не только для простых экранов, но и для сложных продуктовых интерфейсов.
Интересно, что Google всё активнее двигается в сторону поддержки разных форм-факторов. Compose всё лучше адаптируется под большие экраны, складные устройства и другие нестандартные сценарии. Это отражает общее направление Android — уход от «только смартфонов» к более широкой экосистеме устройств.
Не забыли и про удобство разработчиков. Инструменты становятся стабильнее, интеграция с Android Studio — глубже, а работа с UI — более предсказуемой. Compose постепенно теряет ощущение «магии» и превращается в понятный и контролируемый инструмент.
Статья:
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Pulsar - библиотека тактильной обратной связи
Pulsar - SDK для тактильной обратной связи (haptic feedback) для iOS, Android и React Native. Pulsar предоставляет готовые к использованию предустановки тактильной обратной связи, редактор паттернов для создания кастомных последовательностей и редактор в реальном времени для конструирования обратной связи для жестов.
Фичи:
• Предустановки — библиотека встроенных паттернов (молоток, лай собаки, жужжание, пульсация) и стилей (удары, уведомления, выделение)
• Композитор паттернов — Определение кастомных тактильных паттернов с использованием дискретных событий и непрерывных амплитудно-частотных огибающих
• Композитор в реальном времени — Управление амплитудой и частотой в реальном времени для тактильной обратной связи, управляемой жестами
• Кроссплатформенность — Единый API для iOS (Swift), Android (Kotlin) и React Native (TypeScript)
• Совместимость с ворклетами — Все функции предустановок React Native и методы хуков работают внутри ворклетов Reanimated
Pulsar на GitHub: https://github.com/software-mansion/pulsar
Платформа: iOS/Android
⭐️: 231
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Pulsar - SDK для тактильной обратной связи (haptic feedback) для iOS, Android и React Native. Pulsar предоставляет готовые к использованию предустановки тактильной обратной связи, редактор паттернов для создания кастомных последовательностей и редактор в реальном времени для конструирования обратной связи для жестов.
Фичи:
• Предустановки — библиотека встроенных паттернов (молоток, лай собаки, жужжание, пульсация) и стилей (удары, уведомления, выделение)
• Композитор паттернов — Определение кастомных тактильных паттернов с использованием дискретных событий и непрерывных амплитудно-частотных огибающих
• Композитор в реальном времени — Управление амплитудой и частотой в реальном времени для тактильной обратной связи, управляемой жестами
• Кроссплатформенность — Единый API для iOS (Swift), Android (Kotlin) и React Native (TypeScript)
• Совместимость с ворклетами — Все функции предустановок React Native и методы хуков работают внутри ворклетов Reanimated
Pulsar на GitHub: https://github.com/software-mansion/pulsar
Платформа: iOS/Android
⭐️: 231
Please open Telegram to view this post
VIEW IN TELEGRAM
Paging 3 хорош. Пока вам не понадобится что-то ещё
Если коротко: пагинация — это когда вы не грузите 100 000 товаров из каталога одним запросом, а показываете их страницами по 20–50 штук и подгружаете следующую порцию, когда пользователь домотал до конца.
Звучит как задача на полдня. На практике — по-разному.
Статья: https://habr.com/ru/articles/1027320/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Если коротко: пагинация — это когда вы не грузите 100 000 товаров из каталога одним запросом, а показываете их страницами по 20–50 штук и подгружаете следующую порцию, когда пользователь домотал до конца.
Звучит как задача на полдня. На практике — по-разному.
Статья: https://habr.com/ru/articles/1027320/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Paging 3 хорош. Пока вам не понадобится что-то ещё
Вступление, которое можно пропустить, если вы уже делали пагинацию Если коротко: пагинация — это когда вы не грузите 100 000 товаров из каталога одним запросом, а показываете их страницами по 20–50...
Мессенджер на Paginator. Боевые задачи
В прошлой статье я сравнивал Paginator с Paging 3 на кошачьем уровне: «вот простой фид, смотрите — три строки вместо тридцати». Это полезно для первого знакомства, но не отвечает на главный вопрос: а как оно себя поведёт, когда продукт начнёт требовать то, ради чего люди обычно и пишут свой велосипед поверх Paging 3?
Статья: https://habr.com/ru/articles/1027686/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В прошлой статье я сравнивал Paginator с Paging 3 на кошачьем уровне: «вот простой фид, смотрите — три строки вместо тридцати». Это полезно для первого знакомства, но не отвечает на главный вопрос: а как оно себя поведёт, когда продукт начнёт требовать то, ради чего люди обычно и пишут свой велосипед поверх Paging 3?
Статья: https://habr.com/ru/articles/1027686/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Создание изменяемого циферблата в стиле Ferrari с помощью Compose Multiplatform
Я высоко ценю дизайн, выходящий за рамки функциональности — тот, в котором чувствуется замысел, стоящий за каждой деталью. Поэтому, когда Ferrari представила концепт информационно-развлекательной системы Luce, созданный в сотрудничестве с дизайн-студией Джони Айва LoveFrom, я остановил скроллинг. Показанная приборная панель была не просто красивой — это был отличный пример лаконичного дизайна в сочетании с восхитительными анимациями. Один элемент особенно привлек мое внимание: единый круглый циферблат, плавно трансформирующийся из часов в секундомер и компас. Минималистично, уверенно и дотошно изысканно.
Статья: https://apptractor.ru/info/articles/sozdanie-izmenyaemogo-tsiferblata-v-stile-ferrari-s-pomoschyu-compose-multiplatform.html
Платформа: Android/кроссплатформа
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Я высоко ценю дизайн, выходящий за рамки функциональности — тот, в котором чувствуется замысел, стоящий за каждой деталью. Поэтому, когда Ferrari представила концепт информационно-развлекательной системы Luce, созданный в сотрудничестве с дизайн-студией Джони Айва LoveFrom, я остановил скроллинг. Показанная приборная панель была не просто красивой — это был отличный пример лаконичного дизайна в сочетании с восхитительными анимациями. Один элемент особенно привлек мое внимание: единый круглый циферблат, плавно трансформирующийся из часов в секундомер и компас. Минималистично, уверенно и дотошно изысканно.
Статья: https://apptractor.ru/info/articles/sozdanie-izmenyaemogo-tsiferblata-v-stile-ferrari-s-pomoschyu-compose-multiplatform.html
Платформа: Android/кроссплатформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Waveform - визуализация звука
Waveform - современная библиотека Android на основе Jetpack Compose для визуализации аудиоволн, хода воспроизведения и интерактивного выбора или сегментирования аудиоклипов.
Фичи:
• Визуализация графиков: отображение линейных и столбчатых диаграмм для данных об амплитуде звука
• Визуализатор воспроизведения: отображение прокручиваемой, центрированной волновой формы, синхронизированной с воспроизведением звука
• Инструмент сегментации звука: выбор нескольких аудиосегментов с помощью интуитивно понятного интерфейса временной шкалы
• Выбор аудиосегмента: масштабирование областей волновой формы и точная настройка отдельного сегмента
Waveform на GitHub: https://github.com/karya-inc/Waveform
Платформа: Android
⭐️: 12
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Waveform - современная библиотека Android на основе Jetpack Compose для визуализации аудиоволн, хода воспроизведения и интерактивного выбора или сегментирования аудиоклипов.
Фичи:
• Визуализация графиков: отображение линейных и столбчатых диаграмм для данных об амплитуде звука
• Визуализатор воспроизведения: отображение прокручиваемой, центрированной волновой формы, синхронизированной с воспроизведением звука
• Инструмент сегментации звука: выбор нескольких аудиосегментов с помощью интуитивно понятного интерфейса временной шкалы
• Выбор аудиосегмента: масштабирование областей волновой формы и точная настройка отдельного сегмента
Waveform на GitHub: https://github.com/karya-inc/Waveform
Платформа: Android
⭐️: 12
Please open Telegram to view this post
VIEW IN TELEGRAM
Flutter после увольнений: вот честная оценка, которую никто не хочет давать
В апреле 2024 года Google уволил инженеров из команд Flutter, Dart и Python — за несколько недель до Google I/O, конференции, где они годами объявляли о светлом будущем Flutter.
Никто из Google не подтвердил точное количество. CNBC сообщило о примерно 200 сотрудниках во всех командах. Кевин Мур, менеджер по продуктам Flutter, через несколько часов написал на Reddit: «Flutter и Dart пострадали не больше и не меньше, чем другие. Это был тяжёлый день».
Сообщество читало между строк ещё несколько недель.
А затем произошло нечто интересное: Flutter продолжил выпускать релизы. Impeller стал стабильным. Dart 3.x вышел. Дорожная карта на 2024 год была выпущена практически без изменений. Два года спустя Flutter работает в продакшене в BMW, Alibaba и eBay. Опрос Stack Overflow 2024 показал, что Flutter используется в кроссплатформенных фреймворках на уровне 46%, опережая React Native с 35%.
Так что кризис закончился, верно? Те, кто говорил, что «Flutter мертв», ошибались, заверения были точными, и у истории счастливый конец?
Я не думаю, что все так просто. И я думаю, что разработчики, принявшие любой из выводов — «Flutter кончился» или «Flutter в полном порядке» — совершили ошибку, которая их еще настигнет.
Статья: https://apptractor.ru/info/articles/flutter-posle-uvolneniy-vot-chestnaya-otsenka-kotoruyu-nikto-ne-hochet-davat.html
Платформа: кроссплатформа/Flutter
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В апреле 2024 года Google уволил инженеров из команд Flutter, Dart и Python — за несколько недель до Google I/O, конференции, где они годами объявляли о светлом будущем Flutter.
Никто из Google не подтвердил точное количество. CNBC сообщило о примерно 200 сотрудниках во всех командах. Кевин Мур, менеджер по продуктам Flutter, через несколько часов написал на Reddit: «Flutter и Dart пострадали не больше и не меньше, чем другие. Это был тяжёлый день».
Сообщество читало между строк ещё несколько недель.
А затем произошло нечто интересное: Flutter продолжил выпускать релизы. Impeller стал стабильным. Dart 3.x вышел. Дорожная карта на 2024 год была выпущена практически без изменений. Два года спустя Flutter работает в продакшене в BMW, Alibaba и eBay. Опрос Stack Overflow 2024 показал, что Flutter используется в кроссплатформенных фреймворках на уровне 46%, опережая React Native с 35%.
Так что кризис закончился, верно? Те, кто говорил, что «Flutter мертв», ошибались, заверения были точными, и у истории счастливый конец?
Я не думаю, что все так просто. И я думаю, что разработчики, принявшие любой из выводов — «Flutter кончился» или «Flutter в полном порядке» — совершили ошибку, которая их еще настигнет.
Статья: https://apptractor.ru/info/articles/flutter-posle-uvolneniy-vot-chestnaya-otsenka-kotoruyu-nikto-ne-hochet-davat.html
Платформа: кроссплатформа/Flutter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1💩1
AgentRunKit - SDK для создания агентов
AgentRunKit - Swift 6 SDK, предназначенный для создания агентов на основе LLM с типобезопасным вызовом инструментов.
Фичи:
• Циклы работы агентов с настраиваемыми ограничениями по количеству итераций и бюджетами токенов
• Потоковая передача данных с использованием
• Типобезопасные инструменты с проверкой JSON-схемы на этапе компиляции
• Композиция суб-агентов с контролем глубины и распространением потоковой передачи
• Управление контекстом: автоматическое сжатие, очистка, бюджеты токенов
• Структурированный вывод с ограничениями JSON-схемы
• Мультимодальный ввод: изображения, аудио, видео, PDF
• Преобразование текста в речь с одновременным разбиением на фрагменты и конкатенацией MP3
• Клиент MCP: передача stdio, обнаружение инструментов, JSON-RPC
• Поддержка расширенной модели мышления/рассуждения
AgentRunKit на GitHub: https://github.com/Tom-Ryder/AgentRunKit
Платформа: iOS
⭐️: 18
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
AgentRunKit - Swift 6 SDK, предназначенный для создания агентов на основе LLM с типобезопасным вызовом инструментов.
Фичи:
• Циклы работы агентов с настраиваемыми ограничениями по количеству итераций и бюджетами токенов
• Потоковая передача данных с использованием
AsyncThrowingStream и обертки SwiftUI с аннотацией @Observable• Типобезопасные инструменты с проверкой JSON-схемы на этапе компиляции
• Композиция суб-агентов с контролем глубины и распространением потоковой передачи
• Управление контекстом: автоматическое сжатие, очистка, бюджеты токенов
• Структурированный вывод с ограничениями JSON-схемы
• Мультимодальный ввод: изображения, аудио, видео, PDF
• Преобразование текста в речь с одновременным разбиением на фрагменты и конкатенацией MP3
• Клиент MCP: передача stdio, обнаружение инструментов, JSON-RPC
• Поддержка расширенной модели мышления/рассуждения
AgentRunKit на GitHub: https://github.com/Tom-Ryder/AgentRunKit
Платформа: iOS
⭐️: 18
Please open Telegram to view this post
VIEW IN TELEGRAM
Динамические product flavors в Android: когда статической конфигурации уже мало
Рано или поздно каждый Android‑разработчик сталкивается с задачей «одно приложение — много сборок»: white‑label‑решения, региональные версии, отдельные сборки для разных магазинов приложений, демо для клиентов, внутренние окружения.
Встроенный механизм product flavors в Android Gradle Plugin отлично справляется со своей задачей — пока количество вариантов умещается в голове и в паре экранов build.gradle.kts.
Когда же flavors становится много и каждый отличается не только applicationId, но и набором фич, ключами аналитики и доступностью в конкретном магазине, поддерживать всё это руками уже невозможно.
В этой статье разбирается подход, при котором конфигурация flavors строится динамически: список вариантов и их параметры живут вне build.gradle.kts.
Статья: https://habr.com/ru/articles/1027280/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Рано или поздно каждый Android‑разработчик сталкивается с задачей «одно приложение — много сборок»: white‑label‑решения, региональные версии, отдельные сборки для разных магазинов приложений, демо для клиентов, внутренние окружения.
Встроенный механизм product flavors в Android Gradle Plugin отлично справляется со своей задачей — пока количество вариантов умещается в голове и в паре экранов build.gradle.kts.
Когда же flavors становится много и каждый отличается не только applicationId, но и набором фич, ключами аналитики и доступностью в конкретном магазине, поддерживать всё это руками уже невозможно.
В этой статье разбирается подход, при котором конфигурация flavors строится динамически: список вариантов и их параметры живут вне build.gradle.kts.
Статья: https://habr.com/ru/articles/1027280/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Декларативные адаптивные макеты: использование метаданных Nav3 для многопанельного пользовательского интерфейса
В мире Android-разработки «адаптивная вёрстка» (Adaptive Layout) перестала быть роскошью — теперь это необходимость. С появлением складных устройств и девайсов с большими экранами приложениям уже недостаточно просто растягиваться — им нужно перестраивать свою структуру UI.
Традиционно реализация сценариев вроде List-Detail или Supporting Pane требовала большого количества бойлерплейта: проверки классов window size, ручное управление back stack и обработка условной логики интерфейса. Nav3 — современный подход к навигации от Google — предлагает новый способ моделирования адаптивного UI через метаданные навигации.
Статья: https://apptractor.ru/info/articles/nav3.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В мире Android-разработки «адаптивная вёрстка» (Adaptive Layout) перестала быть роскошью — теперь это необходимость. С появлением складных устройств и девайсов с большими экранами приложениям уже недостаточно просто растягиваться — им нужно перестраивать свою структуру UI.
Традиционно реализация сценариев вроде List-Detail или Supporting Pane требовала большого количества бойлерплейта: проверки классов window size, ручное управление back stack и обработка условной логики интерфейса. Nav3 — современный подход к навигации от Google — предлагает новый способ моделирования адаптивного UI через метаданные навигации.
Статья: https://apptractor.ru/info/articles/nav3.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
ConsultMe - шаблон Compose-проекта со Spotless, Detect и Lint
ConsultMe — это шаблонный проект для приложений на Jetpack Compose, включающий интегрированные инструменты для проверки качества кода и автоматизации. Он включает в себя:
• Spotless: автоматическое форматирование и линтинг кода
• Detekt: статический анализ кода
• Lint: линтинг кода Kotlin и Compose
Особенности
• Полностью настроен для Jetpack Compose и многомодульной архитектуры
• Включены и предварительно настроены инструменты проверки качества кода
• 100% кодовая база на Kotlin с использованием корутин и Flow
• Внедрение зависимостей с помощью Hilt
ConsultMe на GitHub: https://github.com/Tarek-Bohdima/ConsultMe
Платформа: Android
⭐️: 20
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
ConsultMe — это шаблонный проект для приложений на Jetpack Compose, включающий интегрированные инструменты для проверки качества кода и автоматизации. Он включает в себя:
• Spotless: автоматическое форматирование и линтинг кода
• Detekt: статический анализ кода
• Lint: линтинг кода Kotlin и Compose
Особенности
• Полностью настроен для Jetpack Compose и многомодульной архитектуры
• Включены и предварительно настроены инструменты проверки качества кода
• 100% кодовая база на Kotlin с использованием корутин и Flow
• Внедрение зависимостей с помощью Hilt
ConsultMe на GitHub: https://github.com/Tarek-Bohdima/ConsultMe
Платформа: Android
⭐️: 20
Please open Telegram to view this post
VIEW IN TELEGRAM
Практики Swift, которые помогут вам выглядеть Senior разработчиком
В этой статье мы обсудим, как писать код на Swift, который будет выглядеть так, как будто его написал опытный Senior разработчик.
1. Отдавайте предпочтение value-типам вместо reference-типов
2. Грамотно работайте с Optional
3. Используйте расширения, чтобы поддерживать чистоту кода
4. Отдавайте предпочтение let вместо var
5. Документируйте код
6. Делайте функции короткими и сфокусированными
7. Пишите декларативный код
8. Заменяйте цепочки if на switch
Статья: https://apptractor.ru/info/articles/praktiki-swift-kotorye-pomogut-vam-vyglyadet-senior-razrabotchikom.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В этой статье мы обсудим, как писать код на Swift, который будет выглядеть так, как будто его написал опытный Senior разработчик.
1. Отдавайте предпочтение value-типам вместо reference-типов
2. Грамотно работайте с Optional
3. Используйте расширения, чтобы поддерживать чистоту кода
4. Отдавайте предпочтение let вместо var
5. Документируйте код
6. Делайте функции короткими и сфокусированными
7. Пишите декларативный код
8. Заменяйте цепочки if на switch
Статья: https://apptractor.ru/info/articles/praktiki-swift-kotorye-pomogut-vam-vyglyadet-senior-razrabotchikom.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
ScanNow - быстрый и простой сканер для iOS
ScanNow - быстрое и простое приложение для сканирования документов на iOS.
Фичи:
• Быстро и легко сканируйте документы
• Настраивайте параметры сканирования по мере необходимости, включая имя файла и формат отправляемого документа
• Отправляйте отсканированные документы в любое удобное для вас место
ScanNow на GitHub: https://github.com/WezSieTato/ScanNow
Платформа: iOS
⭐️: 60
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
ScanNow - быстрое и простое приложение для сканирования документов на iOS.
Фичи:
• Быстро и легко сканируйте документы
• Настраивайте параметры сканирования по мере необходимости, включая имя файла и формат отправляемого документа
• Отправляйте отсканированные документы в любое удобное для вас место
ScanNow на GitHub: https://github.com/WezSieTato/ScanNow
Платформа: iOS
⭐️: 60
Please open Telegram to view this post
VIEW IN TELEGRAM
Подсветка синтаксиса на Android — интеграция движка Shiki в Compose
Однажды на выходных я задумался, как бы выглядела подсветка синтаксиса в Jetpack Compose, если бы я создал её с нуля сегодня — без
Это любопытство привело меня к исследованию Shiki, ограничений WebAssembly, Cloudflare Workers, к созданию небольшого микросервиса и, в конечном итоге, ко второму подходу с использованием грамматик TextMate, работающих полностью на устройстве. Вот как в итоге заработали оба варианта.
Статья: https://apptractor.ru/info/articles/podsvetka-sintaksisa-na-android-integratsiya-dvizhka-shiki-v-compose.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Однажды на выходных я задумался, как бы выглядела подсветка синтаксиса в Jetpack Compose, если бы я создал её с нуля сегодня — без
WebView, без HTML-шаблонов. В 2020 году я использовал подход WebView + PrismJS/highlight.js, и он работал, но всегда казалось немного неудобным встраивать браузерный движок только для отображения цветного текста. Теперь, когда Compose стал стандартом для создания пользовательского интерфейса, мне хотелось чего-то, что органично вписывалось бы в общую концепцию.Это любопытство привело меня к исследованию Shiki, ограничений WebAssembly, Cloudflare Workers, к созданию небольшого микросервиса и, в конечном итоге, ко второму подходу с использованием грамматик TextMate, работающих полностью на устройстве. Вот как в итоге заработали оба варианта.
Статья: https://apptractor.ru/info/articles/podsvetka-sintaksisa-na-android-integratsiya-dvizhka-shiki-v-compose.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
ParticleEmitter - эффекты частиц для Android на базе Jetpack Compose
ParticleEmitter - библиотека рендеринга частиц Jetpack Compose для Android. Создавайте красивые анимации частиц на основе физических принципов с помощью двух подходов, оптимизированных для различных сценариев использования.
Фичи:
• два движка рендеринга:
• физическая симуляция: направленная гравитация, силы, угол, вращение
• настраиваемая гравитация: можно управлять силой и направлением, чтобы создавать эффекты падающего конфетти, дождя, всплывающих пузырей, ветра и т.д.
• гибкие формы частиц: круги, изображения с tint’ом, текст, кастомные path’ы
• поведение на границах: частицы могут отскакивать, прилипать или «зацикливаться» при достижении границ экрана
• режимы смешивания (blend modes): additive, screen и другие эффекты для свечения частиц
• оркестрация нескольких эмиттеров: последовательный или параллельный запуск через MultiEmitter
• формы источников эмиссии: точка, овал, прямоугольник, вертикальные/горизонтальные линии
ParticleEmitter на GitHub: https://github.com/PiotrPrus/ParticleEmitter
Платформа: Android
⭐️: 51
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
ParticleEmitter - библиотека рендеринга частиц Jetpack Compose для Android. Создавайте красивые анимации частиц на основе физических принципов с помощью двух подходов, оптимизированных для различных сценариев использования.
Фичи:
• два движка рендеринга:
ParticlesEmitter — основан на layout-системе Jetpack Compose, поддерживает кастомные частицы через @Composable (текст, изображения, фигуры); CanvasParticleEmitter — рендеринг через Canvas, высокая производительность (1000+ частиц)• физическая симуляция: направленная гравитация, силы, угол, вращение
• настраиваемая гравитация: можно управлять силой и направлением, чтобы создавать эффекты падающего конфетти, дождя, всплывающих пузырей, ветра и т.д.
• гибкие формы частиц: круги, изображения с tint’ом, текст, кастомные path’ы
• поведение на границах: частицы могут отскакивать, прилипать или «зацикливаться» при достижении границ экрана
• режимы смешивания (blend modes): additive, screen и другие эффекты для свечения частиц
• оркестрация нескольких эмиттеров: последовательный или параллельный запуск через MultiEmitter
• формы источников эмиссии: точка, овал, прямоугольник, вертикальные/горизонтальные линии
ParticleEmitter на GitHub: https://github.com/PiotrPrus/ParticleEmitter
Платформа: Android
⭐️: 51
Please open Telegram to view this post
VIEW IN TELEGRAM
Xcode Simulator — Ускоряем прогон тестов на CI + Fastlane
Речь пойдет про наш любимый fastlane, если вы являетесь специалистом по Maraphon или Emcee, то, возможно, мои советы для вас окажутся больше вредными / нелепыми / и порой даже забывными - не обессудьте.
Статья: https://habr.com/ru/articles/1030150/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Речь пойдет про наш любимый fastlane, если вы являетесь специалистом по Maraphon или Emcee, то, возможно, мои советы для вас окажутся больше вредными / нелепыми / и порой даже забывными - не обессудьте.
Статья: https://habr.com/ru/articles/1030150/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему я написал Paginator вместо Paging 3
Это статья от автора библиотеки, поэтому нейтральным разбор не будет. Но это и не рассказ про конкретный проект — а разбор задач, на которых, на мой взгляд, Paging 3 начинает буксовать, и того, как Paginator устроен, чтобы эти задачи закрывать. KMP-библиотека пагинации для Android, iOS, JVM и Desktop. Ниже — почему она появилась именно как отдельная библиотека, а не как fork или обёртка над Paging 3.
Статья: https://habr.com/ru/articles/1030294/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Это статья от автора библиотеки, поэтому нейтральным разбор не будет. Но это и не рассказ про конкретный проект — а разбор задач, на которых, на мой взгляд, Paging 3 начинает буксовать, и того, как Paginator устроен, чтобы эти задачи закрывать. KMP-библиотека пагинации для Android, iOS, JVM и Desktop. Ниже — почему она появилась именно как отдельная библиотека, а не как fork или обёртка над Paging 3.
Статья: https://habr.com/ru/articles/1030294/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM