Swift 6.4: наконец-то кажется, что Apple прислушалась
Большую часть прошлого года я боролся с атрибутами
Статья: https://apptractor.ru/info/articles/swift-6-4-nakonets-to-kazhetsya-chto-apple-prislushalas.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Большую часть прошлого года я боролся с атрибутами
@available, которые растягивались сразу на пять платформ, и с асинхронными функциями, где код очистки приходилось дублировать в трёх местах «на случай, если что-то выбросит ошибку». Теперь понятно, о чём я говорил, когда тогда вляпался в эту проблему — Swift 6.4 тихо исправил обе эти головные боли и ещё несколько вещей, которые тормозили меня, хотя я даже не замечал этого, пока они не исчезли.Статья: https://apptractor.ru/info/articles/swift-6-4-nakonets-to-kazhetsya-chto-apple-prislushalas.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Mugshot - скриншот-тесты на основе превью Compose
Вы, вероятно, уже создали
Почему стоит Mugshot:
• Не нужно писать отдельные классы тестов или поддерживать актуальность списка экранов. Процессор KSP находит все превью с аннотацией и генерирует тесты автоматически: добавление превью приводит к созданию скриншота, а удаление — к его исчезновению.
• Библиотека работает в модулях Kotlin Multiplatform. Превью в
• Это быстро. В приложении из 30 модулей с 7176 скриншотами Mugshot выполнил проверку за 58 секунд. Paparazzi потребовалось 89 секунд, а решение Google (Compose Preview Screenshot Testing) завершилось с ошибкой нехватки памяти при стандартных настройках. Подробности и репозиторий для самостоятельного запуска теста доступны в бенчмарке.
• Библиотека не создает проблем при настройке Gradle. Тесты со скриншотами выполняются в отдельной задаче и отдельном процессе JVM, поэтому они не конфликтуют с Robolectric, а плагин Gradle поддерживает кэширование конфигурации.
Mugshot на GitHub: https://github.com/TRazDev/Mugshot
Платформа: Android
⭐️: 305
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Вы, вероятно, уже создали
@Preview для большинства своих экранов. Mugshot — это библиотека для тестирования на основе скриншотов, которая превращает каждый такой превью-экран в тест: достаточно добавить аннотацию @Mugshot и один раз записать эталонное изображение (golden image), после чего сборка будет падать при любом изменении экрана. Рендеринг экранов происходит в JVM с использованием layoutlib — того же движка, который обеспечивает работу превью в Android Studio, — поэтому тесты выполняются как обычные unit-тесты на любой машине, способной собрать ваше приложение.Почему стоит Mugshot:
• Не нужно писать отдельные классы тестов или поддерживать актуальность списка экранов. Процессор KSP находит все превью с аннотацией и генерирует тесты автоматически: добавление превью приводит к созданию скриншота, а удаление — к его исчезновению.
• Библиотека работает в модулях Kotlin Multiplatform. Превью в
commonMain подхватываются так же, как и любые другие, а ресурсы Compose Multiplatform (включая stringResource) корректно отображаются на эталонных изображениях.• Это быстро. В приложении из 30 модулей с 7176 скриншотами Mugshot выполнил проверку за 58 секунд. Paparazzi потребовалось 89 секунд, а решение Google (Compose Preview Screenshot Testing) завершилось с ошибкой нехватки памяти при стандартных настройках. Подробности и репозиторий для самостоятельного запуска теста доступны в бенчмарке.
• Библиотека не создает проблем при настройке Gradle. Тесты со скриншотами выполняются в отдельной задаче и отдельном процессе JVM, поэтому они не конфликтуют с Robolectric, а плагин Gradle поддерживает кэширование конфигурации.
Mugshot на GitHub: https://github.com/TRazDev/Mugshot
Платформа: Android
⭐️: 305
Please open Telegram to view this post
VIEW IN TELEGRAM
Google выпустил Agent Development Kit для Kotlin
Kotlin ADK позволяет определять поведение агента, оркестрацию и использование инструментов непосредственно в коде. По словам разработчиков, он обеспечивает точный контроль и гибкость, а также поддерживает отладку, версионирование и развёртывание как локально, так и в облаке.
Агенты на ADK Kotlin могут работать на Android либо полностью локально на устройстве — без API-ключа и без подключения к сети во время выполнения модели, — либо через облако. Локальный вариант предназначен для сценариев, где важны офлайн-работа, низкая задержка или конфиденциальность.
Новость: https://apptractor.ru/info/news/google-vypustil-agent-development-kit-dlya-kotlin.html
Платформа: Android/Kotlin
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Kotlin ADK позволяет определять поведение агента, оркестрацию и использование инструментов непосредственно в коде. По словам разработчиков, он обеспечивает точный контроль и гибкость, а также поддерживает отладку, версионирование и развёртывание как локально, так и в облаке.
Агенты на ADK Kotlin могут работать на Android либо полностью локально на устройстве — без API-ключа и без подключения к сети во время выполнения модели, — либо через облако. Локальный вариант предназначен для сценариев, где важны офлайн-работа, низкая задержка или конфиденциальность.
Новость: https://apptractor.ru/info/news/google-vypustil-agent-development-kit-dlya-kotlin.html
Платформа: Android/Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему спидтест говорит «всё хорошо», а игра лагает: как я построил Latency Dashboard и научил пинг не врать
Это третья статья про NetDiag+ — iOS-утилиту сетевой диагностики, которую я пишу один. В первой было про ICMP-сокеты без entitlements и traceroute, во второй — про MTR, Path MTU и детект блокировок по SNI. Сегодня — про инструмент, который отвечает на вопрос «почему лагает», и про баг в самом пинге, который я нашёл только потому, что положил рядом с телефоном ноутбук.
Спойлер: правильно измерить RTT на телефоне сложнее, чем отправить. Отправить — это
Статья: https://habr.com/ru/articles/1085252/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Это третья статья про NetDiag+ — iOS-утилиту сетевой диагностики, которую я пишу один. В первой было про ICMP-сокеты без entitlements и traceroute, во второй — про MTR, Path MTU и детект блокировок по SNI. Сегодня — про инструмент, который отвечает на вопрос «почему лагает», и про баг в самом пинге, который я нашёл только потому, что положил рядом с телефоном ноутбук.
Спойлер: правильно измерить RTT на телефоне сложнее, чем отправить. Отправить — это
sendto(). Измерить — семь раундов на устройстве, пять дефектов и один латентный баг, живший в приложении с версии 1.0.Статья: https://habr.com/ru/articles/1085252/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
iPhone Duo для iOS-разработчика: что реально меняется в вашем Swift-коде
9 сентября 2026 года Apple показала iPhone Duo — свой первый складной iPhone. Внешний экран 5.4″, внутренний 7.6″ в раскрытом виде, поставка с iOS 27.1, старт продаж 23 октября. Для пользователя история про железо и «самый тонкий iPhone». Для нас с вами история в другом: часть допущений, зашитых в iPhone-приложения с 2007 года, перестала быть правдой.
Экранов теперь больше одного. Экран может менять форму прямо во время работы приложения. Safe area больше не симметрична. А «только портрет» означает совсем не то, что вы привыкли под этим понимать.
Хорошая новость: если вы уже делали адаптивную вёрстку по-человечески ради iPad, здесь работы на один вечер. Если приложение хардкодит размеры экрана и ветвится по ориентации — придётся засучить рукава.
Статья: https://habr.com/ru/articles/1084944/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
9 сентября 2026 года Apple показала iPhone Duo — свой первый складной iPhone. Внешний экран 5.4″, внутренний 7.6″ в раскрытом виде, поставка с iOS 27.1, старт продаж 23 октября. Для пользователя история про железо и «самый тонкий iPhone». Для нас с вами история в другом: часть допущений, зашитых в iPhone-приложения с 2007 года, перестала быть правдой.
Экранов теперь больше одного. Экран может менять форму прямо во время работы приложения. Safe area больше не симметрична. А «только портрет» означает совсем не то, что вы привыкли под этим понимать.
Хорошая новость: если вы уже делали адаптивную вёрстку по-человечески ради iPad, здесь работы на один вечер. Если приложение хардкодит размеры экрана и ветвится по ориентации — придётся засучить рукава.
Статья: https://habr.com/ru/articles/1084944/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
SwiftTUI - семантика SwiftUI для терминала
SwiftTUI — это фреймворк для создания пользовательских интерфейсов в терминале на macOS, Linux и Windows. Вы описываете представления (
SwiftTUI на GitHub: https://github.com/SwiftTUI/swift-tui
Платформа: iOS
⭐️: 178
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
SwiftTUI — это фреймворк для создания пользовательских интерфейсов в терминале на macOS, Linux и Windows. Вы описываете представления (
View) с использованием @State, стеков, контролов, фокуса, жестов и анимации — применяя декларативную модель, доказавшую свою эффективность в SwiftUI, — а фреймворк берет на себя задачи по компоновке, обработке ввода, отрисовке и взаимодействию с самим терминалом.SwiftTUI на GitHub: https://github.com/SwiftTUI/swift-tui
Платформа: iOS
⭐️: 178
Please open Telegram to view this post
VIEW IN TELEGRAM
Кросс-компиляция под андроид и не только
Сегодня широко используют cmake add_subdirectory и сборку через Gradle для кросс-компиляции сишных библиотек под андроид. Мы же рассмотрим более продвинутый и универсальный способ, который работает со множеством систем сборки и позволяет любым проектам найти свои зависимости без написания отдельных костылей под каждый проект.
Статья: https://habr.com/ru/articles/1085858/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Сегодня широко используют cmake add_subdirectory и сборку через Gradle для кросс-компиляции сишных библиотек под андроид. Мы же рассмотрим более продвинутый и универсальный способ, который работает со множеством систем сборки и позволяет любым проектам найти свои зависимости без написания отдельных костылей под каждый проект.
Статья: https://habr.com/ru/articles/1085858/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Как мы вдвоем писали кроссплатформенный мессенджер: Compose Multiplatform, SFU на Go и сжатие трафика
Идея написать собственный мессенджер появилась не от хорошей жизни. У нас была конкретная прикладная потребность: получить полностью независимый инструмент связи, который не завязан на сторонние облачные сервисы, нормально поднимается на скромных серверах и адекватно ведет себя при перебоях со связью.
Мы разрабатывали другой проект, и поначалу для него был написан минимальный чат на CodeIgniter 4 с Vanilla JS и CSS плюс WebSocket‑сервер на Go. Затем стало очевидно, что такой чат слабоват, а для проекта, ориентированного на бизнес‑среду (B2B), еще и недостаточно безопасен. Тогда мы начали внедрять шифрование. Постепенно улучшали код, дорабатывали архитектуру и в какой‑то момент решили выделить мессенджер в самостоятельный проект — заодно хотелось получить реальный опыт в мобильной разработке. А потом просто увлеклись.
Статья: https://habr.com/ru/articles/1085446/
Платформа: кроссплатформа
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Идея написать собственный мессенджер появилась не от хорошей жизни. У нас была конкретная прикладная потребность: получить полностью независимый инструмент связи, который не завязан на сторонние облачные сервисы, нормально поднимается на скромных серверах и адекватно ведет себя при перебоях со связью.
Мы разрабатывали другой проект, и поначалу для него был написан минимальный чат на CodeIgniter 4 с Vanilla JS и CSS плюс WebSocket‑сервер на Go. Затем стало очевидно, что такой чат слабоват, а для проекта, ориентированного на бизнес‑среду (B2B), еще и недостаточно безопасен. Тогда мы начали внедрять шифрование. Постепенно улучшали код, дорабатывали архитектуру и в какой‑то момент решили выделить мессенджер в самостоятельный проект — заодно хотелось получить реальный опыт в мобильной разработке. А потом просто увлеклись.
Статья: https://habr.com/ru/articles/1085446/
Платформа: кроссплатформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Перенесите свои приложения на Googlebook с помощью адаптивной разработки
Адаптивная разработка — это естественный способ, с помощью которого современные Android-приложения масштабируются под большие дисплеи, новые положения устройств и появляющиеся форм-факторы. Если ваше приложение уже использует адаптивные макеты, оно практически готово к Googlebook. Опираясь на существующую базу адаптивного UI, классы размеров окон и поддержку нескольких способов ввода, можно предоставить полностью оптимизированный опыт.
Статья: https://apptractor.ru/info/articles/perenesite-svoi-prilozheniya-na-googlebook-s-pomoschyu-adaptivnoy-razrabotki.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Адаптивная разработка — это естественный способ, с помощью которого современные Android-приложения масштабируются под большие дисплеи, новые положения устройств и появляющиеся форм-факторы. Если ваше приложение уже использует адаптивные макеты, оно практически готово к Googlebook. Опираясь на существующую базу адаптивного UI, классы размеров окон и поддержку нескольких способов ввода, можно предоставить полностью оптимизированный опыт.
Статья: https://apptractor.ru/info/articles/perenesite-svoi-prilozheniya-na-googlebook-s-pomoschyu-adaptivnoy-razrabotki.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
AppFiles - Mobile Development
Перенесите свои приложения на Googlebook с помощью адаптивной разработки Адаптивная разработка — это естественный способ, с помощью которого современные Android-приложения масштабируются под большие дисплеи, новые положения устройств и появляющиеся форм-факторы.…
LastWave - клиент YouTube Music нового поколения
LastWave — это современное нативное Android-приложение для прослушивания музыки, использующее обширный каталог YouTube Music и созданное для тех, кто ценит умные рекомендации, динамичную визуализацию и удобное отслеживание истории прослушиваний. Приложение, разработанное с использованием дизайна Material 3 Expressive, предлагает комфортное воспроизведение музыки без рекламы, генератор умных плейлистов на базе ИИ, синхронизированные тексты песен (караоке) в реальном времени и встроенный скробблер Last.fm, отслеживающий прослушивание треков в ваших любимых музыкальных сервисах.
Технологический стек и архитектура:
• Язык и UI: 100% Kotlin + Jetpack Compose (Material 3 Expressive)
• Аудиодвижок: AndroidX Media3 ExoPlayer с элементами управления воспроизведением на экране блокировки и интеграцией с Android Auto
• Каталог потокового вещания: движок YouTube Music с использованием высокоэффективного аудиокодека Opus
• Скробблинг и отслеживание: API Last.fm и нативное отслеживание медиасессий ОС
• Система отображения текстов: синхронизация текста с точностью до миллисекунд (LRCLIB)
• Архитектура: MVVM + Clean Architecture, Room DB, Jetpack DataStore, Dagger Hilt, Coroutines и Flow
LastWave на GitHub: https://github.com/Clash-Projects/LastWave-Native
Платформа: Android
⭐️: 735
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
LastWave — это современное нативное Android-приложение для прослушивания музыки, использующее обширный каталог YouTube Music и созданное для тех, кто ценит умные рекомендации, динамичную визуализацию и удобное отслеживание истории прослушиваний. Приложение, разработанное с использованием дизайна Material 3 Expressive, предлагает комфортное воспроизведение музыки без рекламы, генератор умных плейлистов на базе ИИ, синхронизированные тексты песен (караоке) в реальном времени и встроенный скробблер Last.fm, отслеживающий прослушивание треков в ваших любимых музыкальных сервисах.
Технологический стек и архитектура:
• Язык и UI: 100% Kotlin + Jetpack Compose (Material 3 Expressive)
• Аудиодвижок: AndroidX Media3 ExoPlayer с элементами управления воспроизведением на экране блокировки и интеграцией с Android Auto
• Каталог потокового вещания: движок YouTube Music с использованием высокоэффективного аудиокодека Opus
• Скробблинг и отслеживание: API Last.fm и нативное отслеживание медиасессий ОС
• Система отображения текстов: синхронизация текста с точностью до миллисекунд (LRCLIB)
• Архитектура: MVVM + Clean Architecture, Room DB, Jetpack DataStore, Dagger Hilt, Coroutines и Flow
LastWave на GitHub: https://github.com/Clash-Projects/LastWave-Native
Платформа: Android
⭐️: 735
Please open Telegram to view this post
VIEW IN TELEGRAM
•
(iOS En) Vertical Segmented Control Like iPhone Duo Using SwiftUI•
(iOS En) New SwiftUI APIs for iPhone Duo•
(iOS En) SwiftUI Alerts & Confirmation Dialogs in iOS 27•
(And En) My Local AI Coding Workflow (Hardware, Setup, Implementation)•
(And En) Kotlin's Name-Based Destructuring•
(Crs En) Swift Export: Where We Stand•
(Crs En) Building AI‑Powered Web Apps in Kotlin/Wasm•
(Dev Ru) Математики останутся без работы? — AI, Навье–Стокс, Lean, OpenAI•
(Dev Ru) Сопротивление ИИ: как сеньор-разработчик внедрил то, против чего был сам•
(Dev En) Jev in Action: AI Matched My Resume to 747 Jobs in 10 Seconds•
(Dev En) TimescaleDB Course – PostgreSQL for Time-Series DataПрошлогодние видео:
•
(iOS Ru) Ускоряем SwiftUI с Observable•
(iOS Ru) Как укротить виджеты в супераппе?•
(iOS Ru) UICollectionViewLayout с самого начала•
(iOS Ru) UITableView с различными типами ячеек•
(And Ru) Роболектрик-скриншот-тесты на платформе Android•
(And Ru) Поймай меня, если сможешь: как обнаружить Root и Frida•
(And Ru) Размер имеет значение: как измерить и уменьшить вес Android-приложения•
(And Ru) Установка Android-приложений от доисторических времен до наших дней•
(Crs Ru) React Native перевернул игру•
(Crs Ru) Темная сторона изолятов в DartPlease open Telegram to view this post
VIEW IN TELEGRAM
Как я всё‑таки опубликовала игру в Google Play из России
Когда я только начала разбираться, как опубликовать приложение в Google Play из России, у меня довольно быстро появилось ощущение, что я занимаюсь чем‑то если не запрещённым, то как минимум подозрительным. Почти везде логика была примерно одинаковой: из России вроде бы можно, но желательно иметь иностранную карту, иностранный адрес, иностранный номер телефона, жить где‑нибудь в Сербии, Грузии или Казахстане и, по возможности, вообще перестать быть российским разработчиком.
Очень обнадёживающе.
Статья: https://habr.com/ru/articles/1086240/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Когда я только начала разбираться, как опубликовать приложение в Google Play из России, у меня довольно быстро появилось ощущение, что я занимаюсь чем‑то если не запрещённым, то как минимум подозрительным. Почти везде логика была примерно одинаковой: из России вроде бы можно, но желательно иметь иностранную карту, иностранный адрес, иностранный номер телефона, жить где‑нибудь в Сербии, Грузии или Казахстане и, по возможности, вообще перестать быть российским разработчиком.
Очень обнадёживающе.
Статья: https://habr.com/ru/articles/1086240/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
💩5