Ошибка, которую я не мог воспроизвести — пока не перестал тестировать на своём телефоне
Три недели назад я начал получать сообщения от пользователей приложения, которое мы выпустили в прошлом году.
«Приложение постоянно перезапускается после того, как я делаю снимок».
Оно не зависало и не выдавало ошибок. Просто закрывалось и перезапускалось.
Самое странное, что на моём телефоне всё работало идеально. И на устройствах моих коллег тоже.
Поначалу это казалось какой-то «призрачной ошибкой», которая проявляется только тогда, когда пользователь находится далеко, и вы не видите его экран.
Но это приложение — инструмент на основе GPS для сбора данных. Пользователи сканируют штрихкод, чтобы предотвратить дублирование активов, заполняют несколько экранов с подробными данными, делают снимки, регистрируют серийные и модельные номера, и мы сохраняем всё локально перед синхронизацией с сервером. Изображения автоматически сжимаются до 100 КБ или меньше, поэтому загрузка работает даже в медленных сетях.
Это серьёзный рабочий процесс. Не приложение типа «заполнил одну форму и отправил».
И где-то внутри этого процесса всё начало разваливаться.
Статья: https://apptractor.ru/info/articles/oshibka-kotoruyu-ya-ne-mog-vosproizvesti-poka-ne-perestal-testirovat-na-svoyom-telefone.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Три недели назад я начал получать сообщения от пользователей приложения, которое мы выпустили в прошлом году.
«Приложение постоянно перезапускается после того, как я делаю снимок».
Оно не зависало и не выдавало ошибок. Просто закрывалось и перезапускалось.
Самое странное, что на моём телефоне всё работало идеально. И на устройствах моих коллег тоже.
Поначалу это казалось какой-то «призрачной ошибкой», которая проявляется только тогда, когда пользователь находится далеко, и вы не видите его экран.
Но это приложение — инструмент на основе GPS для сбора данных. Пользователи сканируют штрихкод, чтобы предотвратить дублирование активов, заполняют несколько экранов с подробными данными, делают снимки, регистрируют серийные и модельные номера, и мы сохраняем всё локально перед синхронизацией с сервером. Изображения автоматически сжимаются до 100 КБ или меньше, поэтому загрузка работает даже в медленных сетях.
Это серьёзный рабочий процесс. Не приложение типа «заполнил одну форму и отправил».
И где-то внутри этого процесса всё начало разваливаться.
Статья: https://apptractor.ru/info/articles/oshibka-kotoruyu-ya-ne-mog-vosproizvesti-poka-ne-perestal-testirovat-na-svoyom-telefone.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Обратное маскирование в SwiftUI с использованием режимов наложения
Представьте себе карточку, залитую цветом, на поверхности которой вырезана фигура.
Карточка видима везде, кроме области, где расположена фигура. Эта область становится прозрачной.
В UIKit вы можете использовать Core Graphics или маски слоев.
В SwiftUI решение заключается в режимах наложения.
Статья: https://apptractor.ru/info/articles/obratnoe-maskirovanie-v-swiftui-s-ispolzovaniem-rezhimov-nalozheniya.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Представьте себе карточку, залитую цветом, на поверхности которой вырезана фигура.
Карточка видима везде, кроме области, где расположена фигура. Эта область становится прозрачной.
В UIKit вы можете использовать Core Graphics или маски слоев.
В SwiftUI решение заключается в режимах наложения.
Статья: https://apptractor.ru/info/articles/obratnoe-maskirovanie-v-swiftui-s-ispolzovaniem-rezhimov-nalozheniya.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Skelter Project - готовый шаблон проекта на Flutter
Skelter Project - готовый проект, включающий в себя лучшие практики, современную архитектуру и шаблонный код для быстрой разработки приложений.
Технологический стек:
• Flutter: ^3.35.7
• Dart SDK: ^3.9.2
• Управление состояниями: BLoC
• Навигация: Auto Route
• Бэкенд: Firebase (Core, Analytics, Crashlytics, Auth)
• Аутентификация: Firebase Auth, Google Sign-In, Apple Sign-In
• UI-компоненты: кастомные виджеты, Flutter SVG, эффекты мерцания
• Тестирование: Flutter Test, Bloc Test, Alchemist (Golden Tests), Mocktail
• Генерация кода: Build Runner, Auto Route Generator, Flutter Gen Runner
Skelter Project на GitHub: https://github.com/solguruz/skelter
Платформа: кроссплатформа/Flutter
⭐️: 79
Skelter Project - готовый проект, включающий в себя лучшие практики, современную архитектуру и шаблонный код для быстрой разработки приложений.
Технологический стек:
• Flutter: ^3.35.7
• Dart SDK: ^3.9.2
• Управление состояниями: BLoC
• Навигация: Auto Route
• Бэкенд: Firebase (Core, Analytics, Crashlytics, Auth)
• Аутентификация: Firebase Auth, Google Sign-In, Apple Sign-In
• UI-компоненты: кастомные виджеты, Flutter SVG, эффекты мерцания
• Тестирование: Flutter Test, Bloc Test, Alchemist (Golden Tests), Mocktail
• Генерация кода: Build Runner, Auto Route Generator, Flutter Gen Runner
Skelter Project на GitHub: https://github.com/solguruz/skelter
Платформа: кроссплатформа/Flutter
⭐️: 79
Combine умер?
Да, Combine теряет часть своей роли на фоне Swift Concurrency и новых средств наблюдения.
Но ни официально не признан устаревшим, ни полностью не прекращает быть полезным, особенно в существующих кодовых базах и для определённых архитектурных задач.
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Да, Combine теряет часть своей роли на фоне Swift Concurrency и новых средств наблюдения.
Но ни официально не признан устаревшим, ни полностью не прекращает быть полезным, особенно в существующих кодовых базах и для определённых архитектурных задач.
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Как мы помогали Стэнфорду следить за акулами
Вот что для этого понадобилось: бэкендеры — 2 штуки, фронтендер — 1 штука, дизайнер — 1 штука, мобильный разработчик — 1 штука, время — 2 учебных семестра.
Продолжаем рассказывать об интересных проектах студентов ФИИТ. В этот раз речь пойдёт о приложении для интерактивного мониторинга белых акул по заказу Стэнфордского университета. 🦈 В статье ребята рассказали, какие возможности реализовали внутри приложения, какой стек технологий выбрали и что за сложности случились на фронтенде и бэкенде.
Статья: https://habr.com/ru/companies/skbkontur/articles/992662/
Платформа: разработка
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Вот что для этого понадобилось: бэкендеры — 2 штуки, фронтендер — 1 штука, дизайнер — 1 штука, мобильный разработчик — 1 штука, время — 2 учебных семестра.
Продолжаем рассказывать об интересных проектах студентов ФИИТ. В этот раз речь пойдёт о приложении для интерактивного мониторинга белых акул по заказу Стэнфордского университета. 🦈 В статье ребята рассказали, какие возможности реализовали внутри приложения, какой стек технологий выбрали и что за сложности случились на фронтенде и бэкенде.
Статья: https://habr.com/ru/companies/skbkontur/articles/992662/
Платформа: разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
Модульная архитектура — это не просто теория, вот доказательства
Среднестатистический разработчик, если его попросят дать определение модульности, вероятно, скажет что-то вроде:
Модульность — это когда вы разбиваете свой код на более мелкие, отдельные части или модули, вместо того чтобы хранить все в одном большом файле. Каждый модуль обрабатывает определенную часть функциональности, и они могут работать вместе, но существовать независимо.
Здесь нет ничего неверного, но это опасно неполно; отсутствует объяснение того, почему это важно — а это крайне важно для понимания того, что такое хорошая модульность.
Статья: https://apptractor.ru/info/articles/modulnaya-arhitektura-eto-ne-prosto-teoriya-vot-dokazatelstva.html
Платформа: iOS/архитектура
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Среднестатистический разработчик, если его попросят дать определение модульности, вероятно, скажет что-то вроде:
Модульность — это когда вы разбиваете свой код на более мелкие, отдельные части или модули, вместо того чтобы хранить все в одном большом файле. Каждый модуль обрабатывает определенную часть функциональности, и они могут работать вместе, но существовать независимо.
Здесь нет ничего неверного, но это опасно неполно; отсутствует объяснение того, почему это важно — а это крайне важно для понимания того, что такое хорошая модульность.
Статья: https://apptractor.ru/info/articles/modulnaya-arhitektura-eto-ne-prosto-teoriya-vot-dokazatelstva.html
Платформа: iOS/архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
Kotlin Android MVVM Template - шаблон Android-приложения
Kotlin Android MVVM Template - простой и легкий шаблон для приложения Jetpack Compose с полностью настроенной навигацией, Retrofit и Dagger-Hilt для вашего удобства, чтобы вы могли сосредоточиться только на важном.
Фичи:
• Полностью на Jetpack Compose
• Jetpack Compose Navigation
• Полностью настроенный Retrofit
• MVVM
• Kotlin DSL
• Gradle Version Catalog для инъекции зависимостей
• detekt для проверки кода
• Dependabot для обновления зависимостей
• GitHub Actions CI/CD для проверки линтера, тестов и сборки APK
• Coil для изображений
Kotlin Android MVVM Template на GitHub: https://github.com/its-me-debk007/kotlin-android-mvvm-template
Платформа: Android
⭐️: 62
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Kotlin Android MVVM Template - простой и легкий шаблон для приложения Jetpack Compose с полностью настроенной навигацией, Retrofit и Dagger-Hilt для вашего удобства, чтобы вы могли сосредоточиться только на важном.
Фичи:
• Полностью на Jetpack Compose
• Jetpack Compose Navigation
• Полностью настроенный Retrofit
• MVVM
• Kotlin DSL
• Gradle Version Catalog для инъекции зависимостей
• detekt для проверки кода
• Dependabot для обновления зависимостей
• GitHub Actions CI/CD для проверки линтера, тестов и сборки APK
• Coil для изображений
Kotlin Android MVVM Template на GitHub: https://github.com/its-me-debk007/kotlin-android-mvvm-template
Платформа: Android
⭐️: 62
Please open Telegram to view this post
VIEW IN TELEGRAM
•
(iOS En) Code-along: Experiment with coding intelligence in Xcode 26•
(iOS En) Meet agentic coding in Xcode •
(iOS En) Complex 3D Animation Effect Using SwiftUI - BlueNote's 3D Paywall Effect•
(iOS En) How to build a better tagging UI in SwiftUI with Antigravity•
(iOS En) SwiftUI Dynamic Island QR Code Scanner•
(And Ru) kotlinx.fuzz: почему фаззинг имеет значение•
(And En) Talking Kotlin #144 | Kotlin 2.3 Release Special (Audio Only)•
(Crs En) How to Encrypt Local Preferences In KMP With KSafe•
(Dev Ru) Лучший AI для программиста в 2025•
(Dev Ru) СДВГ (ADHD) в IT-индустрии — Наука, диагностика и мифы•
(Dev Ru) Как работают программисты в больших IT-компанияхПрошлогодние видео:
•
(iOS Ru) Как поддерживать недельный релизный цикл и ничего не забывать•
(iOS Ru) Реактивный велосипед для SDK•
(And Ru) Разбор кода приложения по доставке пиццы•
(And Ru) Запускаем автотесты Android на EMCEEAppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Под капотом Android Automotive: Что такое VHAL и почему это сердце машины
В прошлой статье мы запустили эмулятор и убедились, что Android Automotive OS (AAOS) — это не просто зеркало вашего телефона. Это самостоятельная экосистема. Но пока мы запускали только стандартные медиа-плееры, мы скользили по поверхности.
Настоящая магия начинается там, где софт встречается с «железом».
В телефоне у вас есть стандартный набор датчиков: GPS, акселерометр, гироскоп. В современном автомобиле таких датчиков тысячи: от давления в шинах и температуры масла до угла поворота руля и статуса каждой двери. Как Android-разработчику получить доступ к этому океану данных? Не будем же мы тянуть провода к OBDII разъему?
Конечно, нет. Для этого Google построила мощный мост, по которому мы сегодня и пройдемся. Добро пожаловать в мир Car API и VHAL.
Статья: https://habr.com/ru/articles/992868/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В прошлой статье мы запустили эмулятор и убедились, что Android Automotive OS (AAOS) — это не просто зеркало вашего телефона. Это самостоятельная экосистема. Но пока мы запускали только стандартные медиа-плееры, мы скользили по поверхности.
Настоящая магия начинается там, где софт встречается с «железом».
В телефоне у вас есть стандартный набор датчиков: GPS, акселерометр, гироскоп. В современном автомобиле таких датчиков тысячи: от давления в шинах и температуры масла до угла поворота руля и статуса каждой двери. Как Android-разработчику получить доступ к этому океану данных? Не будем же мы тянуть провода к OBDII разъему?
Конечно, нет. Для этого Google построила мощный мост, по которому мы сегодня и пройдемся. Добро пожаловать в мир Car API и VHAL.
Статья: https://habr.com/ru/articles/992868/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
HealthQL - SQL для HealthKit
HealthQL - язык запросов, похожий на SQL, для Apple HealthKit. Запрашивайте данные о своем здоровье, используя привычный синтаксис SQL или типобезопасный DSL Swift.
Фичи:
• Синтаксис, похожий на SQL — Запрашивайте HealthKit с помощью привычных операторов SELECT, FROM, WHERE, GROUP BY, ORDER BY, LIMIT
• Типобезопасный Swift DSL — Гибкий API для программного построения запросов
• Поддержка React Native/Expo — Используйте HealthQL в приложениях React Native с полной поддержкой типов TypeScript
• 33 типа данных — Частота сердечных сокращений, шаги, калории, VO2 max, плавание и многое другое
• 5 типов данных категорий — Анализ сна, головная боль, усталость, аппетит, менструации
• Тренировки и сеансы сна — Запрос данных об упражнениях и агрегированных показателей сна
• Функции работы с датами — today(), start_of_week(), start_of_month(), start_of_year()
• Агрегации — SUM, AVG, MIN, MAX, COUNT с поддержкой GROUP BY
• Полная поддержка предикатов — Все операторы сравнения, AND, IS NULL, IS NOT NULL
HealthQL на GitHub: https://github.com/glisom/HealthQL
Платформа: iOS
⭐️: 22
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
HealthQL - язык запросов, похожий на SQL, для Apple HealthKit. Запрашивайте данные о своем здоровье, используя привычный синтаксис SQL или типобезопасный DSL Swift.
SELECT avg(value), min(value), max(value)
FROM heart_rate
WHERE date > today() - 7d
GROUP BY day
Фичи:
• Синтаксис, похожий на SQL — Запрашивайте HealthKit с помощью привычных операторов SELECT, FROM, WHERE, GROUP BY, ORDER BY, LIMIT
• Типобезопасный Swift DSL — Гибкий API для программного построения запросов
• Поддержка React Native/Expo — Используйте HealthQL в приложениях React Native с полной поддержкой типов TypeScript
• 33 типа данных — Частота сердечных сокращений, шаги, калории, VO2 max, плавание и многое другое
• 5 типов данных категорий — Анализ сна, головная боль, усталость, аппетит, менструации
• Тренировки и сеансы сна — Запрос данных об упражнениях и агрегированных показателей сна
• Функции работы с датами — today(), start_of_week(), start_of_month(), start_of_year()
• Агрегации — SUM, AVG, MIN, MAX, COUNT с поддержкой GROUP BY
• Полная поддержка предикатов — Все операторы сравнения, AND, IS NULL, IS NOT NULL
HealthQL на GitHub: https://github.com/glisom/HealthQL
Платформа: iOS
⭐️: 22
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Profile page как в TikTok/Instagram на UIKit (iOS 15+)
Если вам когда-нибудь приходила задача сделать страницу профиля как в популярных социальных сетях, то вы понимаете всю боль верстки такого дизайна на SwiftUI — особенно для версий iOS ниже 16. Готовые решения не гуглятся, полностью рабочих репозиториев нет, ИИ ещё не умеют в такие комплексные задачи, а Telegram скрывает похожий лэйаут за внутренними библиотеками. Давайте разбираться, что тут можно придумать.
Статья: https://habr.com/ru/articles/994088/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Если вам когда-нибудь приходила задача сделать страницу профиля как в популярных социальных сетях, то вы понимаете всю боль верстки такого дизайна на SwiftUI — особенно для версий iOS ниже 16. Готовые решения не гуглятся, полностью рабочих репозиториев нет, ИИ ещё не умеют в такие комплексные задачи, а Telegram скрывает похожий лэйаут за внутренними библиотеками. Давайте разбираться, что тут можно придумать.
Статья: https://habr.com/ru/articles/994088/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Ахиллесова пята SharedPreferences и стоит ли внедрять Datastore как альтернативу
В этой статье я расскажу то, о чём не спрашивают на собесeдованиях и не рассказывают на курсах по Android-разработке — о неявной особенности Android, которая влияет на деградацию производительности и приводит к невоспроизводимым ANR в вашем приложении.
Поделюсь исследованием производительности SharedPreferences, расскажу об их работе в главном потоке и как это связано с потерями кадров при открытии новой Activity, а также детально рассмотрю одну из самых известных альтернатив Datastore.
Статья: https://habr.com/ru/companies/alfa/articles/991556/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
В этой статье я расскажу то, о чём не спрашивают на собесeдованиях и не рассказывают на курсах по Android-разработке — о неявной особенности Android, которая влияет на деградацию производительности и приводит к невоспроизводимым ANR в вашем приложении.
Поделюсь исследованием производительности SharedPreferences, расскажу об их работе в главном потоке и как это связано с потерями кадров при открытии новой Activity, а также детально рассмотрю одну из самых известных альтернатив Datastore.
Статья: https://habr.com/ru/companies/alfa/articles/991556/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
Kotlin Symbol Processing: создаём свой процессор
Dagger/Hilt генерирует DI‑классы, Room генерирует DAO и сущности, Moshi генерирует JSON и т.д. Это экономит тонны времени. Но долгие годы для Kotlin‑проектов приходилось использовать KAPT — Kotlin Annotation Processing, прослойку для совместимости с Java‑аннотациями.
KAPT работал, но имел свои минусы. Он генерирует Java‑стабы из Kotlin‑кода и прогоняет стандартный Java Annotation Processor. Эта махинация замедляет компиляцию: сначала компилятор Kotlin должен переварить ваши исходники в промежуточные Java‑классы, потом снова всё это компилировать. Плюс, KAPT порой криво понимал Kotlin фичи, потому что мыслил категориями Java.
И вот появился Kotlin Symbol Processing (KSP). Это библиотека, которая позволяет писать процессоры напрямую для Kotlin. Обещают до 2х ускорения сборки по сравнению с KAPT, полную поддержку всех фич языка и мультиплатформенность.
Статья: https://habr.com/ru/companies/otus/articles/991044/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Dagger/Hilt генерирует DI‑классы, Room генерирует DAO и сущности, Moshi генерирует JSON и т.д. Это экономит тонны времени. Но долгие годы для Kotlin‑проектов приходилось использовать KAPT — Kotlin Annotation Processing, прослойку для совместимости с Java‑аннотациями.
KAPT работал, но имел свои минусы. Он генерирует Java‑стабы из Kotlin‑кода и прогоняет стандартный Java Annotation Processor. Эта махинация замедляет компиляцию: сначала компилятор Kotlin должен переварить ваши исходники в промежуточные Java‑классы, потом снова всё это компилировать. Плюс, KAPT порой криво понимал Kotlin фичи, потому что мыслил категориями Java.
И вот появился Kotlin Symbol Processing (KSP). Это библиотека, которая позволяет писать процессоры напрямую для Kotlin. Обещают до 2х ускорения сборки по сравнению с KAPT, полную поддержку всех фич языка и мультиплатформенность.
Статья: https://habr.com/ru/companies/otus/articles/991044/
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
MVVM+Coordinator+Factory: Святая Троица внедрения зависимостей
Эта статья - финальный аккорд в нашей трилогии об архитектуре. Мы уже научились наводить порядок внутри экрана с помощью MVVM и управлять потоками переходов через Coordinator. Но остался один неудобный вопрос: кто создаст все эти зависимости? Если ваш Координатор превратился в свалку из десятка сервисов, которые он просто пробрасывает дальше, значит, пришло время внедрить Factory. Вы узнаете, как разделить создание объектов и управление ими, почему глобальные DI-контейнеры - это яд замедленного действия, и как построить систему, где каждый компонент получает только то, что ему нужно, не зная лишнего.
Статья: https://habr.com/ru/articles/993738/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Эта статья - финальный аккорд в нашей трилогии об архитектуре. Мы уже научились наводить порядок внутри экрана с помощью MVVM и управлять потоками переходов через Coordinator. Но остался один неудобный вопрос: кто создаст все эти зависимости? Если ваш Координатор превратился в свалку из десятка сервисов, которые он просто пробрасывает дальше, значит, пришло время внедрить Factory. Вы узнаете, как разделить создание объектов и управление ими, почему глобальные DI-контейнеры - это яд замедленного действия, и как построить систему, где каждый компонент получает только то, что ему нужно, не зная лишнего.
Статья: https://habr.com/ru/articles/993738/
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Усталость от ИИ — это реальность, и никто об этом не говорит
Вы используете ИИ для повышения производительности. Так почему же вы чувствуете себя более измотанным, чем когда-либо? Парадокс, с которым приходится сталкиваться каждому инженеру.
Статья: https://apptractor.ru/info/articles/ustalost-ot-ii-eto-realnost-i-nikto-ob-etom-ne-govorit.html
Платформа: искусственный интеллект
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Вы используете ИИ для повышения производительности. Так почему же вы чувствуете себя более измотанным, чем когда-либо? Парадокс, с которым приходится сталкиваться каждому инженеру.
Статья: https://apptractor.ru/info/articles/ustalost-ot-ii-eto-realnost-i-nikto-ob-etom-ne-govorit.html
Платформа: искусственный интеллект
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Phonograph Plus - музыкальный плеер для Android
Phonograph Plus - легкий, разработанный в соответствии с принципами Material Design, локальный музыкальный плеер для Android. В настоящее время является независимым форком Phonograph, поскольку его поддержка прекращена (он перестал быть активным после 2020 года и был заархивирован в 2023 году), и находится в разработке и поддержке с 2021 года.
Phonograph Plus на GitHub: https://github.com/chr56/Phonograph_Plus
Платформа: Android
⭐️: 627
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Phonograph Plus - легкий, разработанный в соответствии с принципами Material Design, локальный музыкальный плеер для Android. В настоящее время является независимым форком Phonograph, поскольку его поддержка прекращена (он перестал быть активным после 2020 года и был заархивирован в 2023 году), и находится в разработке и поддержке с 2021 года.
Phonograph Plus на GitHub: https://github.com/chr56/Phonograph_Plus
Платформа: Android
⭐️: 627
Please open Telegram to view this post
VIEW IN TELEGRAM
Магия AirDrop: Как Apple заставляет Bluetooth и Wi-Fi работать в одной упряжке
Разбираться во внутренностях AirDrop - это как препарировать фокус иллюзиониста: на сцене всё бесшовно, а за кулисами - вспотевшие инженеры пытаются заставить два разных радиомодуля не конфликтовать за общую антенну. Прочитав этот текст, вы поймете, как Apple фактически создала свой стек протоколов на базе стандартного железа, почему Bluetooth Low Energy - это «швейцар», а Wi-Fi - «грузчик», и как индустрия наконец-то пришла к единому стандарту передачи данных, который не заставляет владельцев Android чувствовать себя лишними на этом празднике жизни.
Когда вы в сотый раз кидаете мем другу через AirDrop, вы вряд ли задумываетесь, что в этот момент ваш iPhone совершает сложнейший технологический пируэт. На бумаге всё просто: два устройства соединяются и передают файл. В реальности же мы имеем дело с кастомным стеком Apple Wireless Direct Link (AWDL), который годами был «вещью в себе». Но к 2026 году правила игры изменились: магия стала открытой.
Статья: https://habr.com/ru/articles/993750/
Платформа: разработка
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Разбираться во внутренностях AirDrop - это как препарировать фокус иллюзиониста: на сцене всё бесшовно, а за кулисами - вспотевшие инженеры пытаются заставить два разных радиомодуля не конфликтовать за общую антенну. Прочитав этот текст, вы поймете, как Apple фактически создала свой стек протоколов на базе стандартного железа, почему Bluetooth Low Energy - это «швейцар», а Wi-Fi - «грузчик», и как индустрия наконец-то пришла к единому стандарту передачи данных, который не заставляет владельцев Android чувствовать себя лишними на этом празднике жизни.
Когда вы в сотый раз кидаете мем другу через AirDrop, вы вряд ли задумываетесь, что в этот момент ваш iPhone совершает сложнейший технологический пируэт. На бумаге всё просто: два устройства соединяются и передают файл. В реальности же мы имеем дело с кастомным стеком Apple Wireless Direct Link (AWDL), который годами был «вещью в себе». Но к 2026 году правила игры изменились: магия стала открытой.
Статья: https://habr.com/ru/articles/993750/
Платформа: разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Магия AirDrop: Как Apple заставляет Bluetooth и Wi-Fi работать в одной упряжке
Разбираться во внутренностях AirDrop - это как препарировать фокус иллюзиониста: на сцене всё бесшовно, а за кулисами - вспотевшие инженеры пытаются заставить два разных радиомодуля не конфликтовать...
10 ошибок в Kotlin, которые незаметно ухудшают производительность
Kotlin не замедляет работу вашего Android-приложения. Замедляете его вы сами. Не из-за больших ошибок. Не из-за неудачных архитектурных решений.
Из-за крошечных, элегантных, «лучших практик», которые незаметно расходуют ресурсы процессора, памяти и кадров.
Вот 10 из них.
Статья: https://apptractor.ru/info/articles/10-oshibok-v-kotlin-kotorye-nezametno-uhudshayut-proizvoditelnost.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Kotlin не замедляет работу вашего Android-приложения. Замедляете его вы сами. Не из-за больших ошибок. Не из-за неудачных архитектурных решений.
Из-за крошечных, элегантных, «лучших практик», которые незаметно расходуют ресурсы процессора, памяти и кадров.
Вот 10 из них.
Статья: https://apptractor.ru/info/articles/10-oshibok-v-kotlin-kotorye-nezametno-uhudshayut-proizvoditelnost.html
Платформа: Android
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣4👎2
TUIkit - UI-фреймворк для терминалов
TUIkit - фреймворк, похожий на SwiftUI, для создания пользовательских терминальных интерфейсов на Swift: без ncurses, без зависимостей от C, только чистый Swift.
TUIkit позволяет создавать приложения, используя тот же декларативный синтаксис, который вы уже знаете из SwiftUI. Определяйте свой пользовательский интерфейс с помощью View, создавайте представления с помощью VStack, HStack и ZStack, стилизуйте текст с помощью модификаторов, таких как .bold() и .foregroundColor(.red), и запускайте все это в терминале.
TUIkit на GitHub: https://github.com/phranck/TUIkit
Платформа: iOS
⭐️: 69
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
TUIkit - фреймворк, похожий на SwiftUI, для создания пользовательских терминальных интерфейсов на Swift: без ncurses, без зависимостей от C, только чистый Swift.
TUIkit позволяет создавать приложения, используя тот же декларативный синтаксис, который вы уже знаете из SwiftUI. Определяйте свой пользовательский интерфейс с помощью View, создавайте представления с помощью VStack, HStack и ZStack, стилизуйте текст с помощью модификаторов, таких как .bold() и .foregroundColor(.red), и запускайте все это в терминале.
TUIkit на GitHub: https://github.com/phranck/TUIkit
Платформа: iOS
⭐️: 69
Please open Telegram to view this post
VIEW IN TELEGRAM
PassThroughWindow в iOS 26: наложенное окно, которое не перехватывает жесты
Overlay окна удобны, когда вам нужен пользовательский интерфейс, который располагается поверх всего остального. Вспомните о глобальных всплывающих уведомлениях, сетевых баннерах, строках состояния вызова, плавающих панелях отладки или контекстном меню, которое вы хотите отображать независимо от основной иерархии представлений.
Недостаток очевиден: окно UIWindow, расположенное поверх вашего приложения, перехватывает все пространство для жестов. Даже если наложенное окно визуально «пустое» вокруг вашего всплывающего уведомления, система все равно может сначала перенаправлять касания в это верхнее окно. В результате приложение работает некорректно: прокрутка в окнах перестает работать, кнопки под наложением перестают реагировать, и пользовательский интерфейс кажется «заблокированным» без видимой причины.
PassThroughWindow решает эту проблему. Он позволяет вашему наложению быть видимым и интерактивным там, где это важно (само всплывающее уведомление), но все остальное передается вниз, в окна под ним.
Это особенно полезно, когда вы отображаете всплывающие уведомления в отдельном окне: всплывающему уведомлению нужны касания (закрытие, кнопка действия), но остальная часть экрана должна оставаться полностью работоспособной.
Статья: https://apptractor.ru/info/articles/passthroughwindow-v-ios-26-nalozhennoe-okno-kotoroe-ne-perehvatyvaet-zhesty.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Overlay окна удобны, когда вам нужен пользовательский интерфейс, который располагается поверх всего остального. Вспомните о глобальных всплывающих уведомлениях, сетевых баннерах, строках состояния вызова, плавающих панелях отладки или контекстном меню, которое вы хотите отображать независимо от основной иерархии представлений.
Недостаток очевиден: окно UIWindow, расположенное поверх вашего приложения, перехватывает все пространство для жестов. Даже если наложенное окно визуально «пустое» вокруг вашего всплывающего уведомления, система все равно может сначала перенаправлять касания в это верхнее окно. В результате приложение работает некорректно: прокрутка в окнах перестает работать, кнопки под наложением перестают реагировать, и пользовательский интерфейс кажется «заблокированным» без видимой причины.
PassThroughWindow решает эту проблему. Он позволяет вашему наложению быть видимым и интерактивным там, где это важно (само всплывающее уведомление), но все остальное передается вниз, в окна под ним.
Это особенно полезно, когда вы отображаете всплывающие уведомления в отдельном окне: всплывающему уведомлению нужны касания (закрытие, кнопка действия), но остальная часть экрана должна оставаться полностью работоспособной.
Статья: https://apptractor.ru/info/articles/passthroughwindow-v-ios-26-nalozhennoe-okno-kotoroe-ne-perehvatyvaet-zhesty.html
Платформа: iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
ChipTextField - чипы для Compose Multiplatform
ChipTextField - редактируемые и настраиваемые чипы для Compose Multiplatform. Есть несколько видов дизайна, поддержка Material 3, аватаров, отмечаемых чипов.
ChipTextField на GitHub: https://github.com/dokar3/ChipTextField
Платформа: Android/кроссплатформа
⭐️: 106
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
ChipTextField - редактируемые и настраиваемые чипы для Compose Multiplatform. Есть несколько видов дизайна, поддержка Material 3, аватаров, отмечаемых чипов.
ChipTextField на GitHub: https://github.com/dokar3/ChipTextField
Платформа: Android/кроссплатформа
⭐️: 106
Please open Telegram to view this post
VIEW IN TELEGRAM