Пять багов, которые видно только на живом железе
Подборка кейсов из практики мобильного QA — баги, которые проходят формальную проверку каждой итерации, но ломаются на стыке платформ:
— Android RatingBar наследует ProgressBar и считает рейтинг через округление по stepSize. На реальных Samsung округление уходило вверх: касание четвёртой звезды давало 5. Фикс — stepSize 0,01 и ручное округление в листенере.
— iPad слал в JSON OSName «iPadOS», бэкенд знал только «iOS» и возвращал 400 «Provider UUID not found». Все планшеты остались без пушей из-за одной строки.
— WebSocket чата не отправлял код 1000 при выходе, сокеты копились на каждом входе, приложение падало. Корень — переиспользованная библиотека основного банковского продукта.
— Чипсы специальностей и кнопка выбора счёта без скролла: на эмуляторе и тестовых данных всё ок, на восьми тегах и длинном списке UI ломался.
Внутри ещё промокоды и валидация на стыке веба и мобилки.
@mobi_dev (теперь и в Max)
@mobi_dev (теперь и в Max)
Подборка кейсов из практики мобильного QA — баги, которые проходят формальную проверку каждой итерации, но ломаются на стыке платформ:
— Android RatingBar наследует ProgressBar и считает рейтинг через округление по stepSize. На реальных Samsung округление уходило вверх: касание четвёртой звезды давало 5. Фикс — stepSize 0,01 и ручное округление в листенере.
— iPad слал в JSON OSName «iPadOS», бэкенд знал только «iOS» и возвращал 400 «Provider UUID not found». Все планшеты остались без пушей из-за одной строки.
— WebSocket чата не отправлял код 1000 при выходе, сокеты копились на каждом входе, приложение падало. Корень — переиспользованная библиотека основного банковского продукта.
— Чипсы специальностей и кнопка выбора счёта без скролла: на эмуляторе и тестовых данных всё ок, на восьми тегах и длинном списке UI ломался.
Внутри ещё промокоды и валидация на стыке веба и мобилки.
@mobi_dev (теперь и в Max)
@mobi_dev (теперь и в Max)
👍3👎3
Compose Multiplatform 1.11: iOS становится ближе к нативному ощущению
Кроссплатформенный UI часто ломается на мелочах: курсор в text field, selection handles, жесты, системное меню. В Compose Multiplatform 1.11 JetBrains как раз двигает эти детали на iOS, а не только добавляет ещё один общий API.
В релизе есть experimental native text input поверх
Можно изучить релиз и выбрать, что тестировать в своём KMP-приложении. В деталях особенно полезны ограничения новых text input API и изменения в тестах.
@mobi_dev (теперь и в Max)
Кроссплатформенный UI часто ломается на мелочах: курсор в text field, selection handles, жесты, системное меню. В Compose Multiplatform 1.11 JetBrains как раз двигает эти детали на iOS, а не только добавляет ещё один общий API.
В релизе есть experimental native text input поверх
UIView, concurrent rendering по умолчанию, обновлённые Compose UI test APIs v2 и переработанная обработка touch для web targets. Для мобильных команд это хороший набор сигналов: где shared UI уже зрелый, а где нужна проверка на устройстве.Можно изучить релиз и выбрать, что тестировать в своём KMP-приложении. В деталях особенно полезны ограничения новых text input API и изменения в тестах.
@mobi_dev (теперь и в Max)
🔥4🍌3❤1👌1
Если вы устали от бесконечных тасок и созвонов, то мы приготовили для вас игру, которая поможет отдохнуть
А заодно проверить вашу способность быстро запоминать новую инфу. Переходите по ссылке и играйте в нашу «Меморину». И делитесь результатами в комментариях!
Играть тут: https://tprg.ru/Yldr
@mobi_dev (теперь и в Max)
А заодно проверить вашу способность быстро запоминать новую инфу. Переходите по ссылке и играйте в нашу «Меморину». И делитесь результатами в комментариях!
Играть тут: https://tprg.ru/Yldr
@mobi_dev (теперь и в Max)
👍3
Forwarded from Чашечка Java
Локализация через Enum: избавляемся от рантайм-парсинга
В статье на Tproger разобрали три подхода к локализации: классическое наследование требует дублировать поля вручную, стандартные ARB/JSON парсятся в рантайме и съедают память, а табличные генераторы требуют ручного запуска после каждой строки.
Выход — Enum в одном файле без внешних ресурсов. Это убирает рантайм-парсинг и ручное дублирование. Если ваши сервисы сопрягаются с клиентами, где локализация до сих пор требует JSON или генераторов, стоит переложить её на compile-time решение.
В статье на Tproger разобрали три подхода к локализации: классическое наследование требует дублировать поля вручную, стандартные ARB/JSON парсятся в рантайме и съедают память, а табличные генераторы требуют ручного запуска после каждой строки.
Выход — Enum в одном файле без внешних ресурсов. Это убирает рантайм-парсинг и ручное дублирование. Если ваши сервисы сопрягаются с клиентами, где локализация до сих пор требует JSON или генераторов, стоит переложить её на compile-time решение.
Аутсорс, инхаус или выделенная команда — что реально дешевле?
Спойлер: ставка разработчика вам этого не скажет. Сравнивать модели по ставке довольно бессмысленное занятие, потому что за низкими ставками прячутся найм, налоги, онбординг, простои, переделки и часы техлида. В смете их не видно, а в бюджете — ещё как.
Разбираемся, как считать настоящий TCO (полную стоимость владения) по трём моделям:
🔘 Инхаус — почему свой разработчик дороже оффера;
🔘 Аутсорс — за что вы платите маржу подрядчику;
🔘 Выделенные команды — почему «возьмём человека и ускоримся» работает не всегда.
Внутри — формулы для каждой модели и чек-лист из 3 пунктов, чтобы выбрать формат под свой проект.
Спойлер: ставка разработчика вам этого не скажет. Сравнивать модели по ставке довольно бессмысленное занятие, потому что за низкими ставками прячутся найм, налоги, онбординг, простои, переделки и часы техлида. В смете их не видно, а в бюджете — ещё как.
Разбираемся, как считать настоящий TCO (полную стоимость владения) по трём моделям:
Внутри — формулы для каждой модели и чек-лист из 3 пунктов, чтобы выбрать формат под свой проект.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Kotlin 2.4.0 стабилен: что меняется для Android- и iOS-приложений
Летом Kotlin исполняется 15 лет, но для мобильной разработки важнее релиз 2.4.0. В стабильной ветке появились context parameters и explicit backing fields — то, что упростит шаблонный код в Android-проектах. Kotlin/Native теперь поддерживает Swift packages, что упрощает связку с iOS-зависимостями в Kotlin Multiplatform.
Compose Multiplatform дошёл до 1.12.0-beta01, а Compose Hot Reload — до 1.2.0-beta01. Если собираете shared UI под Android и iOS, это сокращает цикл правка-сборка-проверка. Gradle 9.5.0 тоже на борту. Подробности в обзоре.
Летом Kotlin исполняется 15 лет, но для мобильной разработки важнее релиз 2.4.0. В стабильной ветке появились context parameters и explicit backing fields — то, что упростит шаблонный код в Android-проектах. Kotlin/Native теперь поддерживает Swift packages, что упрощает связку с iOS-зависимостями в Kotlin Multiplatform.
Compose Multiplatform дошёл до 1.12.0-beta01, а Compose Hot Reload — до 1.2.0-beta01. Если собираете shared UI под Android и iOS, это сокращает цикл правка-сборка-проверка. Gradle 9.5.0 тоже на борту. Подробности в обзоре.
👍2❤1
Forwarded from Типичный программист
Android 17 даёт приложениям функции, которые ИИ-агенты могут вызывать сами
Привыкли, что приложение ждёт, пока вы сами нажмёте кнопку? В Android 17 Google меняет правила: разработчик аннотирует функции приложения, и ИИ-агент может дергать их через Jetpack, получая доступ к локальному состоянию.
Приложение перестаёт быть островом и становится частью инфраструктуры для агентов. 16 июня вышел Android 17 с API 37, а 9 июня появился Android CLI 1.0. Теперь проект можно собирать из командной строки.
Вдобавок с 30 сентября разработчиков ждёт обязательная верификация в четырёх странах, а в Play сервисный сбор отделяется от платёжного. Разобрали дайджест июня — кто платит, кто мигрирует и что ломается.
Привыкли, что приложение ждёт, пока вы сами нажмёте кнопку? В Android 17 Google меняет правила: разработчик аннотирует функции приложения, и ИИ-агент может дергать их через Jetpack, получая доступ к локальному состоянию.
Приложение перестаёт быть островом и становится частью инфраструктуры для агентов. 16 июня вышел Android 17 с API 37, а 9 июня появился Android CLI 1.0. Теперь проект можно собирать из командной строки.
Вдобавок с 30 сентября разработчиков ждёт обязательная верификация в четырёх странах, а в Play сервисный сбор отделяется от платёжного. Разобрали дайджест июня — кто платит, кто мигрирует и что ломается.
👎5
Почему ваш пет-проект ещё не бизнес, а вы — не предприниматель
У каждого второго разработчика в столе лежит проект, который «вот-вот станет бизнесом». Осталось дописать пару фич — и дальше всё поедет само. Спойлер: не поедет. Разбираемся, где заканчивается код и начинается бизнес: почему всё стартует не с технологии, а с чужой проблемы, чем фаундер отличается от тимлида и почему рабочий сервис с первыми пользователями и MRR — это не бизнес, а промежуточный результат.
Простой тест: уйдите в отпуск на две недели, и если без вас всё встало — поздравляем, у вас пока не бизнес, а вы сами и есть главный «производственный ресурс».
Внутри ещё и про AR-очки на трамвайном заводе, которые зарубили сами рабочие: история о том, как ценность решения определяете не вы.
У каждого второго разработчика в столе лежит проект, который «вот-вот станет бизнесом». Осталось дописать пару фич — и дальше всё поедет само. Спойлер: не поедет. Разбираемся, где заканчивается код и начинается бизнес: почему всё стартует не с технологии, а с чужой проблемы, чем фаундер отличается от тимлида и почему рабочий сервис с первыми пользователями и MRR — это не бизнес, а промежуточный результат.
Простой тест: уйдите в отпуск на две недели, и если без вас всё встало — поздравляем, у вас пока не бизнес, а вы сами и есть главный «производственный ресурс».
Внутри ещё и про AR-очки на трамвайном заводе, которые зарубили сами рабочие: история о том, как ценность решения определяете не вы.
👎4❤2
Ваша память ещё работает или нейронки уже и помнят всё за вас?
Чтобы это проверить мы приготовили для вас «Меморину» — игру, которая поможет проверить вашу память.
Всё просто: нужно запомнить и выбрать одинаковые карточки. Если память плохая, то рано или поздно вы всё равно справитесь. А если хорошая, то сможете увидеть ваш потолок скорости.
Ну что, готовы проверить? Тогда переходите по ссылке: https://tprg.ru/fw4Z
Чтобы это проверить мы приготовили для вас «Меморину» — игру, которая поможет проверить вашу память.
Всё просто: нужно запомнить и выбрать одинаковые карточки. Если память плохая, то рано или поздно вы всё равно справитесь. А если хорошая, то сможете увидеть ваш потолок скорости.
Ну что, готовы проверить? Тогда переходите по ссылке: https://tprg.ru/fw4Z
👏1
Встречайте новую мини-игру — «Отпуск».
За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи, отыскать билет и упаковать чемодан. Отдельный этап — отпускной гардероб, и тут всё непросто.
Простое управление, короткие уровни, юмор. Отличный способ отвлечься на пару минут между задачами и заодно поймать промокоды от партнёров!
Попробовать: https://tprg.ru/DtBr
За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи, отыскать билет и упаковать чемодан. Отдельный этап — отпускной гардероб, и тут всё непросто.
Простое управление, короткие уровни, юмор. Отличный способ отвлечься на пару минут между задачами и заодно поймать промокоды от партнёров!
Попробовать: https://tprg.ru/DtBr
👎7💊2🗿1
Две функции Android-приложения месяц не работали в релизе, а в debug всё было в порядке
Автор LongShot (склейка длинных скриншотов) месяц получал жалобы: распознавание текста и скрытие персональных данных отвечали «Couldn't read this image». У него самого всё работало, Android Vitals молчал, крашей не было. Пять раундов «починил, проверьте» ушли впустую: он тестировал через
Виноват R8. Consumer-правило ML Kit
Главное изменение у автора:
Автор LongShot (склейка длинных скриншотов) месяц получал жалобы: распознавание текста и скрытие персональных данных отвечали «Couldn't read this image». У него самого всё работало, Android Vitals молчал, крашей не было. Пять раундов «починил, проверьте» ушли впустую: он тестировал через
installDebug, а debug-сборка не минифицируется.Виноват R8. Consumer-правило ML Kit
-keep class * implements ComponentRegistrar сохраняет класс, но не его члены. Пустой конструктор TextRegistrar в байткоде никто не вызывает, регистраторы создаются рефлексией, и R8 его удалил. Фикс одна строка: то же правило с { <init>(); }, покрывает семь регистраторов.Главное изменение у автора:
isMinifyEnabled = true в debug. Проверьте свой релиз: grep '<init>' по usage.txt и grep Registrar по seeds.txt, каждый регистратор должен быть там дважды. Разбор целиком.👍4❤1
61% того, что KMP-модуль отдаёт в iOS, никто не вызывает
Если у вас Kotlin Multiplatform, ваш shared-модуль приезжает в Xcode как Objective-C-заголовок, и каждая лишняя строка в нём замедляет сборку и раздувает фреймворк. Разработчик приложения Framed открыл свой
Он написал Gradle-плагин kmprofiler: тот сопоставляет заголовок с Swift-кодом и считает экспорты без вызовов. Из 459 деклараций 282 не используются (61,4%).
Правка заняла пять файлов:
Если у вас Kotlin Multiplatform, ваш shared-модуль приезжает в Xcode как Objective-C-заголовок, и каждая лишняя строка в нём замедляет сборку и раздувает фреймворк. Разработчик приложения Framed открыл свой
Shared.h и увидел 23 622 строки: в Kotlin всё public по умолчанию, поэтому в экспорт попали цвета темы, 38 констант отступов, внутренние колбэки экранов и типы Ktor. Компилятор выкинуть их не может: Objective-C диспетчеризует динамически, вдруг Swift позовёт.Он написал Gradle-плагин kmprofiler: тот сопоставляет заголовок с Swift-кодом и считает экспорты без вызовов. Из 459 деклараций 282 не используются (61,4%).
Правка заняла пять файлов:
internal для Dimens, Color, Type и UI-моделей, а для классов, нужных Android-модулям, есть @HiddenFromObjC. Заголовок ужался до 13 327 строк (−43,6%), фреймворк похудел на 5,7 МБ. Плагин лежит в Gradle Plugin Portal, автор показал, как прогнать через него свой модуль.🔥7
Google Play начнёт понижать приложения, которые едят слишком много памяти
С февраля 2027 года расход памяти становится обычной метрикой Android Vitals — со своим порогом «плохого поведения», как у крашей и ANR. Google объявила правила: считается Anonymous RSS плюс Swap и отдельно память под bitmap, порог сравнивается с суточным 90-м перцентилем, а качество Play оценивает по последним 28 дням.
Для обычного приложения на устройстве с 8 ГБ оперативной памяти потолок — 2,25 ГБ на переднем плане и 1,5 ГБ в фоне. Играм дают больше: 3,5 ГБ и 2,75 ГБ. Отдельно идёт DEX: если он больше 10 МБ у приложения или 50 МБ у игры, требуется не меньше 25% обфускации, оптимизации и shrinking — три отдельных порога. Кто не уложится, теряет видимость в Play и часть возможностей публикации.
Второе требование, с апреля 2027-го, — Zero-Tap Sign-In Restoration. Мобильное или планшетное приложение с авторизацией должно восстанавливать вход, когда пользователь при настройке нового телефона выбрал перенос данных: открылось — и уже залогинен. Делается через Restore Credentials API, доступный с Android 9; игры пока освобождены.
Смотреть у себя стоит уже сейчас: Android Vitals, размеры bitmap-кэшей и то, что реально осталось после R8.
С февраля 2027 года расход памяти становится обычной метрикой Android Vitals — со своим порогом «плохого поведения», как у крашей и ANR. Google объявила правила: считается Anonymous RSS плюс Swap и отдельно память под bitmap, порог сравнивается с суточным 90-м перцентилем, а качество Play оценивает по последним 28 дням.
Для обычного приложения на устройстве с 8 ГБ оперативной памяти потолок — 2,25 ГБ на переднем плане и 1,5 ГБ в фоне. Играм дают больше: 3,5 ГБ и 2,75 ГБ. Отдельно идёт DEX: если он больше 10 МБ у приложения или 50 МБ у игры, требуется не меньше 25% обфускации, оптимизации и shrinking — три отдельных порога. Кто не уложится, теряет видимость в Play и часть возможностей публикации.
Второе требование, с апреля 2027-го, — Zero-Tap Sign-In Restoration. Мобильное или планшетное приложение с авторизацией должно восстанавливать вход, когда пользователь при настройке нового телефона выбрал перенос данных: открылось — и уже залогинен. Делается через Restore Credentials API, доступный с Android 9; игры пока освобождены.
Смотреть у себя стоит уже сейчас: Android Vitals, размеры bitmap-кэшей и то, что реально осталось после R8.
👍3😱2
Семейная подписка в iOS-приложении без сервера и аккаунтов
Соло-разработчик сканера чеков ReceiptIQ добавил самую просимую фичу: одна подписка на семью и общие чеки. Сервера, аккаунтов и копий данных вне телефонов нет: устройства синхронизируются напрямую по Wi-Fi. Он расписал архитектуру и что сломалось по дороге.
Главный трюк: телефон родственника сам проверяет, что владелец платит. StoreKit 2 отдаёт транзакцию как JWS с подписью Apple (
Слияние по last-writer-wins принесло классику: перештамповал
Есть синк между устройствами? Сверьте свои инварианты с его списком.
Соло-разработчик сканера чеков ReceiptIQ добавил самую просимую фичу: одна подписка на семью и общие чеки. Сервера, аккаунтов и копий данных вне телефонов нет: устройства синхронизируются напрямую по Wi-Fi. Он расписал архитектуру и что сломалось по дороге.
Главный трюк: телефон родственника сам проверяет, что владелец платит. StoreKit 2 отдаёт транзакцию как JWS с подписью Apple (
jwsRepresentation; jsonRepresentation подделывается), устройство проверяет цепочку сертификатов, подпись, bundle ID и environment == Production. Следствие: в TestFlight пейринг не потестировать, там Sandbox.Слияние по last-writer-wins принесло классику: перештамповал
modifiedAt при применении, и два телефона гоняли запись по кругу. Ещё один баг прожил два месяца: пир молча пропускал недоступные фото, синк не завершался, хотя данные доходили. Лечит таймаут тишины 30 секунд.Есть синк между устройствами? Сверьте свои инварианты с его списком.
Приложение с открытым кодом выкинули из Google Play по жалобе без единого доказательства
Luanti — движок для воксельных игр с открытым кодом, до 2024 года он назывался Minetest. Игр и игровых ассетов в нём по умолчанию нет: пользователь ставит приложение, а игры докачивает из каталога ContentDB. 27 августа команда сообщила, что Android-приложение недоступно в Google Play.
Жалобу по DMCA подала от имени Microsoft компания Tracer․AI, платформа защиты бренда, ищущая нарушения ИИ-агентами. Всё обоснование — один номер регистрации
Похожее уведомление от той же компании приходило в марте 2023 года: встречное подали 25 марта, приложение вернули 10 мая — через 46 дней вместо 10–14 рабочих, которые отводит § 512 DMCA.
На картинке — все текстуры, которые входят в приложение, из разбора команды. Пока оно остаётся на F-Droid и на сайте проекта.
Luanti — движок для воксельных игр с открытым кодом, до 2024 года он назывался Minetest. Игр и игровых ассетов в нём по умолчанию нет: пользователь ставит приложение, а игры докачивает из каталога ContentDB. 27 августа команда сообщила, что Android-приложение недоступно в Google Play.
Жалобу по DMCA подала от имени Microsoft компания Tracer․AI, платформа защиты бренда, ищущая нарушения ИИ-агентами. Всё обоснование — один номер регистрации
US Reg. #TX 8-192-097, то есть Minecraft Java Edition 1.9. Какие ассеты и где, в уведомлении не сказано.Похожее уведомление от той же компании приходило в марте 2023 года: встречное подали 25 марта, приложение вернули 10 мая — через 46 дней вместо 10–14 рабочих, которые отводит § 512 DMCA.
На картинке — все текстуры, которые входят в приложение, из разбора команды. Пока оно остаётся на F-Droid и на сайте проекта.
🤯6👎2❤1
Агент сам жмёт кнопки в вашем Compose-приложении и проверяет, что вышло
В Compose Multiplatform 1.12.0 внутри Compose Hot Reload появился экспериментальный MCP-сервер. Через него ИИ-агент запускает hot reload, снимает скриншот, читает semantic tree, кликает, вводит текст и смотрит логи. То есть агент проверяет собственную правку в живом окне, а не просто отдаёт Kotlin и надеется.
Из остального в релизе: для Web автоматически подгружаются подмножества шрифтов Noto, а на desktop новые
В Compose Multiplatform 1.12.0 внутри Compose Hot Reload появился экспериментальный MCP-сервер. Через него ИИ-агент запускает hot reload, снимает скриншот, читает semantic tree, кликает, вводит текст и смотрит логи. То есть агент проверяет собственную правку в живом окне, а не просто отдаёт Kotlin и надеется.
Из остального в релизе: для Web автоматически подгружаются подмножества шрифтов Noto, а на desktop новые
WindowState и DialogState умеют выбирать экран, задавать минимальный и максимальный размер окна и ставить диалог относительно родителя. Плюс правки жестов на iOS, VoiceOver, interop с UIKit и совместимости с SDK из Xcode 16.🔥12❤1😴1
Android 17 прячет имена сайтов от оператора и требует разрешения на сканирование локальной сети
27 августа Google описала сетевые изменения Android 17, и два из них меняют поведение приложений.
Первое — Encrypted Client Hello. Даже под HTTPS имя домена уходит в TLS-рукопожатии открытым текстом, и оператор видит, куда вы ходите. ECH вместе с приватным DNS его закрывает; Android 17 стал первой крупной мобильной ОС с широкой поддержкой. Чтобы приложение это получило, Google рекомендует перейти на OkHttp 5.5.0 и включить ECH явно.
Второе — Local Network Protection. Раньше приложение могло без спроса просканировать домашнюю сеть и увидеть телевизор, камеры, консоль. С Android 17 на сканирование и подключение к устройствам локальной сети нужно разрешение пользователя. Для трансляции видео на телевизор рекомендуют системный выбор устройства: пользователь указывает телевизор сам, приложение доступа к остальной сети не получает.
Если у вас есть обнаружение устройств по mDNS или прямые подключения по IP в локалке, это ваш ближайший приоритет.
27 августа Google описала сетевые изменения Android 17, и два из них меняют поведение приложений.
Первое — Encrypted Client Hello. Даже под HTTPS имя домена уходит в TLS-рукопожатии открытым текстом, и оператор видит, куда вы ходите. ECH вместе с приватным DNS его закрывает; Android 17 стал первой крупной мобильной ОС с широкой поддержкой. Чтобы приложение это получило, Google рекомендует перейти на OkHttp 5.5.0 и включить ECH явно.
Второе — Local Network Protection. Раньше приложение могло без спроса просканировать домашнюю сеть и увидеть телевизор, камеры, консоль. С Android 17 на сканирование и подключение к устройствам локальной сети нужно разрешение пользователя. Для трансляции видео на телевизор рекомендуют системный выбор устройства: пользователь указывает телевизор сам, приложение доступа к остальной сети не получает.
Если у вас есть обнаружение устройств по mDNS или прямые подключения по IP в локалке, это ваш ближайший приоритет.
🎉4👍1
Из Pixel 11 пропала аппаратная разметка памяти, и GrapheneOS не смогла доделать порт
MTE — расширение ARM, которое приписывает выделениям памяти короткий тег с гранулярностью 16 байт и сверяет его при обращении. Несовпадение выдаёт use-after-free или выход за границы, и в синхронном режиме процесс падает прямо на месте ошибки. Проверка вероятностная, зато накладные расходы куда ниже, чем у программных санитайзеров.
Аппаратный MTE появился в Pixel 8 в октябре 2023 года. GrapheneOS включила его для своего пользовательского пространства 30 октября того же года, по умолчанию — с релиза 7 ноября, а до основных аллокаторов ядра добралась только летом 2025-го. Stock Android глобально разметку так и не включил: её получают отдельные системные компоненты вроде NFC, Bluetooth и SecureElement, а Advanced Protection в Android 16 добавляет к ним совместимые процессы и приложения, которые подключились сами.
Теперь команда сообщила, что после недели работы порт на Pixel 11 остался частичным: поддержки MTE нет ни в софте, ни в прошивке, ни, по оценке проекта, в самом кремнии. Вывод там же — Google вырезал функцию ради экономии. Покупать Pixel 11 в GrapheneOS не советуют и думают пропустить серию целиком.
В остальной индустрии направление обратное. Apple в iPhone 17 и iPhone Air включила Memory Integrity Enforcement — постоянно работающую защиту ядра и более семидесяти процессов пользовательского пространства поверх Enhanced MTE. Snapdragon 8 Elite Gen 5 стал единственным пока чипом Qualcomm с аппаратной разметкой. Разработчику приложения включать её всё равно нужно руками, и охотников немного: Apple предупреждает о влиянии на производительность и стабильность, а Signal для Android в манифесте MTE не запрашивает.
MTE — расширение ARM, которое приписывает выделениям памяти короткий тег с гранулярностью 16 байт и сверяет его при обращении. Несовпадение выдаёт use-after-free или выход за границы, и в синхронном режиме процесс падает прямо на месте ошибки. Проверка вероятностная, зато накладные расходы куда ниже, чем у программных санитайзеров.
Аппаратный MTE появился в Pixel 8 в октябре 2023 года. GrapheneOS включила его для своего пользовательского пространства 30 октября того же года, по умолчанию — с релиза 7 ноября, а до основных аллокаторов ядра добралась только летом 2025-го. Stock Android глобально разметку так и не включил: её получают отдельные системные компоненты вроде NFC, Bluetooth и SecureElement, а Advanced Protection в Android 16 добавляет к ним совместимые процессы и приложения, которые подключились сами.
Теперь команда сообщила, что после недели работы порт на Pixel 11 остался частичным: поддержки MTE нет ни в софте, ни в прошивке, ни, по оценке проекта, в самом кремнии. Вывод там же — Google вырезал функцию ради экономии. Покупать Pixel 11 в GrapheneOS не советуют и думают пропустить серию целиком.
В остальной индустрии направление обратное. Apple в iPhone 17 и iPhone Air включила Memory Integrity Enforcement — постоянно работающую защиту ядра и более семидесяти процессов пользовательского пространства поверх Enhanced MTE. Snapdragon 8 Elite Gen 5 стал единственным пока чипом Qualcomm с аппаратной разметкой. Разработчику приложения включать её всё равно нужно руками, и охотников немного: Apple предупреждает о влиянии на производительность и стабильность, а Signal для Android в манифесте MTE не запрашивает.
😐4
Android блокирует скрытую отправку кодов переадресации
Приложения могли использовать разрешение
Начиная с
Разработчикам приложений, которые отправляют сервисные коды, нужно корректно обработать отказ или перейти на
Приложения могли использовать разрешение
CALL_PHONE, чтобы в фоне отправить USSD-код переадресации через TelephonyManager.sendUssdRequest(). Так входящие звонки жертвы перенаправлялись на чужой номер без явного подтверждения. В Android 17 QPR2 Google закрыла этот сценарий.Начиная с
Beta 4 фоновый запрос с кодом вроде *21# отклоняется с ошибкой USSD_ERROR_NOT_ALLOWED. При ручном наборе кода переадресации система показывает подтверждение. Обычные USSD-запросы, включая проверку баланса, продолжают работать.Разработчикам приложений, которые отправляют сервисные коды, нужно корректно обработать отказ или перейти на
ACTION_DIAL, где действие выполняет пользователь. Google выпустила Beta 4 со сборками CP41.260814.003.A2 и CP41.260814.003.B1. Уровень патча безопасности — 2026-08-05, версия Google Play services — 26.28.33.Настоящая iOS в виртуалке на Mac: не симулятор, с root-шеллом внутри
Симулятор Xcode не запускает настоящую систему: там нет ядра iOS, нет App Store, нет полноценной файловой системы устройства. Проверить поведение приложения при странной конфигурации ОС или посмотреть, что происходит ниже уровня фреймворков, на нём нельзя.
Проект vphone-cli поднимает виртуальный iPhone через штатный Virtualization.framework Apple, опираясь на инфраструктуру исследовательских виртуалок Private Cloud Compute. На скриншоте — загруженная iOS 27.0 рядом с терминалом, где
Требования жёсткие: Apple Silicon, macOS 15 и новее, Xcode с iOS SDK, ослабленные SIP и AMFI. Одна команда
На 29 августа у репозитория 8706 звёзд и лицензия MIT.
Практическая польза для мобильной команды: воспроизводимый стенд под баги, которые видны только на реальной ОС, и возможность отдать одинаковую машину каждому в команде вместо парка физических устройств.
Симулятор Xcode не запускает настоящую систему: там нет ядра iOS, нет App Store, нет полноценной файловой системы устройства. Проверить поведение приложения при странной конфигурации ОС или посмотреть, что происходит ниже уровня фреймворков, на нём нельзя.
Проект vphone-cli поднимает виртуальный iPhone через штатный Virtualization.framework Apple, опираясь на инфраструктуру исследовательских виртуалок Private Cloud Compute. На скриншоте — загруженная iOS 27.0 рядом с терминалом, где
neofetch показывает ядро 25.4.0 и 235 установленных пакетов.Требования жёсткие: Apple Silicon, macOS 15 и новее, Xcode с iOS SDK, ослабленные SIP и AMFI. Одна команда
vphone-cli vm create myphone -V jb проходит весь путь — скачивание прошивки, патч цепочки загрузки, восстановление через DFU и первую загрузку. Дальше vm clone делает быструю APFS-копию с новой идентичностью устройства, vm export пакует машину в архив.На 29 августа у репозитория 8706 звёзд и лицензия MIT.
Практическая польза для мобильной команды: воспроизводимый стенд под баги, которые видны только на реальной ОС, и возможность отдать одинаковую машину каждому в команде вместо парка физических устройств.
❤🔥7👍7🤔1😱1