Понимаем «буфер с разрывом» в Jetpack Compose: 60-летний алгоритм, лежащий в основе современного UI
Представьте, что тот же алгоритмический трюк, который обеспечивал быстродействие текстовых редакторов в 1960-х, скрытно делает ваши современные Android-приложения плавными сегодня. Звучит дико? Но это правда!
Jetpack Compose, современный инструментарий Google для разработки пользовательского интерфейса для Android, использует проверенную временем концепцию Gap Buffer («буфер с разрывом» или «разрывной буфер» или «буфер с промежутком») для молниеносного обновления пользовательского интерфейса. Давайте разберём это так понятно, чтобы даже пятилетний ребёнок понял.
Статья: https://apptractor.ru/info/articles/gap-buffer.html
Платформа: Android
Представьте, что тот же алгоритмический трюк, который обеспечивал быстродействие текстовых редакторов в 1960-х, скрытно делает ваши современные Android-приложения плавными сегодня. Звучит дико? Но это правда!
Jetpack Compose, современный инструментарий Google для разработки пользовательского интерфейса для Android, использует проверенную временем концепцию Gap Buffer («буфер с разрывом» или «разрывной буфер» или «буфер с промежутком») для молниеносного обновления пользовательского интерфейса. Давайте разберём это так понятно, чтобы даже пятилетний ребёнок понял.
Статья: https://apptractor.ru/info/articles/gap-buffer.html
Платформа: Android
❤1
Dayflow - таймлайн вашего дня за компьютером
Dayflow — это нативное приложение для macOS (SwiftUI), которое записывает данные с экрана с частотой 1 кадр/с, анализирует их каждые 15 минут с помощью ИИ и формирует временную шкалу ваших действий с отчётами. Оно лёгкое (размер приложения — 25 МБ), использует около 100 МБ оперативной памяти и менее 1% загрузки процессора.
Dayflow по умолчанию означает владение и конфиденциальность. Вы контролируете данные, выбираете поставщика ИИ и можете хранить всё локально, если вам это удобно. Приложение лицензировано MIT и имеет полностью открытый исходный код, поскольку всё, что смотрит на ваш экран весь день, должно быть абсолютно прозрачно о том, что оно делает с этой информацией. Приложение должно ощущаться как тихий помощник: уважать ваше внимание, честно сообщать о том, что оно фиксирует, и легко отключаться.
Функции:
• Автоматическая хронология вашего дня с краткими сводками
• Запись с частотой 1 кадр/с — минимальное воздействие на процессор и хранилище
• 15-минутные интервалы анализа для своевременных обновлений
• Смотрите таймлапсы вашего дня
• Автоматическая очистка хранилища — удаляет старые записи через 3 дня
• Выделение отвлекающих моментов, чтобы видеть, что отвлекало вас от задачи
• Нативный пользовательский интерфейс, созданный на SwiftUI
• Автоматические обновления с помощью Sparkle (ежедневная проверка + фоновая загрузка)
Dayflow на GitHub: https://github.com/JerryZLiu/Dayflow
Платформа: macOS
⭐️: 4.5K
Dayflow — это нативное приложение для macOS (SwiftUI), которое записывает данные с экрана с частотой 1 кадр/с, анализирует их каждые 15 минут с помощью ИИ и формирует временную шкалу ваших действий с отчётами. Оно лёгкое (размер приложения — 25 МБ), использует около 100 МБ оперативной памяти и менее 1% загрузки процессора.
Dayflow по умолчанию означает владение и конфиденциальность. Вы контролируете данные, выбираете поставщика ИИ и можете хранить всё локально, если вам это удобно. Приложение лицензировано MIT и имеет полностью открытый исходный код, поскольку всё, что смотрит на ваш экран весь день, должно быть абсолютно прозрачно о том, что оно делает с этой информацией. Приложение должно ощущаться как тихий помощник: уважать ваше внимание, честно сообщать о том, что оно фиксирует, и легко отключаться.
Функции:
• Автоматическая хронология вашего дня с краткими сводками
• Запись с частотой 1 кадр/с — минимальное воздействие на процессор и хранилище
• 15-минутные интервалы анализа для своевременных обновлений
• Смотрите таймлапсы вашего дня
• Автоматическая очистка хранилища — удаляет старые записи через 3 дня
• Выделение отвлекающих моментов, чтобы видеть, что отвлекало вас от задачи
• Нативный пользовательский интерфейс, созданный на SwiftUI
• Автоматические обновления с помощью Sparkle (ежедневная проверка + фоновая загрузка)
Dayflow на GitHub: https://github.com/JerryZLiu/Dayflow
Платформа: macOS
⭐️: 4.5K
👍1
SwiftUI-Adapter: поддерживаем новые модификаторы SwiftUI на старых версиях iOS
Сегодня хочу представить вам свою библиотеку - SwiftUI-Adapter, которая избавит вас от головной боли при работе с новыми модификаторами SwiftUI. Недавно я наткнулся на удобную Android-библиотеку, которая упрощает работу с разными версиями API и подумал: «Почему бы не сделать что-то подобное для SwiftUI?». После этого родилась идея разработать инструмент, который избавит вас от бесконечных проверок available и сделает код чище.
Статья: https://habr.com/ru/articles/965732/
Платформа: iOS
Сегодня хочу представить вам свою библиотеку - SwiftUI-Adapter, которая избавит вас от головной боли при работе с новыми модификаторами SwiftUI. Недавно я наткнулся на удобную Android-библиотеку, которая упрощает работу с разными версиями API и подумал: «Почему бы не сделать что-то подобное для SwiftUI?». После этого родилась идея разработать инструмент, который избавит вас от бесконечных проверок available и сделает код чище.
Статья: https://habr.com/ru/articles/965732/
Платформа: iOS
👍1
Я нашел причину №1 фризов в вашем приложении, и вот доказательства
Многие люди спрашивают меня, почему я ненавижу SharedPreferences, а на моей работе некоторые даже спорят со мной, что SharedPreferences - это хорошая штука и что они вообще не приводят ни к каким проблемам. Но из моего шестилетнего опыта разработки и более чем 15 проектов я знаю, что SharedPreferences буквально являются причиной номер один ANR во многих популярных приложениях и сторонних фреймворках.
У вас всегда будут ANR из-за них, что бы вы ни делали (нет, edit не помогает!). И в этом посте я раскрою, почему вы должны убрать SharedPreferences из вашего проекта как можно скорее.
Статья: https://nek12.dev/blog/ru/why-sharedpreferences-cause-anrs-in-android-apps
Платформа: Android
Многие люди спрашивают меня, почему я ненавижу SharedPreferences, а на моей работе некоторые даже спорят со мной, что SharedPreferences - это хорошая штука и что они вообще не приводят ни к каким проблемам. Но из моего шестилетнего опыта разработки и более чем 15 проектов я знаю, что SharedPreferences буквально являются причиной номер один ANR во многих популярных приложениях и сторонних фреймворках.
У вас всегда будут ANR из-за них, что бы вы ни делали (нет, edit не помогает!). И в этом посте я раскрою, почему вы должны убрать SharedPreferences из вашего проекта как можно скорее.
Статья: https://nek12.dev/blog/ru/why-sharedpreferences-cause-anrs-in-android-apps
Платформа: Android
nek12.dev
Я нашел причину №1 фризов в вашем приложении, и вот доказательства | nek12.dev
SharedPreferences в Android приводят к ANR через скрытый механизм, о котором Google пытался вам соврать. Я полностью разоблачаю их с доказательствами.
🤡2❤1🤔1
Флаги функций в Swift
Почти в каждом проекте, над которым я работаю, есть как минимум три конфигурации сборки: Debug, TestFlight и App Store. Эти конфигурации различаются не только настройками сборки, но и функциональностью. В этой статье мы узнаем, как реализовать флаги функций (фичефлаги) в Swift, которые позволяют включать и отключать определённые функции при определённых условиях.
Статья: https://apptractor.ru/info/articles/flagi-funktsiy-v-swift.html
Платформа: iOS
Почти в каждом проекте, над которым я работаю, есть как минимум три конфигурации сборки: Debug, TestFlight и App Store. Эти конфигурации различаются не только настройками сборки, но и функциональностью. В этой статье мы узнаем, как реализовать флаги функций (фичефлаги) в Swift, которые позволяют включать и отключать определённые функции при определённых условиях.
Статья: https://apptractor.ru/info/articles/flagi-funktsiy-v-swift.html
Платформа: iOS
❤2
QmBlurView - эффекты размытия
QmBlurView — это библиотека, предлагающая различные эффекты размытия для UI компонентов Android.
Фичи: всего есть 7 разных блюров, минимальная версия Android 5.0, быстрая работа, механизм автоматической очистки, предотвращающий утечки памяти.
QmBlurView на GitHub: https://github.com/QmDeve/QmBlurView
Платформа: Android
⭐️: 73
QmBlurView — это библиотека, предлагающая различные эффекты размытия для UI компонентов Android.
Фичи: всего есть 7 разных блюров, минимальная версия Android 5.0, быстрая работа, механизм автоматической очистки, предотвращающий утечки памяти.
QmBlurView на GitHub: https://github.com/QmDeve/QmBlurView
Платформа: Android
⭐️: 73
👍1
Flutter — везде (и даже в чайнике). Часть 1
В этой статье хочу продолжить рассказывать о фреймворке: какие платформы он поддерживает, в чем его преимущества (и как сделать прошивку своего чайника).
Статья: https://habr.com/ru/companies/friflex/articles/966152/
Платформа: кроссплатформа
В этой статье хочу продолжить рассказывать о фреймворке: какие платформы он поддерживает, в чем его преимущества (и как сделать прошивку своего чайника).
Статья: https://habr.com/ru/companies/friflex/articles/966152/
Платформа: кроссплатформа
👍1
Как на Хабре каждый раз хоронят Flutter
Представьте, что вы Flutter-разработчик. Вы заходите на Хабр. В комменты статьи про Flutter. И там опять: «Flutter уже не развивается давно, нет 3д», «Dart — зачем нужен этот новый странный язык», «Google закроет проект, там в Индии всех разрабов уволили, они уже на кладбище». И это каждый. Божий. День.
Вот что интересно: пока на Хабре хоронят Flutter, 30% всех новых iOS-приложений пишутся на нём. BMW делает на Flutter приложение для своих машин. Google Pay работает на Flutter. Credit Agricole Bank переписал на него банковский апп на миллион пользователей — и поднялся с 10-го на 3-е место в рейтинге. Но на Хабре Flutter, конечно, мёртв. Как и в прошлом году. И позапрошлом.
Статья: https://habr.com/ru/articles/965848/
Платформа: кроссплатформа
Представьте, что вы Flutter-разработчик. Вы заходите на Хабр. В комменты статьи про Flutter. И там опять: «Flutter уже не развивается давно, нет 3д», «Dart — зачем нужен этот новый странный язык», «Google закроет проект, там в Индии всех разрабов уволили, они уже на кладбище». И это каждый. Божий. День.
Вот что интересно: пока на Хабре хоронят Flutter, 30% всех новых iOS-приложений пишутся на нём. BMW делает на Flutter приложение для своих машин. Google Pay работает на Flutter. Credit Agricole Bank переписал на него банковский апп на миллион пользователей — и поднялся с 10-го на 3-е место в рейтинге. Но на Хабре Flutter, конечно, мёртв. Как и в прошлом году. И позапрошлом.
Статья: https://habr.com/ru/articles/965848/
Платформа: кроссплатформа
😁2💩1
•
(iOS En) Location OnBoarding Animation Using SwiftUI•
(iOS En) Please stop making this Swift mistake•
(iOS En) Using SwiftUI Foundation Models Trannoscripts to build a Chatbot•
(iOS En) Monetizing Apps With SwiftUI - Tip Jar•
(iOS En) Android developer verification walkthrough•
(And En) Now in Android: 122 – Android Studio updates, Android 16 beta feature, and more•
(And En) Building Androidify: an AI-powered Android experience•
(And En) More customization in Material 3: the path to expressive apps•
(And En) Building adaptive apps for Android•
(And En) Building intelligent Android apps with Gemini•
(And En) What's new in Android Studio's AI Agent•
(And En) Building for TV and cars with Compose•
(And En) All Types of Sliders In Material3 Expressive Explained•
(And En) The 5 Coolest Android Studio Hacks In 5 Minutes•
(And En) Gradle Tutorial: Task Types (for Build Engineers)•
(And En) Gradle Tutorial: Build Lifecycle (for Build Engineers)•
(Crs Ru) Как закалялся код — история большой оптимизации•
(Crs Ru) Flutter везде, и даже в чайнике•
(Crs Ru) WhiteLabel App на Flutter. Один код — тысяча лиц•
(Crs Ru) Как Flutter преобразует графический слой микроядерной ОС•
(Crs Ru) Многомодульность на Flutter. Переезжаем с монолита•
(Crs Ru) Перевод OpenHarmony на статический язык и рантайм•
(Crs En) Liquid Glass effect is now available in Compose Multiplatform•
(Dev Ru) Калибровки в бигтехе: как оценивать сотрудников•
(Dev Ru) Надя Зуева — стартап в Дубае, AI в моде, инвестиции и жизнь фаундера•
(Dev Ru) IT рынок перегрет. Удаленка vs Работа в офисе. Сколько стоит содержать офис?•
(Dev En) Discrete Mathematics Course for BeginnersПрошлогодние видео:
•
(Dev Ru) Как начинающему программисту получить первый оффер•
(Dev Ru) Релокация в США, часть 1: Безопасность, оружие, визы и медицина•
(Dev Ru) А/В-тесты на коленкеPlease open Telegram to view this post
VIEW IN TELEGRAM
👍1
Как ускорить WebView в Android и доказать это цифрами
Мы перестали на глазок гадать, быстро ли грузится WebView.
Теперь у нас есть:
•
•
•
•
А главное — у нас появились цифры, которые показывают, что WebView-пререндер — это не костыль, а вложение в UX и, как следствие, в бизнес.
Статья: https://habr.com/ru/articles/965866/
Платформа: Android
AppFiles: код, инструменты, практики, производительность
Мы перестали на глазок гадать, быстро ли грузится WebView.
Теперь у нас есть:
•
WebViewPreloader — чтобы подогреть WebView заранее;•
WebViewReadyDetector — чтобы честно понимать момент отображения контента;•
CoreComposeWebView — чтобы экраны не думали про всё это вообще;•
TIME_TO_VISUAL_READY_MS — одна цифра, которой можно объяснить и разработчику, и аналитику, и продакту, что именно мы улучшили.А главное — у нас появились цифры, которые показывают, что WebView-пререндер — это не костыль, а вложение в UX и, как следствие, в бизнес.
Статья: https://habr.com/ru/articles/965866/
Платформа: Android
AppFiles: код, инструменты, практики, производительность
❤1👌1
Rust в Android: двигайтесь быстро и исправляйте вещи
Google публикует отчёт, что благодаря внедрению языка Rust в платформу Android система стала не только безопаснее, но и разработка ускорилась. В 2025-м доля уязвимостей, связанных с безопасностью памяти, впервые опустилась ниже 20% от общего количества.
• Rust-код показывает примерно 1000× меньшую плотность уязвимостей безопасности памяти по сравнению с кодом на C/C++
• Время на code review для Rust-изменений — приблизительно на 25% меньше, чем для C++
• Частота откатов для Rust — примерно в 4 раза ниже, чем для C++ при средних и больших изменениях
• Rust активно внедряется не только в ядро Android, но и в драйверы ядра, прошивки, а также в приложения Google
Если вы занимаетесь мобильной разработкой на Android, особенно на уровне нативных компонентов, драйверов или системных библиотек, — сейчас отличное время обратить внимание на Rust. Он даёт выигрыш в безопасности и скорости разработки, а не просто дополнительную нагрузку. Даже если ваша зона ответственности — только Java/Kotlin-слой, всё равно полезно понимать, что нижний стек платформы активно эволюционирует.
Статья: https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html
Платформа: Android
AppFiles: код, инструменты, практики, производительность
Google публикует отчёт, что благодаря внедрению языка Rust в платформу Android система стала не только безопаснее, но и разработка ускорилась. В 2025-м доля уязвимостей, связанных с безопасностью памяти, впервые опустилась ниже 20% от общего количества.
• Rust-код показывает примерно 1000× меньшую плотность уязвимостей безопасности памяти по сравнению с кодом на C/C++
• Время на code review для Rust-изменений — приблизительно на 25% меньше, чем для C++
• Частота откатов для Rust — примерно в 4 раза ниже, чем для C++ при средних и больших изменениях
• Rust активно внедряется не только в ядро Android, но и в драйверы ядра, прошивки, а также в приложения Google
Если вы занимаетесь мобильной разработкой на Android, особенно на уровне нативных компонентов, драйверов или системных библиотек, — сейчас отличное время обратить внимание на Rust. Он даёт выигрыш в безопасности и скорости разработки, а не просто дополнительную нагрузку. Даже если ваша зона ответственности — только Java/Kotlin-слой, всё равно полезно понимать, что нижний стек платформы активно эволюционирует.
Статья: https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html
Платформа: Android
AppFiles: код, инструменты, практики, производительность
🔥1🤡1
LibrePods - все функции AirPods на Android
LibrePods открывает эксклюзивные функции AirPods от Apple на устройствах сторонних производителей. Получите доступ к режимам шумоподавления, адаптивной прозрачности, обнаружению ушей, слуховому аппарату, настраиваемому режиму прозрачности, состоянию аккумулятора и многому другому — всем премиум-функциям, за которые вы заплатили, но которые Apple ограничивла своей экосистемой.
В настоящее время для использования LibrePods на Android необходимо устройство с root-доступом и Xposed. Это связано с ошибкой в Bluetooth-стеке Android.
LibrePods на GitHub: https://github.com/kavishdevar/librepods
Платформа: Android
⭐️: 3.2K
AppFiles: код, инструменты, практики, производительность
LibrePods открывает эксклюзивные функции AirPods от Apple на устройствах сторонних производителей. Получите доступ к режимам шумоподавления, адаптивной прозрачности, обнаружению ушей, слуховому аппарату, настраиваемому режиму прозрачности, состоянию аккумулятора и многому другому — всем премиум-функциям, за которые вы заплатили, но которые Apple ограничивла своей экосистемой.
В настоящее время для использования LibrePods на Android необходимо устройство с root-доступом и Xposed. Это связано с ошибкой в Bluetooth-стеке Android.
LibrePods на GitHub: https://github.com/kavishdevar/librepods
Платформа: Android
⭐️: 3.2K
AppFiles: код, инструменты, практики, производительность
👍2
Как не сойти с ума с Grafana Unified Alerting: настраиваем алерт и разбираем все грабли
Если вы только начинаете разбираться с Unified Alerting — надеюсь, эта статья сэкономит вам несколько часов жизни, пару бессмысленных “почему Slack пустой?” и одну-две нервные клетки.
Статья: https://habr.com/ru/articles/966902/
Платформа: Android
AppFiles: код, инструменты, практики, производительность
Если вы только начинаете разбираться с Unified Alerting — надеюсь, эта статья сэкономит вам несколько часов жизни, пару бессмысленных “почему Slack пустой?” и одну-две нервные клетки.
Статья: https://habr.com/ru/articles/966902/
Платформа: Android
AppFiles: код, инструменты, практики, производительность
❤1
Два года с Duit — история взросления фреймворка
Если кратко — за год проект "перерос сам себя". Фреймворк стал более архитектурно чистым, гибким и устойчивым. Он стал более стройным и простым на первый взгляд и на порядок более сложным "под капотом".
В обиход разработки вошло много новых подходов: выработаны принципы тестирования проекта и обеспечения его качества, опробованы в "боевых" условиях AI-инструменты для кодинга и "разбавления одиночества" (я так называю AI-ревьюеры). А также свой вклад в проект внесло два человека!
Это был длинный, тяжелый, но невероятно интересный год. Давайте посмотрим на него вместе!
Статья: https://habr.com/ru/articles/963884/
Платформа: кроссплатформа/Flutter
AppFiles: код, инструменты, практики, производительность
Если кратко — за год проект "перерос сам себя". Фреймворк стал более архитектурно чистым, гибким и устойчивым. Он стал более стройным и простым на первый взгляд и на порядок более сложным "под капотом".
В обиход разработки вошло много новых подходов: выработаны принципы тестирования проекта и обеспечения его качества, опробованы в "боевых" условиях AI-инструменты для кодинга и "разбавления одиночества" (я так называю AI-ревьюеры). А также свой вклад в проект внесло два человека!
Это был длинный, тяжелый, но невероятно интересный год. Давайте посмотрим на него вместе!
Статья: https://habr.com/ru/articles/963884/
Платформа: кроссплатформа/Flutter
AppFiles: код, инструменты, практики, производительность
👍1
XcodeProjectCLI - управление проектами Xcode из командной строки
XcodeProjectCLI - быстрый и лёгкий CLI инструмент для управления проектами Xcode, полностью написанный на Swift. Легко интегрируйте его в свой рабочий процесс разработки или автоматизируйте сложные задачи рефакторинга всего несколькими командами.
XcodeProjectCLI на GitHub: https://github.com/wojciech-kulik/XcodeProjectCLI
Платформа: iOS
⭐️: 91
AppFiles: код, инструменты, практики, производительность
XcodeProjectCLI - быстрый и лёгкий CLI инструмент для управления проектами Xcode, полностью написанный на Swift. Легко интегрируйте его в свой рабочий процесс разработки или автоматизируйте сложные задачи рефакторинга всего несколькими командами.
OVERVIEW: XcodeProjectCLI
USAGE: xcp <subcommand>
OPTIONS:
--version Show the version.
-h, --help Show help information.
TARGET SUBCOMMANDS:
list-targets List project targets.
set-target Set target for existing file.
GROUP SUBCOMMANDS:
add-group Add group.
delete-group Delete group.
move-group Move group.
rename-group Rename group.
FILE SUBCOMMANDS:
add-file Add file to specified targets.
delete-file Delete file.
move-file Move file.
rename-file Rename file.
BUILD SETTINGS SUBCOMMANDS:
get-build-setting Get build setting.
set-build-setting Set build setting.
ASSETS SUBCOMMANDS:
add-image-asset Add image asset.
add-data-asset Add data asset.
add-color-asset Add color asset.
list-assets List all assets.
move-asset Move asset.
delete-asset Delete asset.
See 'xcp help <subcommand>' for detailed help.
XcodeProjectCLI на GitHub: https://github.com/wojciech-kulik/XcodeProjectCLI
Платформа: iOS
⭐️: 91
AppFiles: код, инструменты, практики, производительность
👍1
Вопрос с собеседования, на котором сыпятся 90% iOS-разработчиков (даже Senior-ы)
Вот классическая версия вопроса на собеседовании:
Интервьюер спрашивает: «Почему MyViewController может никогда не быть деалоцирован?»
В этот момент 90% кандидатов отвечают:
«Вам следует использовать
Неверно.
Не потому, что этот ответ неверный, а потому, что он неполный. Этот вопрос не о том, как исправить. Он о том, как обосновать свой ответ.
Статья: https://apptractor.ru/info/articles/vopros-s-sobesedovaniya-na-kotorom-sypyatsya-90-ios-razrabotchikov-dazhe-senior-y.html
Платформа: iOS/Swift
AppFiles: код, инструменты, практики, производительность
Вот классическая версия вопроса на собеседовании:
class MyViewController: UIViewController {
var completion: (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
completion = {
self.doSomething()
}
}
func doSomething() {
print("Doing something")
}
deinit {
print("MyViewController deinitialized")
}
}Интервьюер спрашивает: «Почему MyViewController может никогда не быть деалоцирован?»
В этот момент 90% кандидатов отвечают:
«Вам следует использовать
weak self».Неверно.
Не потому, что этот ответ неверный, а потому, что он неполный. Этот вопрос не о том, как исправить. Он о том, как обосновать свой ответ.
Статья: https://apptractor.ru/info/articles/vopros-s-sobesedovaniya-na-kotorom-sypyatsya-90-ios-razrabotchikov-dazhe-senior-y.html
Платформа: iOS/Swift
AppFiles: код, инструменты, практики, производительность
👍1
Grocery Genius - список покупок для Android
Grocery Genius — бесплатное, настраиваемое приложение для составления списков покупок с современным дизайном, функциями автозаполнения, возможностью работы офлайн и богатым функционалом.
Технологический стек:
• Jetpack Compose для пользовательского интерфейса с одним Activity и без фрагментов
• База данных Room для локального хранения данных
• Retrofit для работы с REST API
• Preferences DataStore для хранения простых данных в формате «ключ-значение»
• Корутины и потоки Kotlin для асинхронных запросов
• Work Manager для синхронизации данных в фоновом режиме
• Moshi для декодирования JSON-файлов в объекты Kotlin
• Coil для производительной загрузки изображений из файлов
• RecyclerView для списков с функцией перетаскивания
• Шаблон MVI
• Архитектура CLEAN с уровнем данных и представления
Grocery Genius на GitHub: https://github.com/DanielRendox/GroceryGenius
Платформа: Android
⭐️: 122
AppFiles: код, инструменты, практики, производительность
Grocery Genius — бесплатное, настраиваемое приложение для составления списков покупок с современным дизайном, функциями автозаполнения, возможностью работы офлайн и богатым функционалом.
Технологический стек:
• Jetpack Compose для пользовательского интерфейса с одним Activity и без фрагментов
• База данных Room для локального хранения данных
• Retrofit для работы с REST API
• Preferences DataStore для хранения простых данных в формате «ключ-значение»
• Корутины и потоки Kotlin для асинхронных запросов
• Work Manager для синхронизации данных в фоновом режиме
• Moshi для декодирования JSON-файлов в объекты Kotlin
• Coil для производительной загрузки изображений из файлов
• RecyclerView для списков с функцией перетаскивания
• Шаблон MVI
• Архитектура CLEAN с уровнем данных и представления
Grocery Genius на GitHub: https://github.com/DanielRendox/GroceryGenius
Платформа: Android
⭐️: 122
AppFiles: код, инструменты, практики, производительность
❤1
Почему ваша ViewModel технически нестабильна — и почему Compose это не волнует
Знаете ли вы, что почти все ViewModel нестабильны? Когда мы впервые изучаем Compose, нас учат использовать стабильные классы, а не нестабильные.
Но ViewModel нестабильны. Так почему же никто ничего не говорит, когда мы используем нестабильные ViewModel?
Статья: https://apptractor.ru/info/articles/viewmodel-nestabilna.html
Платформа: Android
AppFiles: код, инструменты, практики, производительность
Знаете ли вы, что почти все ViewModel нестабильны? Когда мы впервые изучаем Compose, нас учат использовать стабильные классы, а не нестабильные.
Но ViewModel нестабильны. Так почему же никто ничего не говорит, когда мы используем нестабильные ViewModel?
Статья: https://apptractor.ru/info/articles/viewmodel-nestabilna.html
Платформа: Android
AppFiles: код, инструменты, практики, производительность
❤1
Основы MockK
По сути, MockK — это «фреймворк для мок-объектов» в Kotlin. Это инструмент, позволяющий создавать и управлять «поддельными» версиями объектов (так называемыми мок-объектами), чтобы изолировать и тестировать наш код.
Но это скучное определение.
Отличительной чертой MockK является то, что он был создан с нуля разработчиками Kotlin для Kotlin. Это не просто библиотека Java, вроде Mockito, с «дружественной к Kotlin» оболочкой. Он была разработан, чтобы охватывать язык, а не просто мириться с ним.
Это фундаментальное отличие и делает фреймворк таким «волшебным». Это не просто утилита для тестирования. Это демонстрация идиоматичности дизайна Kotlin. Он использует лучшие возможности языка, такие как мощные DSL, функции расширения и первоклассную поддержку корутин, чтобы создать API, который ощущается не как инструмент, а как естественное расширение самого Kotlin.
Статья: https://apptractor.ru/info/articles/osnovy-mockk.html
Платформа: Android/тестирование
AppFiles: код, инструменты, практики, производительность
По сути, MockK — это «фреймворк для мок-объектов» в Kotlin. Это инструмент, позволяющий создавать и управлять «поддельными» версиями объектов (так называемыми мок-объектами), чтобы изолировать и тестировать наш код.
Но это скучное определение.
Отличительной чертой MockK является то, что он был создан с нуля разработчиками Kotlin для Kotlin. Это не просто библиотека Java, вроде Mockito, с «дружественной к Kotlin» оболочкой. Он была разработан, чтобы охватывать язык, а не просто мириться с ним.
Это фундаментальное отличие и делает фреймворк таким «волшебным». Это не просто утилита для тестирования. Это демонстрация идиоматичности дизайна Kotlin. Он использует лучшие возможности языка, такие как мощные DSL, функции расширения и первоклассную поддержку корутин, чтобы создать API, который ощущается не как инструмент, а как естественное расширение самого Kotlin.
Статья: https://apptractor.ru/info/articles/osnovy-mockk.html
Платформа: Android/тестирование
AppFiles: код, инструменты, практики, производительность
❤1
Хитрости отладки SwiftUI, о которых никто не говорит
Автор показывает, как простые инструменты — вроде
Статья: https://medium.com/ios-lab/the-swiftui-debugging-tricks-no-one-talks-about-fdddc0cc35c7
Платформа: iOS
AppFiles: код, инструменты, практики, производительность
Автор показывает, как простые инструменты — вроде
print() в body или наблюдателей didSet — помогают понять, когда именно происходит перерисовка вью и корректно ли обновляется состояние. Такие минималистичные вставки дают быстрый инсайт: что именно вызывает лишние рендеры или почему UI не реагирует на изменения @State. Отдельный акцент сделан на том, что многие проблемы связаны с неправильным использованием @State и непониманием того, как SwiftUI работает под капотом. Поэтому автор рекомендует не стесняться логировать всё, что кажется подозрительным — это даёт результат быстрее, чем сразу менять архитектуру. Отличный набор практических подсказок, особенно если вы регулярно ловите странное поведение UI.Статья: https://medium.com/ios-lab/the-swiftui-debugging-tricks-no-one-talks-about-fdddc0cc35c7
Платформа: iOS
AppFiles: код, инструменты, практики, производительность
❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Delete Button Micro Interaction - кнопка удаления с таймером
Delete Button Micro Interaction - кнопка с микровзаимодействием на SwiftUI.
Delete Button на GitHub: https://github.com/georgecartridge/DeleteButtonMicroInteraction
Платформа: iOS
⭐️: 16
AppFiles: код, инструменты, практики, производительность
Delete Button Micro Interaction - кнопка с микровзаимодействием на SwiftUI.
Delete Button на GitHub: https://github.com/georgecartridge/DeleteButtonMicroInteraction
Платформа: iOS
⭐️: 16
AppFiles: код, инструменты, практики, производительность
❤1👍1