Обертки свойств в Swift: сокращаем шаблонный код
Раньше я везде копировал и вставлял один и тот же код валидации.
Каждый раз, когда мне нужно было ограничить значение от 0 до 100, я писал один и тот же геттер и сеттер. Каждый раз, когда я хотел сохранить что-то в UserDefaults, — один и тот же шаблонный код. Каждый раз, когда мне нужен был потокобезопасный доступ, — одна и та же процедура блокировки/разблокировки.
Затем я открыл для себя обертки свойств и почувствовал себя по-настоящему глупым, что не изучил их раньше.
Обертки свойств позволяют вынести эту повторяющуюся логику свойств в многоразовый компонент. Напишите один раз, используйте везде. Синтаксис чистый, цель понятна, и ваш код значительно сокращается.
SwiftUI использует их повсюду.
Статья: https://apptractor.ru/info/articles/swift-property-wrappers.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Раньше я везде копировал и вставлял один и тот же код валидации.
Каждый раз, когда мне нужно было ограничить значение от 0 до 100, я писал один и тот же геттер и сеттер. Каждый раз, когда я хотел сохранить что-то в UserDefaults, — один и тот же шаблонный код. Каждый раз, когда мне нужен был потокобезопасный доступ, — одна и та же процедура блокировки/разблокировки.
Затем я открыл для себя обертки свойств и почувствовал себя по-настоящему глупым, что не изучил их раньше.
Обертки свойств позволяют вынести эту повторяющуюся логику свойств в многоразовый компонент. Напишите один раз, используйте везде. Синтаксис чистый, цель понятна, и ваш код значительно сокращается.
SwiftUI использует их повсюду.
@State, @Binding, @Published, @Environment. Вы все это время использовали обертки свойств. Но вот в чем дело: вы можете создать свои собственные. И как только вы это научитесь это делать, вы будете удивляться, как вы вообще жили без них.Статья: https://apptractor.ru/info/articles/swift-property-wrappers.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Jetpack Compose New Style API - пример использования нового Style API
Небольшой экран для умного дома, созданный для изучения нового Jetpack Compose Foundation Style API.
Приложение целенаправленно сфокусировано: один экран управления кондиционером, чистая визуальная система в стиле Material 3 и несколько интерактивных состояний, демонстрирующих, как стили могут существовать вне обычной композиции, при этом сохраняя правильные значения темы в нужное время.
Что демонстрирует этот пример:
• Централизованный слой
• Токены стилей обрабатываются внутри
• Состояния нажатия, выбора и отключения с помощью
• Компактная область управления климатом с селектором режимов, скоростью вентилятора и чипом Eco
• Пользовательский индикатор температуры, созданный с помощью Compose Canvas
• Простой поток состояний в стиле MVVM с использованием
Jetpack Compose New Style API на GitHub: https://github.com/ardakazanci/JetpackCompose-New-Style-API
Платформа: Android
⭐️: 19
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Небольшой экран для умного дома, созданный для изучения нового Jetpack Compose Foundation Style API.
Приложение целенаправленно сфокусировано: один экран управления кондиционером, чистая визуальная система в стиле Material 3 и несколько интерактивных состояний, демонстрирующих, как стили могут существовать вне обычной композиции, при этом сохраняя правильные значения темы в нужное время.
Что демонстрирует этот пример:
• Централизованный слой
AppTheme.styles для многократно используемых стилей компонентов• Токены стилей обрабатываются внутри
StyleScope с помощью CompositionLocal.currentValue• Состояния нажатия, выбора и отключения с помощью
rememberUpdatedStyleState• Компактная область управления климатом с селектором режимов, скоростью вентилятора и чипом Eco
• Пользовательский индикатор температуры, созданный с помощью Compose Canvas
• Простой поток состояний в стиле MVVM с использованием
ViewModel и StateFlowJetpack Compose New Style API на GitHub: https://github.com/ardakazanci/JetpackCompose-New-Style-API
Платформа: Android
⭐️: 19
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Потоко-защищённая шина событий в Swift
В крупных приложениях для iOS взаимодействие между компонентами зачастую оказывается сложнее, чем сам компонент. Сервис завершает операцию, координатор должен отреагировать, возможно, потребуется обновить несколько экранов, и передача каждой зависимости по всему дереву навигации быстро начинает казаться излишней «рутинной» работой. Внедрение зависимостей и управление состоянием по-прежнему имеют своё место. Шина (данных) событий предоставляет нам ещё один инструмент для слабосвязанных уведомлений, где прямое управление добавило бы ненужную сложность. Цель этого компонента проста: позволить одной части приложения публиковать событие, а другим частям приложения — подписываться на события определенного типа. Реализация сосредоточена на типовой безопасности, потокобезопасном хранении, автоматической очистке при деаллокации владельца, явной отмене отдельных подписок, доставке MainActor для кода пользовательского интерфейса и поддержке AsyncStream для потребителей async/await.
Статья: https://habr.com/ru/articles/1042258/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В крупных приложениях для iOS взаимодействие между компонентами зачастую оказывается сложнее, чем сам компонент. Сервис завершает операцию, координатор должен отреагировать, возможно, потребуется обновить несколько экранов, и передача каждой зависимости по всему дереву навигации быстро начинает казаться излишней «рутинной» работой. Внедрение зависимостей и управление состоянием по-прежнему имеют своё место. Шина (данных) событий предоставляет нам ещё один инструмент для слабосвязанных уведомлений, где прямое управление добавило бы ненужную сложность. Цель этого компонента проста: позволить одной части приложения публиковать событие, а другим частям приложения — подписываться на события определенного типа. Реализация сосредоточена на типовой безопасности, потокобезопасном хранении, автоматической очистке при деаллокации владельца, явной отмене отдельных подписок, доставке MainActor для кода пользовательского интерфейса и поддержке AsyncStream для потребителей async/await.
Статья: https://habr.com/ru/articles/1042258/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Как DuckDuckGo сократила время сборки Android-приложений до 57%
Работая с командой Gradle Technologies, DuckDuckGo использовала скрипты проверки сборки Develocity, чтобы систематически выявлять и исправлять проблемы, связанные с производительностью. Вот что они обнаружили — и чему могут научиться другие команды разработчиков Android.
Статья: https://apptractor.ru/info/articles/kak-duckduckgo-sokratila-vremya-sborki-android-prilozheniy-na-57.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Работая с командой Gradle Technologies, DuckDuckGo использовала скрипты проверки сборки Develocity, чтобы систематически выявлять и исправлять проблемы, связанные с производительностью. Вот что они обнаружили — и чему могут научиться другие команды разработчиков Android.
Статья: https://apptractor.ru/info/articles/kak-duckduckgo-sokratila-vremya-sborki-android-prilozheniy-na-57.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
OneWay - управление состоянием с однонаправленным потоком данных
OneWay — это простая, легковесная библиотека для управления состоянием, использующая однонаправленный поток данных. Она полностью совместима со Swift 6 и построена на основе Swift Concurrency. Её архитектура обеспечивает потокобезопасность на всех этапах.
Она легко интегрируется со всеми платформами и фреймворками Apple, не требуя сторонних зависимостей, что позволяет использовать её в чистом виде. OneWay можно использовать где угодно, а не только на уровне представления, для упрощения сложной бизнес-логики. Если вы хотите реализовать однонаправленную логику, OneWay — это простое и практичное решение.
OneWay на GitHub: https://github.com/DevYeom/OneWay
Платформа: iOS
⭐️: 107
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
OneWay — это простая, легковесная библиотека для управления состоянием, использующая однонаправленный поток данных. Она полностью совместима со Swift 6 и построена на основе Swift Concurrency. Её архитектура обеспечивает потокобезопасность на всех этапах.
Она легко интегрируется со всеми платформами и фреймворками Apple, не требуя сторонних зависимостей, что позволяет использовать её в чистом виде. OneWay можно использовать где угодно, а не только на уровне представления, для упрощения сложной бизнес-логики. Если вы хотите реализовать однонаправленную логику, OneWay — это простое и практичное решение.
OneWay на GitHub: https://github.com/DevYeom/OneWay
Платформа: iOS
⭐️: 107
Please open Telegram to view this post
VIEW IN TELEGRAM
Приоритизация эффективности использования памяти: важные шаги для Android 17
Хотя производительность приложения часто ассоциируют с плавным интерфейсом и быстрым стартом, именно память служит «тихим фундаментом», на котором строятся все эти видимые метрики. Не секрет, что мы наблюдаем сдвиг: объём и использование памяти устройства становятся важнее, чем когда-либо. В Android 17 мы не только продвинулись в оптимизациях памяти на уровне системы, но и предоставляем инструменты и API, которые помогут вам заранее подготовиться к более строгим требованиям к памяти позднее в этом году.
Статья: https://apptractor.ru/info/articles/prioritizatsiya-effektivnosti-ispolzovaniya-pamyati-vazhnye-shagi-dlya-android-17.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Хотя производительность приложения часто ассоциируют с плавным интерфейсом и быстрым стартом, именно память служит «тихим фундаментом», на котором строятся все эти видимые метрики. Не секрет, что мы наблюдаем сдвиг: объём и использование памяти устройства становятся важнее, чем когда-либо. В Android 17 мы не только продвинулись в оптимизациях памяти на уровне системы, но и предоставляем инструменты и API, которые помогут вам заранее подготовиться к более строгим требованиям к памяти позднее в этом году.
Статья: https://apptractor.ru/info/articles/prioritizatsiya-effektivnosti-ispolzovaniya-pamyati-vazhnye-shagi-dlya-android-17.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Корутины и то как они работают на низком уровне
Обычно, когда ты начинаешь задаваться подобным вопросом, в голове возникает ассоциация с чем-то магическим. Есть какая-то неведомая сущность, которой ты говоришь что-то сделать и она что-то делает. При изучении Coroutines в самом начале пути ощущения у меня были точно такими же
Конечно же, никаких гномов-волшебников не существует, а сами Coroutines работают по определенным алгоритмам, причем не то чтобы очень сложным
В рамках этой статьи я не буду претендовать на полную достоверность и всезнайность. Я, как и многие тысячи разработчиков, ежедневно сталкиваюсь с Coroutines и просто хочу поделиться своим пониманием того, как они устроены и получить обратный фидбек.
Статья: https://habr.com/ru/articles/1041632/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Обычно, когда ты начинаешь задаваться подобным вопросом, в голове возникает ассоциация с чем-то магическим. Есть какая-то неведомая сущность, которой ты говоришь что-то сделать и она что-то делает. При изучении Coroutines в самом начале пути ощущения у меня были точно такими же
Конечно же, никаких гномов-волшебников не существует, а сами Coroutines работают по определенным алгоритмам, причем не то чтобы очень сложным
В рамках этой статьи я не буду претендовать на полную достоверность и всезнайность. Я, как и многие тысячи разработчиков, ежедневно сталкиваюсь с Coroutines и просто хочу поделиться своим пониманием того, как они устроены и получить обратный фидбек.
Статья: https://habr.com/ru/articles/1041632/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Shelly - IDE для Android, ориентированная на ИИ-чаты
Shelly — это рабочее пространство, которое объединяет все компоненты на вашем Android-устройстве: локальную работу с терминалом, нативные PTY приложений, CLI Codex, ИИ панели, браузер/документацию, предварительный просмотр и фоновые API-агенты.
Нативная IDE для Android-терминала, позволяющая запускать настоящий Codex CLI в собственном PTY-приложении, с агентами ИИ, работающими через API — Gemini, Cerebras, Groq, Perplexity и локальными моделями — а также Git, Bash, Python и редакторами, встроенными в APK. Никакой Termux установки, никакой загрузки дистрибутива, никакой отдельной настройки менеджера пакетов. Никакого терминала в WebView, никакого удаленного бриджа для IDE. Откройте приложение, авторизуйте свои учетные записи ИИ и работайте в локальных многооконных терминалах на Android.
Shelly на GitHub: https://github.com/RYOITABASHI/Shelly
Платформа: Android
⭐️: 24
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Shelly — это рабочее пространство, которое объединяет все компоненты на вашем Android-устройстве: локальную работу с терминалом, нативные PTY приложений, CLI Codex, ИИ панели, браузер/документацию, предварительный просмотр и фоновые API-агенты.
Нативная IDE для Android-терминала, позволяющая запускать настоящий Codex CLI в собственном PTY-приложении, с агентами ИИ, работающими через API — Gemini, Cerebras, Groq, Perplexity и локальными моделями — а также Git, Bash, Python и редакторами, встроенными в APK. Никакой Termux установки, никакой загрузки дистрибутива, никакой отдельной настройки менеджера пакетов. Никакого терминала в WebView, никакого удаленного бриджа для IDE. Откройте приложение, авторизуйте свои учетные записи ИИ и работайте в локальных многооконных терминалах на Android.
Shelly на GitHub: https://github.com/RYOITABASHI/Shelly
Платформа: Android
⭐️: 24
Please open Telegram to view this post
VIEW IN TELEGRAM
Как оптимизировать картинки в Android и не сломать UX: метрики, практики и компромиссы
Когда экран с изображениями начинает тормозить, первая реакция обычно предсказуемая: выключить crossfade, включить кэш, добавить placeholder и надеяться, что этого достаточно.
Иногда это правда помогает. Но редко решает проблему системно.
На экранах с большим количеством изображений проблема почти никогда не сводится к одному багу. Чаще это цепочка мелких решений, которые по отдельности выглядят безобидно, а вместе начинают бить по слабым устройствам: слишком тяжёлые изображения, неудачный prefetch, лишняя телеметрия, дорогие анимации, лишние трансформации и декодирование.
Поэтому оптимизация картинок в Android — это не про один флаг в image loader. Это про то, как быстро экран становится визуально полным, насколько плавно он скроллится и сколько стоит каждый image request.
Статья: https://habr.com/ru/companies/uzum/articles/1032460/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Когда экран с изображениями начинает тормозить, первая реакция обычно предсказуемая: выключить crossfade, включить кэш, добавить placeholder и надеяться, что этого достаточно.
Иногда это правда помогает. Но редко решает проблему системно.
На экранах с большим количеством изображений проблема почти никогда не сводится к одному багу. Чаще это цепочка мелких решений, которые по отдельности выглядят безобидно, а вместе начинают бить по слабым устройствам: слишком тяжёлые изображения, неудачный prefetch, лишняя телеметрия, дорогие анимации, лишние трансформации и декодирование.
Поэтому оптимизация картинок в Android — это не про один флаг в image loader. Это про то, как быстро экран становится визуально полным, насколько плавно он скроллится и сколько стоит каждый image request.
Статья: https://habr.com/ru/companies/uzum/articles/1032460/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Swarm - фреймворк оркестрации агентов на Swift
Swarm - Swift-фреймворк для создания агентов и многоагентных рабочих процессов.
• Параллелизм Swift — это неотъемлемая часть функционала. Весь пакет построен на
• Инструменты остаются типобезопасными. Макрос
• Рабочие процессы могут выдерживать сбои. Надежное сохранение контрольных точек рабочих процессов позволяет возобновлять работу с явно заданного идентификатора контрольной точки.
• Облачные и локальные модели используют одни и те же абстракции. Foundation Models, Anthropic, OpenAI, Ollama, Gemini, MiniMax, OpenRouter и MLX — все они соответствуют одной и той же архитектуре.
• Все написано на Swift.
Swarm на GitHub: https://github.com/christopherkarani/Swarm
Платформа: iOS
⭐️: 484
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Swarm - Swift-фреймворк для создания агентов и многоагентных рабочих процессов.
• Параллелизм Swift — это неотъемлемая часть функционала. Весь пакет построен на
StrictConcurrency.• Инструменты остаются типобезопасными. Макрос
@Tool генерирует JSON-схемы из структур Swift.• Рабочие процессы могут выдерживать сбои. Надежное сохранение контрольных точек рабочих процессов позволяет возобновлять работу с явно заданного идентификатора контрольной точки.
• Облачные и локальные модели используют одни и те же абстракции. Foundation Models, Anthropic, OpenAI, Ollama, Gemini, MiniMax, OpenRouter и MLX — все они соответствуют одной и той же архитектуре.
• Все написано на Swift.
AsyncThrowingStream, акторы, конструкторы результатов и макросы — используются все возможности Swift.Swarm на GitHub: https://github.com/christopherkarani/Swarm
Платформа: iOS
⭐️: 484
Please open Telegram to view this post
VIEW IN TELEGRAM
• How to back port new SwiftUI APIs to older iOS versions
• iOS 26 Style Mail App Tab bar Using SwiftUI
• 10 Super Common Android Interview Questions (+ Detailed Answers!)
• Journeys for Android Studio - Is This the Way To Go?
• Мифическая кроссплатформа
• AI не приносит денег
• Build Your Own AI Agent – Full Course with OpenAI, Langchain, Render Deployment
Прошлогодние видео:
• Привязать карту: что может быть проще?
• Архитектура для кросс-функциональных команд
• Как не наломать дров с Live Activity
• Баланс между скоростью и надежностью: переиспользовать нельзя перепроверять
• Катим в прод, не тестируя
• Figma + Compose. Упрощаем верстку
• Что хотят работодатели от Android-разработчика
• Кодревью опенсорс проекта или как выглядят 10 лет технического долга
• Сколько памяти нужно для сборки? Android-разработчикам о JVM
• Что скрывает State в Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Я перестал доверять стримингам. Поэтому написал свой iOS-плеер — с CarPlay и без вранья про звук
Я перестал верить стримингам. Не философски, а практически. Половина любимых альбомов либо ушла из каталогов, либо вернулась пересведенной так, что слушать тошно. Концертные записи, винил‑рипы, региональные релизы — их там и не было. А моя коллекция в FLAC просто лежит на диске и никуда не девается.
Для своей коллекции я написал плеер. Для себя. Через полгода это превратилось в нишевое приложение для iOS на 11 языках: с собственным DSP, распознаванием музыки и CarPlay.
Что в итоге внутри и где было не очевидно. Места, в которых документация молчит, а ты сидишь и гадаешь, почему оно вообще так себя ведет.
Статья: https://habr.com/ru/articles/1043690/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Я перестал верить стримингам. Не философски, а практически. Половина любимых альбомов либо ушла из каталогов, либо вернулась пересведенной так, что слушать тошно. Концертные записи, винил‑рипы, региональные релизы — их там и не было. А моя коллекция в FLAC просто лежит на диске и никуда не девается.
Для своей коллекции я написал плеер. Для себя. Через полгода это превратилось в нишевое приложение для iOS на 11 языках: с собственным DSP, распознаванием музыки и CarPlay.
Что в итоге внутри и где было не очевидно. Места, в которых документация молчит, а ты сидишь и гадаешь, почему оно вообще так себя ведет.
Статья: https://habr.com/ru/articles/1043690/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Как я избавился от тысяч строк валидации в Swift
Каждый раз, когда нужно добавить новую модель в проект, приходится писать буквально одинаковый код: с одинаковыми проверками, с одинаковыми корректировками, с одинаковыми
Статья: https://habr.com/ru/articles/1043520/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Каждый раз, когда нужно добавить новую модель в проект, приходится писать буквально одинаковый код: с одинаковыми проверками, с одинаковыми корректировками, с одинаковыми
Codable, с одинаковыми тестами.Статья: https://habr.com/ru/articles/1043520/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Как я избавился от тысяч строк валидации в Swift
Каждый раз, когда нужно добавить новую модель в проект, приходится писать буквально одинаковый код: с одинаковыми проверками, с одинаковыми корректировками, с одинаковыми Codable , с одинаковыми...
Вышел Kotlin 2.4.0
Kotlin 2.4.0 уже вышел — релиз получился крупным и особенно интересным для тех, кто следит за развитием языка и мультиплатформы. Среди главных новинок: стабильные context parameters, explicit backing fields и улучшения для annotation use-site targets. В стандартной библиотеке стабилизировали UUID API и добавили проверку отсортированности коллекций.
Для JVM-разработчиков важны поддержка Java 26 и включённые по умолчанию аннотации в metadata. В Kotlin/Native появился support Swift packages as dependencies, обновился Swift export, а CMS GC теперь включён по умолчанию. Kotlin/Wasm тоже заметно прокачали: инкрементальная компиляция стала дефолтной, плюс появилась поддержка WebAssembly Component Model.
Есть изменения и в инструментах: Kotlin 2.4.0 совместим с Gradle 9.5.0, а Maven теперь автоматически согласует версии Java и JVM target. Ещё компилятор Kotlin стал последовательнее вести себя с inline-функциями при компиляции
Новость: https://blog.jetbrains.com/kotlin/2026/06/kotlin-2-4-0-released/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Kotlin 2.4.0 уже вышел — релиз получился крупным и особенно интересным для тех, кто следит за развитием языка и мультиплатформы. Среди главных новинок: стабильные context parameters, explicit backing fields и улучшения для annotation use-site targets. В стандартной библиотеке стабилизировали UUID API и добавили проверку отсортированности коллекций.
Для JVM-разработчиков важны поддержка Java 26 и включённые по умолчанию аннотации в metadata. В Kotlin/Native появился support Swift packages as dependencies, обновился Swift export, а CMS GC теперь включён по умолчанию. Kotlin/Wasm тоже заметно прокачали: инкрементальная компиляция стала дефолтной, плюс появилась поддержка WebAssembly Component Model.
Есть изменения и в инструментах: Kotlin 2.4.0 совместим с Gradle 9.5.0, а Maven теперь автоматически согласует версии Java и JVM target. Ещё компилятор Kotlin стал последовательнее вести себя с inline-функциями при компиляции
.klib. Обновиться можно стандартно — поменять версию Kotlin в build scripts на 2.4.0; свежая версия уже входит в актуальные IntelliJ IDEA и Android Studio.Новость: https://blog.jetbrains.com/kotlin/2026/06/kotlin-2-4-0-released/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
The JetBrains Blog
Kotlin 2.4.0 Released | The Kotlin Blog
The Kotlin 2.4.0 release is out! This release brings new language features, support for Swift packages as dependencies, updates to Swift export, and more. Take a look!