•
(iOS Ru) Как перевезти 250+ SPM модулей из динамики в статику и не сойти с ума•
(iOS Ru) Пагинация: от идеи до реализации•
(iOS Ru) Стратегии ускорения старта на практике•
(iOS En) AlarmKit - Live Activities•
(iOS En) Interactive Snippets - App Intents•
(iOS En) Swift 6.2: Apple has listened to developer feedback!•
(iOS En) Gradient Generator using On-Device Intelligence - FoundationModels•
(iOS En) What's New in SwiftUI - WWDC 2025•
(And Ru) Адаптация мобильного приложения под ТВ-платформы•
(And Ru) Баттл codegen-инструментов от разработчиков дизайн-систем•
(And Ru) История, принципы и концепции библиотеки навигации Decompose•
(And Ru) Что нового в Android 16 для разработчиков и пользователей•
(And Ru) Как ускоряют Android-приложения в Яндексе: интервью с инженером•
(And En) Now in Android: 118 –What’s new in Android development at Google I/O 2025 (part 2)•
(And En) Navigating the future with Jetpack Navigation 3 - Core Concepts•
(And En) Bot to the future: Two years later•
(And En) Build a mobile app using the Home APIs on Android•
(And En) Beginner's Crash Course to the New Navigation 3 Library (Android & KMP)•
(And En) Kotlin Coroutine Gotchas•
(And En) Kotlin Coroutines - Debugging Tools Overview•
(And En) Single-Threaded Coroutines in Kotlin•
(And En) Let's try implementing Nested Navigation with the New Navigation 3 Library•
(Crs Ru) Firebase + KMP: Разрушаем мифы и создаем гибкие решения•
(Crs Ru) Duit – как создать эффективный BDUI-фреймворк для Flutter•
(Crs Ru) Аудит безопасности мобильных приложений•
(Crs En) Full Guide to Material3 Theming in Compose Multiplatform•
(Dev Ru) Как ускорить карьеру в ИТ? Перенимаем мировой опыт: от Гарварда и Стэнфорда до Кремниевой долины•
(Dev Ru) Легаси. Оптимизации. Обфускация. Героическая борьба с Minecraft•
(Dev Ru) Алгоритмы на собеседовании: ритуал или необходимость?•
(Dev Ru) Как не сойти с ума от FOMO из-за AI•
(Dsg En) How to Make Apple's Liquid Glass Effect In FigmaПрошлогодние видео:
•
(iOS Ru) iOS-приложения под защитой Apple! Или нет?•
(And Ru) Как избавиться от рекурсии, или Как мой код попал в Google•
(And Ru) Микширование аудиопотоков в Android•
(And Ru) Как мы победили техдолг в проекте Android RuStore•
(Crs Ru) Опыт внедрения Kotlin и Compose Multiplatform в продакшн-решение•
(Dev Ru) Как решать задачи на Leetcode•
(Dev Ru) Как устроен сетевой код в играхPlease open Telegram to view this post
VIEW IN TELEGRAM
Создание фракталов в Kotlin и Jetpack Compose
Автор рассказывает о создании Android‑приложения, которое сгенерирует и визуализирует фрактал Мандельброта с возможностью плавного масштабирования и панорамирования на любом уровне детализации — ограниченным лишь точностью типа
Особое внимание уделяется взаимодействию с пользователем: применяется
В заключительной части автор подчёркивает, что, несмотря на кажущуюся простоту формулы, эффективная отрисовка фракталов — привычная задача для десктопов — в мобильных условиях требует продуманного архитектурного подхода. И Jetpack Compose в связке с Kotlin‑корутинами позволяет получить плавную, визуально сложную визуализацию даже на смартфоне .
Статья — отличное руководство для тех, кто хочет совместить математическую визуализацию с современной Android‑архитектурой, научиться организовывать асинхронную отрисовку и работать с жестами в Compose.
Статья: https://proandroiddev.com/generating-fractals-in-kotlin-with-jetpack-compose-c94bf37b39da (как читать M)
Платформа: Android
Автор рассказывает о создании Android‑приложения, которое сгенерирует и визуализирует фрактал Мандельброта с возможностью плавного масштабирования и панорамирования на любом уровне детализации — ограниченным лишь точностью типа
Double. Он начинает с объяснения математической основы: фрактал строится по простой рекуррентной формуле. Далее автор подробно показывает, как в Jetpack Compose реализовать саму отрисовку. Используется компонент Canvas и рендеринг по пикселям. Для расчётов применяются корутины Kotlin, чтобы разбить задачу на параллельные участки и избежать блокировки UI. Благодаря этому генерация остаётся отзывчивой даже при глубоком зуме .Особое внимание уделяется взаимодействию с пользователем: применяется
Modifier для обработки жестов, таких как масштабирование двумя пальцами и перемещение. Это позволяет динамически изменять центр и уровень масштабирования фрактала прямо на экране. Кроме того, обсуждаются вопросы производительности: оптимизация обхода пикселей, управление максимальным числом итераций и адаптация к возможным точностным ограничениям типа Double .В заключительной части автор подчёркивает, что, несмотря на кажущуюся простоту формулы, эффективная отрисовка фракталов — привычная задача для десктопов — в мобильных условиях требует продуманного архитектурного подхода. И Jetpack Compose в связке с Kotlin‑корутинами позволяет получить плавную, визуально сложную визуализацию даже на смартфоне .
Статья — отличное руководство для тех, кто хочет совместить математическую визуализацию с современной Android‑архитектурой, научиться организовывать асинхронную отрисовку и работать с жестами в Compose.
Статья: https://proandroiddev.com/generating-fractals-in-kotlin-with-jetpack-compose-c94bf37b39da (как читать M)
Платформа: Android
Полное руководство по фреймворку Foundation Models
Подробный обзор нового фреймворка Foundation Models от Apple, представленного на WWDC 2025. Этот инструмент позволяет запускать LLM прямо на устройствах Apple — без отправки данных в облако, с высокой производительностью и сохранением приватности.
Автор статьи описывает простейший пример: с помощью макроса
Одним из ключевых достоинств фреймворка является guided generation — возможность описания своих структур (Swift‑структуры и перечисления с аннотациями
Дальше автор показывает применение в SwiftUI‑приложении: выбор ингредиентов, отправка промпта, асинхронная генерация списка рецептов через поток, отображение и сохранение результата с помощью SwiftData. Кроме того, затрагивается тема инструментов — tools. Поясняется, как создать кастомный
Отдельно рассказывается о производительности: рекомендуется заранее прогревать модель с помощью session.prewarm(), проектировать структуры без лишних свойств, учитывать лимит токенов (4096) и строить инструкции на английском за лучшую стабильность.
В заключении подчёркивается, что Foundation Models — это новый этап on‑device AI от Apple: генерация текстов, структурированные данные, инструменты, сохранение и SwiftUI‑интеграция — всё работает локально. При этом автор обещает обновлять статью по мере расширения фреймворка и ссылается на курс и репозиторий с примерами.
Статья: https://azamsharp.com/2025/06/18/the-ultimate-guide-to-the-foundation-models-framework.html
Платформа: iOS
Подробный обзор нового фреймворка Foundation Models от Apple, представленного на WWDC 2025. Этот инструмент позволяет запускать LLM прямо на устройствах Apple — без отправки данных в облако, с высокой производительностью и сохранением приватности.
Автор статьи описывает простейший пример: с помощью макроса
#Playground, SwiftUI и LanguageModelSession достаточно нескольких строк, чтобы отправить запрос модели — например, «перечисли штаты США» — и получить ответ. Затем демонстрируется потоковая генерация, позволяющая ускорить реакцию интерфейса за счёт отображения частичного результата по мере его поступления.Одним из ключевых достоинств фреймворка является guided generation — возможность описания своих структур (Swift‑структуры и перечисления с аннотациями
@Generable и @Guide) и получения от модели строго типизированного ответа. В примере предлагается рецепт с ингредиентами и объёмами, упорядоченными в иерархии, доступной напрямую в коде.Дальше автор показывает применение в SwiftUI‑приложении: выбор ингредиентов, отправка промпта, асинхронная генерация списка рецептов через поток, отображение и сохранение результата с помощью SwiftData. Кроме того, затрагивается тема инструментов — tools. Поясняется, как создать кастомный
RecipeTool, зарегистрировать его в LanguageModelSession, чтобы модель могла при необходимости сама вызвать API и получить данные извне.Отдельно рассказывается о производительности: рекомендуется заранее прогревать модель с помощью session.prewarm(), проектировать структуры без лишних свойств, учитывать лимит токенов (4096) и строить инструкции на английском за лучшую стабильность.
В заключении подчёркивается, что Foundation Models — это новый этап on‑device AI от Apple: генерация текстов, структурированные данные, инструменты, сохранение и SwiftUI‑интеграция — всё работает локально. При этом автор обещает обновлять статью по мере расширения фреймворка и ссылается на курс и репозиторий с примерами.
Статья: https://azamsharp.com/2025/06/18/the-ultimate-guide-to-the-foundation-models-framework.html
Платформа: iOS
👍5
VLCKit — универсальная мультимедийная библиотека для любых задач воспроизведения аудио и видео на macOS, iOS и tvO. VLCUI - обертка этой библиотеки для SwiftUI. Поддерживает воспроизведение, активную потоковую передачу и обмен медиафайлами.
VLCUI на GitHub: https://github.com/LePips/VLCUI
Платформа: iOS
⭐️: 50
VLCUI на GitHub: https://github.com/LePips/VLCUI
Платформа: iOS
⭐️: 50
👍1
Настраиваем CI/CD Android-проекта, часть 1. Начало
Если коротко - моя главная мотивация написания "еще одной статьи про CI/CD на Android" - помочь себе и другим, закрыть свои потребности при работе с CI/CD. К тому же, на мой взгляд, каждая статья на эту тему получается разной - ведь задачи у всех разные.
Статья: https://habr.com/ru/companies/scanny/articles/918364/
Платформа: Android
Если коротко - моя главная мотивация написания "еще одной статьи про CI/CD на Android" - помочь себе и другим, закрыть свои потребности при работе с CI/CD. К тому же, на мой взгляд, каждая статья на эту тему получается разной - ведь задачи у всех разные.
Статья: https://habr.com/ru/companies/scanny/articles/918364/
Платформа: Android
FinalTextOnPath.webm
632.6 KB
Анимация текста вдоль траектории в Jetpack Compose
В этой статье мы научимся рисовать текст по траектории (path) внутри холста Compose. Это можно использовать для создания причудливой графики или анимации строки текста.
Статья: https://apptractor.ru/info/articles/animatsiya-teksta-vdol-traektorii-v-jetpack-compose.html
Платформа: Android
В этой статье мы научимся рисовать текст по траектории (path) внутри холста Compose. Это можно использовать для создания причудливой графики или анимации строки текста.
Статья: https://apptractor.ru/info/articles/animatsiya-teksta-vdol-traektorii-v-jetpack-compose.html
Платформа: Android
Трехмерные графики в SwiftUI: новый уровень визуализации данных
Apple сделала тихую, но значимую ставку на 3D-графики в SwiftUI — и это не просто эффектная фича, а потенциальный поворотный момент для data-driven интерфейсов.
В статье подробно разобран свежий API, появившийся в iOS 26 - Chart3D. Теперь вы можете буквально “вытянуть” ось Z из привычных Charts, и получить интерактивные объемные визуализации.
Что важно:
🎛 Chart3DStack позволяет настраивать глубину, перспективу, тени и анимации без танцев с SceneKit.
📊 Уровень интеграции с существующим Charts API — бесшовный. Используются те же модификаторы (
🧠 Поддерживается VoiceOver и dynamic type — 3D не в ущерб доступности.
Зачем это:
• Улучшенная читаемость сложных данных (например, при сравнении категорий по времени и регионам).
• Вау-эффект в аналитических дашбордах и BI-решениях прямо на iOS.
• Возможность нативной замены WebGL/Unity-решений в корпоративных приложениях.
Если вы делаете продукт с данными — не игнорируйте эту новинку. 3D-графики в SwiftUI уже production-ready. Apple закладывает этим фундамент для spatial computing и VisionOS. Начать экспериментировать стоит уже сегодня, пока конкуренты не обогнали.
Статья: https://swiftshorts.com/2025/06/19/swiftui-3d-charts-add-a-whole-new-dimension-to-your-data/
Платформа: iOS
Apple сделала тихую, но значимую ставку на 3D-графики в SwiftUI — и это не просто эффектная фича, а потенциальный поворотный момент для data-driven интерфейсов.
В статье подробно разобран свежий API, появившийся в iOS 26 - Chart3D. Теперь вы можете буквально “вытянуть” ось Z из привычных Charts, и получить интерактивные объемные визуализации.
Что важно:
🎛 Chart3DStack позволяет настраивать глубину, перспективу, тени и анимации без танцев с SceneKit.
📊 Уровень интеграции с существующим Charts API — бесшовный. Используются те же модификаторы (
.foregroundStyle, .annotation, .chartXAxis и пр.), просто добавляется третье измерение.🧠 Поддерживается VoiceOver и dynamic type — 3D не в ущерб доступности.
Зачем это:
• Улучшенная читаемость сложных данных (например, при сравнении категорий по времени и регионам).
• Вау-эффект в аналитических дашбордах и BI-решениях прямо на iOS.
• Возможность нативной замены WebGL/Unity-решений в корпоративных приложениях.
Если вы делаете продукт с данными — не игнорируйте эту новинку. 3D-графики в SwiftUI уже production-ready. Apple закладывает этим фундамент для spatial computing и VisionOS. Начать экспериментировать стоит уже сегодня, пока конкуренты не обогнали.
Статья: https://swiftshorts.com/2025/06/19/swiftui-3d-charts-add-a-whole-new-dimension-to-your-data/
Платформа: iOS
Any Distance выложили в Open Source
Дэниел Кунц открыл код Any Distance, приложения, выигравшего Apple Design Award в 2023 году.
Any Distance на GitHub: https://github.com/Any-Distance/any-distance-ios
Платформа: iOS
⭐️: 595
Дэниел Кунц открыл код Any Distance, приложения, выигравшего Apple Design Award в 2023 году.
Сегодня я открываю исходный код Any Distance, приложения для фитнес-трекера, над которым я работал вместе с несколькими другими людьми почти 5 лет. Any Distance начинался как способ поделиться красивой графикой ваших тренировок в социальных сетях. В конечном итоге он превратился в венчурный стартап, нацеленный на свержение Strava. Хотя мы так и не приблизились к этой цели или даже к соответствию продукта рынку (на мой взгляд), в итоге мы создали много интересного программного обеспечения, которым я до сих пор горжусь.
Я провел много времени, экспериментируя с различными комбинациями SwiftUI, UIKit и Metal, чтобы сделать Any Distance максимально красивым и производительным. Многое из того, что мы сделали, до сих пор не было воспроизведено (насколько мне известно). Я не буду утверждать, что все, что мы сделали, — это лучший способ что-то сделать. Но этого оказалось достаточно, чтобы получить премию Apple Design Award.
Any Distance на GitHub: https://github.com/Any-Distance/any-distance-ios
Платформа: iOS
⭐️: 595
Kotlin-практики, которые выдают senior-разработчика с первого взгляда
Если ты пишешь на Kotlin и хочешь, чтобы твой код сразу читался как “код сеньора” — обрати внимание на ключевые приёмы, разобранные в статье.
Кратко по сути — никакой “магии”, только зрелый контроль над выразительностью языка.
1. Используй
2. Используй функции расширения грамотно
3. Заменяй дерево
4. Используй классы данных, но не злоупотребляй ими
5. Используй Null-Safety фичи как профессионал
6. Делай функции короткими и сфокусированными
7. Предпочитай читаемые лямбды умным
8. Не пропуская документацию - используй KDoc
Senior — это не про “знать больше”, а про “писать проще и чище”. Kotlin даёт все инструменты, чтобы код был выразительным и читаемым — используйте их осознанно.
Статья: https://nameisjayant.medium.com/kotlin-practices-that-make-you-look-like-a-senior-dev-1f1de3626d76
Платформа: Android
Если ты пишешь на Kotlin и хочешь, чтобы твой код сразу читался как “код сеньора” — обрати внимание на ключевые приёмы, разобранные в статье.
Кратко по сути — никакой “магии”, только зрелый контроль над выразительностью языка.
1. Используй
val вместо var (и даже const val)2. Используй функции расширения грамотно
3. Заменяй дерево
if на when4. Используй классы данных, но не злоупотребляй ими
5. Используй Null-Safety фичи как профессионал
6. Делай функции короткими и сфокусированными
7. Предпочитай читаемые лямбды умным
8. Не пропуская документацию - используй KDoc
Senior — это не про “знать больше”, а про “писать проще и чище”. Kotlin даёт все инструменты, чтобы код был выразительным и читаемым — используйте их осознанно.
Статья: https://nameisjayant.medium.com/kotlin-practices-that-make-you-look-like-a-senior-dev-1f1de3626d76
Платформа: Android
🤣3
Operit AI — это первое полностью функциональное приложение-помощник на основе ИИ для мобильных устройств, которое работает полностью автономно (за исключением внешних вызовов API) на вашем Android-устройстве, предлагая мощные возможности вызова функций. Это не просто интерфейс чата, а помощник «все в одном», глубоко интегрированный с разрешениями Android и различными инструментами.
Operit AI поставляется с более чем 40 мощными встроенными инструментами, позволяющими ИИ-помощнику глубоко взаимодействовать с вашим устройством:
• Инструменты файловой системы: чтение/запись файлов, поиск файлов, сжатие/распаковка, преобразование форматов и т. д.
• Инструменты HTTP: выполнение веб-запросов, доступ к веб-страницам, загрузка/выгрузка файлов и т. д.
• Инструменты работы системы: управление настройками системы, установка приложений, контроль выполнения приложений и т. д.
• Инструменты автоматизации пользовательского интерфейса: нажатие, смахивание, поиск элементов, заполнение форм и т. д.
• Инструменты обработки мультимедиа: преобразование видео, кодирование/декодирование, извлечение кадров и т. д.
Эти встроенные инструменты в сочетании с богатой системой плагинов позволяют Operit выполнять широкий спектр задач от простых до сложных, по-настоящему предоставляя всемогущий опыт мобильного помощника ИИ.
Operit AI на GitHub: https://github.com/AAswordman/Operit
Платформа: Android
⭐️: 1.2K
Operit AI поставляется с более чем 40 мощными встроенными инструментами, позволяющими ИИ-помощнику глубоко взаимодействовать с вашим устройством:
• Инструменты файловой системы: чтение/запись файлов, поиск файлов, сжатие/распаковка, преобразование форматов и т. д.
• Инструменты HTTP: выполнение веб-запросов, доступ к веб-страницам, загрузка/выгрузка файлов и т. д.
• Инструменты работы системы: управление настройками системы, установка приложений, контроль выполнения приложений и т. д.
• Инструменты автоматизации пользовательского интерфейса: нажатие, смахивание, поиск элементов, заполнение форм и т. д.
• Инструменты обработки мультимедиа: преобразование видео, кодирование/декодирование, извлечение кадров и т. д.
Эти встроенные инструменты в сочетании с богатой системой плагинов позволяют Operit выполнять широкий спектр задач от простых до сложных, по-настоящему предоставляя всемогущий опыт мобильного помощника ИИ.
Operit AI на GitHub: https://github.com/AAswordman/Operit
Платформа: Android
⭐️: 1.2K
👍1
Пора слезать с иглы обновлений: как мы перешли на кросс-платформенную дизайн-систему и перестали ждать iOS и Android
В прошлом году на одном из проектов решили перейти на единую кросс-платформенную дизайн-систему. Переход не был быстрым и легким, и без минусов тоже не обошлось. Но плюсов оказалось куда больше. К примеру, на базе общей дизайн-системы маркетинговые дизайнеры создали конструктор лендингов: теперь посадочные страницы выглядят так же, как основные продукты, и выпускаются в 6 раз быстрее. А консистентность дизайна подняла конверсию в несколько раз. Но обо всем по порядку.
Статья: https://habr.com/ru/companies/garage8/articles/921026/
Платформа: дизайн
В прошлом году на одном из проектов решили перейти на единую кросс-платформенную дизайн-систему. Переход не был быстрым и легким, и без минусов тоже не обошлось. Но плюсов оказалось куда больше. К примеру, на базе общей дизайн-системы маркетинговые дизайнеры создали конструктор лендингов: теперь посадочные страницы выглядят так же, как основные продукты, и выпускаются в 6 раз быстрее. А консистентность дизайна подняла конверсию в несколько раз. Но обо всем по порядку.
Статья: https://habr.com/ru/companies/garage8/articles/921026/
Платформа: дизайн
👎1👌1
Автозаполнение в Compose 1.8.0
Новые API автозаполнения Compose 1.8.0 — это большое улучшение для разработчиков. Теперь для автозаполнения полей требуется значительно меньше кода и предлагается больше функций. Compose близок к тому, чтобы иметь паритет функций с View-фреймворком!
Статья: https://apptractor.ru/info/articles/avtozapolnenie-v-compose.html
Платформа: Android
Новые API автозаполнения Compose 1.8.0 — это большое улучшение для разработчиков. Теперь для автозаполнения полей требуется значительно меньше кода и предлагается больше функций. Compose близок к тому, чтобы иметь паритет функций с View-фреймворком!
Статья: https://apptractor.ru/info/articles/avtozapolnenie-v-compose.html
Платформа: Android
Клон Uber на React Native
Это полнофункциональный клон Uber, созданный с помощью React Native. Он включает в себя такие важные функции, как интеграция с live картой, маршрутизация в реальном времени, поиск местоположения и близлежащих мест с использованием реальных данных через REST API. Он также поддерживает темный режим, макеты RTL и несколько языков.
Проект поставляется с бэкендом и документацией Swagger API для простого тестирования.
Сейчас проект можно скачать бесплатно.
Uber Clone with React Native: https://www.devsolve.club/toolbox/uber-clone-app-react-native-with-dark-mode-rtl-and-localization/
Платформа: кроссплатформа
Это полнофункциональный клон Uber, созданный с помощью React Native. Он включает в себя такие важные функции, как интеграция с live картой, маршрутизация в реальном времени, поиск местоположения и близлежащих мест с использованием реальных данных через REST API. Он также поддерживает темный режим, макеты RTL и несколько языков.
Проект поставляется с бэкендом и документацией Swagger API для простого тестирования.
Сейчас проект можно скачать бесплатно.
Uber Clone with React Native: https://www.devsolve.club/toolbox/uber-clone-app-react-native-with-dark-mode-rtl-and-localization/
Платформа: кроссплатформа
🤣3
Изучаем панели вкладок в iOS 26 с Liquid Glass
Если у вашего приложения есть панель вкладок (Tab Bar), и вы перекомпилируете его с помощью Xcode 26, вы автоматически увидите, что ваша панель вкладок имеет новый вид и ощущение на основе Liquid Glass. В этой статье мы рассмотрим новую панель вкладок и какие новые возможности мы получили с редизайном Liquid Glass. Я также потрачу немного времени на предоставление некоторых советов о том, как вы можете применить модификаторы iOS 26 к вашей панели вкладок, используя «Backport» подход Дэйва ДеЛонга.
К концу этой статьи вы будете гораздо лучше понимать, как Liquid Glass изменяет панель вкладок вашего приложения и как можно настроить ее, чтобы она действительно соответствовала философии дизайна Liquid Glass в iOS 26.
Статья: https://apptractor.ru/info/articles/izuchaem-paneli-vkladok-v-ios-26-s-liquid-glass.html
Платформа: iOS
Если у вашего приложения есть панель вкладок (Tab Bar), и вы перекомпилируете его с помощью Xcode 26, вы автоматически увидите, что ваша панель вкладок имеет новый вид и ощущение на основе Liquid Glass. В этой статье мы рассмотрим новую панель вкладок и какие новые возможности мы получили с редизайном Liquid Glass. Я также потрачу немного времени на предоставление некоторых советов о том, как вы можете применить модификаторы iOS 26 к вашей панели вкладок, используя «Backport» подход Дэйва ДеЛонга.
К концу этой статьи вы будете гораздо лучше понимать, как Liquid Glass изменяет панель вкладок вашего приложения и как можно настроить ее, чтобы она действительно соответствовала философии дизайна Liquid Glass в iOS 26.
Статья: https://apptractor.ru/info/articles/izuchaem-paneli-vkladok-v-ios-26-s-liquid-glass.html
Платформа: iOS
👍3
Что такое @concurrent в Swift 6.2
В Swift 6.2 введено два связанных нововведения:
Контекст: nonisolated(nonsending)
• Раньше
• Это приводило к путанице и необходимости маркировать типы как
• В Swift 6.2 теперь есть
• Это снижает уровень конкуренции и делает код проще в понимании
Можно активировать поведение по умолчанию через feature‑флаг
@concurrent: явная распаковка
• Чтобы всё же запустить функцию вне актора (то есть на глобальном пуле), используется аннотация
Пример:
•
• Можно использовать на методах внутри
Важно: нельзя сочетать
Когда применять @concurrent
• Оператор служит явным индикатором: этот фрагмент должен работать параллельно, независимо от контекста вызывающего.
• Но это добавляет сложности — требуется
• Не стоит использовать
Пример из статьи
Был такой код:
Декодирование могло тормозить интерфейс. Решением стало:
Итого
•
•
Используйте
Яркий пример того, как Swift 6.2 делает управление конкуренцией более понятным и предсказуемым. Думаю, такие улучшения пойдут на пользу разработчикам.
Статья: https://www.donnywals.com/what-is-concurrent-in-swift-6-2/
Платформа: iOS
В Swift 6.2 введено два связанных нововведения:
nonisolated(nonsending) и @concurrent.Контекст: nonisolated(nonsending)
• Раньше
nonisolated async функции запускались в глобальном исполнителе (обычно в фоне), а nonisolated синхронные — на вызвавшем акторе • Это приводило к путанице и необходимости маркировать типы как
Sendable• В Swift 6.2 теперь есть
nonisolated(nonsending) и async, и синхронные функции запускаются на акторе вызывающего, если он есть, без автоматической распаковки в глобальный пул • Это снижает уровень конкуренции и делает код проще в понимании
Можно активировать поведение по умолчанию через feature‑флаг
NonIsolatedNonSendingByDefault.@concurrent: явная распаковка
• Чтобы всё же запустить функцию вне актора (то есть на глобальном пуле), используется аннотация
@concurrent Пример:
@concurrent
func decode<T: Decodable>(_ data: Data) async throws -> T {
// код выполняется в глобальном исполнителе
}
•
@concurrent автоматически делает функцию nonisolated, чтобы не нужно было писать это вручную • Можно использовать на методах внутри
@MainActor классов или акторов, при условии что функция не имеет явной изоляцииВажно: нельзя сочетать
@concurrent с явной изоляцией (@MainActor, nonisolated(nonsending)).Когда применять @concurrent
• Оператор служит явным индикатором: этот фрагмент должен работать параллельно, независимо от контекста вызывающего.
• Но это добавляет сложности — требуется
Sendable для передаваемых данных • Не стоит использовать
@concurrent без причины: например, для сетевых запросов с await — там и так работает асинхронность в фоне. Лучше применять @concurrent только для CPU‑интенсивных задач, например, тяжёлой декодировки.Пример из статьи
Был такой код:
func decode<T: Decodable>(_ data: Data) async throws -> T {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
}Декодирование могло тормозить интерфейс. Решением стало:
@concurrent
func decode<T: Decodable>(_ data: Data) async throws -> T { ... }
Итого
•
nonisolated(nonsending) — по умолчанию в Swift 6.2: выполняет код на акторе вызывающего•
@concurrent — позволяет явно выполнить функцию вне актора, в global executorИспользуйте
@concurrent осознанно, когда необходимо распараллеливание тяжёлых операций.Яркий пример того, как Swift 6.2 делает управление конкуренцией более понятным и предсказуемым. Думаю, такие улучшения пойдут на пользу разработчикам.
Статья: https://www.donnywals.com/what-is-concurrent-in-swift-6-2/
Платформа: iOS
Donny Wals
What is @concurrent in Swift 6.2? – Donny Wals
Swift 6.2 makes significant changes to concurrency, and because of that we have to understand a brand new mechanism to offload work to a background thread in Swift 6.2. Learn everything you need to…
👍4
Тестирование LottieAnimation в Compose
Команда Just Eat рассказала, как они подошли к тестированию Lottie-анимаций в приложении на Jetpack Compose. Проблема в том, что
Цель — убедиться, что нужная Lottie-анимация действительно отображается на экране в нужный момент (например, при загрузке контента).
Решение — создание обёртки над
• принимает
• предоставляет
• отделяет визуальную часть от состояния анимации
Вот как это выглядит в коде:
Важно проектировать UI-компоненты так, чтобы их было удобно тестировать. Даже если сам компонент “неподконтрольный” (как
Статья: https://medium.com/justeattakeaway-tech/testing-a-lottieanimation-in-compose-2f94329a3079
Платформа: Android
Команда Just Eat рассказала, как они подошли к тестированию Lottie-анимаций в приложении на Jetpack Compose. Проблема в том, что
LottieAnimation не предоставляет ID элемента или простой способ проверить текущий статус анимации через тесты. А значит — привычные подходы UI-тестирования здесь не работают.Цель — убедиться, что нужная Lottie-анимация действительно отображается на экране в нужный момент (например, при загрузке контента).
Решение — создание обёртки над
LottieAnimation, которая:• принимает
modifier.testTag(...) для тестирования• предоставляет
composition и progress как параметры• отделяет визуальную часть от состояния анимации
Вот как это выглядит в коде:
@Composable
fun TestableLottieAnimation(
@RawRes animationRes: Int,
progress: LottieProgress = { it },
modifier: Modifier = Modifier,
) {
val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(animationRes))
LottieAnimation(
composition = composition,
progress = progress,
modifier = modifier.testTag("lottie_animation")
)
}
Важно проектировать UI-компоненты так, чтобы их было удобно тестировать. Даже если сам компонент “неподконтрольный” (как
LottieAnimation), вы всегда можете обернуть его в свой Composable и получить точку доступа для тестов.Статья: https://medium.com/justeattakeaway-tech/testing-a-lottieanimation-in-compose-2f94329a3079
Платформа: Android
👍1🤯1🤡1
AvatarAiPayWall - это пейвол на основе SwiftUI, разработанный для улучшения пользовательского опыта с помощью визуально привлекательных элементов. Этот проект служит практическим упражнением по разработке пейволов в iOS-приложениях с использованием SwiftUI. Пейвол включает анимированные компоненты, градиентные фоны и карусель изображений для привлечения пользователей и поощрения подписок.
AvatarAiPayWall на GitHub: https://github.com/ayush1714/AvatarAiPayWall
Платформа: iOS
⭐️: 5
AvatarAiPayWall на GitHub: https://github.com/ayush1714/AvatarAiPayWall
Платформа: iOS
⭐️: 5
👍2🤮1
Пошаговое руководство по написанию эксплойта ядра iOS
Эксплойты ядра iOS всегда вызывали у меня огромный интерес. За последние годы эксплуатация ядра стала значительно сложнее, и традиционные уязвимости (например, связанные с повреждением виртуальной памяти) стали встречаться реже.
Тем не менее, летом 2023 года felix-pb выпустил три эксплойта под названием kfd. Это были первые опубликованные эксплойты ядра, работавшие на iOS 15.6 и выше.
Разрабатывая джейлбрейк для iOS 14 (Apex), я реализовал собственный эксплойт для уязвимости Physpuppet. В этой статье объясню, как эксплуатировать уязвимость типа physical use-after-free на современных версиях iOS.
Статья: https://habr.com/ru/companies/bastion/articles/920922/
Платформа: iOS
Эксплойты ядра iOS всегда вызывали у меня огромный интерес. За последние годы эксплуатация ядра стала значительно сложнее, и традиционные уязвимости (например, связанные с повреждением виртуальной памяти) стали встречаться реже.
Тем не менее, летом 2023 года felix-pb выпустил три эксплойта под названием kfd. Это были первые опубликованные эксплойты ядра, работавшие на iOS 15.6 и выше.
Разрабатывая джейлбрейк для iOS 14 (Apex), я реализовал собственный эксплойт для уязвимости Physpuppet. В этой статье объясню, как эксплуатировать уязвимость типа physical use-after-free на современных версиях iOS.
Статья: https://habr.com/ru/companies/bastion/articles/920922/
Платформа: iOS
👍3
ИИ против реверс-инжиниринга: сделает ли ИИ обфускацию Android R8 устаревшей?
Эксперимент показывает: обфускация с помощью R8 уже не препятствие для GPT‑4o + JADX. ИИ распознаёт Compose‑UI, ViewModel и бизнес‑логику — достаточно правильно подготовленного запроса.
🚨 Итог – разработчиков ждёт новая реальность:
• R8 по‑прежнему нужен для оптимизации, но его недостаточно для защиты;
• Требуется усиление: многослойная защита, CI/CD‑настройка, ограничение доступа AI к артефактам;
• Безопасность теперь включает не только код, но и управление ИИ и контекстом.
Мы вступаем в эру, где ИИ и безопасность становятся двумя сторонами одной медали. Необходимо реагировать уже сейчас.
Статья: https://proandroiddev.com/ai-vs-reverse-engineering-will-ai-make-android-r8-obfuscation-obsolete-f0ba7cd39ef7
Платформа: Android
Эксперимент показывает: обфускация с помощью R8 уже не препятствие для GPT‑4o + JADX. ИИ распознаёт Compose‑UI, ViewModel и бизнес‑логику — достаточно правильно подготовленного запроса.
🚨 Итог – разработчиков ждёт новая реальность:
• R8 по‑прежнему нужен для оптимизации, но его недостаточно для защиты;
• Требуется усиление: многослойная защита, CI/CD‑настройка, ограничение доступа AI к артефактам;
• Безопасность теперь включает не только код, но и управление ИИ и контекстом.
Мы вступаем в эру, где ИИ и безопасность становятся двумя сторонами одной медали. Необходимо реагировать уже сейчас.
Статья: https://proandroiddev.com/ai-vs-reverse-engineering-will-ai-make-android-r8-obfuscation-obsolete-f0ba7cd39ef7
Платформа: Android
👍3🔥1