mobi_dev | Unsorted

Telegram-канал mobi_dev - Мобильная разработка

15502

Актуальное по мобильной разработке — Android, iOS, кроссплатформа Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Другие наши проекты: https://tprg.ru/media

Subscribe to a channel

Мобильная разработка

Media3 1.11 добавил слоты Player в Compose и предзагрузку коротких видео через PlayerPool

Media3 это библиотека, на которой работает подавляющее большинство топовых медиаприложений под Android. В 1.11 изменения затронули воспроизведение, редактирование и UI-компоненты сразу.

Для тех, кто на Compose, главное в UI-модулях: настраиваемые слоты Player с готовыми дефолтами, интерактивные жесты, наблюдатели состояния и предзагрузка коротких видео через PlayerPool. Последнее прямо про ленты в стиле Reels, где следующий ролик должен стартовать мгновенно.

Помимо этого интеграцию с Cast обновили под SystemUI Output Switcher, добавили сетевое расширение на клиенте Ktor и утилиты муксинга для Ogg и WAV.

#android

Читать полностью…

Мобильная разработка

Движок IntelliJ уехал из IDE и работает в VS Code по LSP

В VS Code уже ставится расширение Java and Kotlin by IntelliJ IDEA с идентификатором JetBrains.intellij-server. Это не оболочка, изображающая IDE, а языковой движок IntelliJ, говорящий по протоколу LSP.

Причину переезда называют прямо: агенты уже ходят в языковые серверы за быстрым и детерминированным поиском по коду, и в перспективе это экономит токены. Поэтому движок и вынесли наружу.

Практические оговорки. Расширение привязано к VS Code версии 1.105.1 и выше, редакторы на его основе вроде Cursor тоже считаются, а одиночный .java-файл без проекта не заработает. Preview-сборки умирают через 30 дней после релиза, зато для чистого Kotlin остаётся бесплатный языковой сервер под Apache-2. Инструкция по запуску.

#kotlin

Читать полностью…

Мобильная разработка

Сигнатура с Unit врёт о том, чем функция может закончиться

Пример из статьи: fun signDocument(documentId: UUID, code: String): Unit. Unit в Kotlin означает, что функция отработала и не вернула ничего осмысленного, примерно как void в Java. Понятно? А теперь скажите по одной сигнатуре, что будет, если код неверный, документ уже подписан или его вообще нет.

Сигнатура об этом молчит. Про доменные ошибки вызывающий узнаёт из исключений, документации или чужой памяти, и компилятор ему здесь не помощник.

Сергей Чернов, который занимается аутентификацией и верификацией в финтех-платформе, разбирает, как вернуть эти случаи в тип возвращаемого значения и обрабатывать их функционально. Статья в блоге Kotlin.

#kotlin

Читать полностью…

Мобильная разработка

Папка lib превратилась в лабиринт: модуляризация по фичам во Flutter

История типовая. Сначала lib, несколько экранов, папка моделей и один файл сервисов на всё. Приложение выходит, все довольны. Потом фич больше, команда больше, и однажды в моделях триста файлов, в сервисах шесть тысяч строк, а новому инженеру нужны недели, чтобы понять, куда вообще что добавлять.

Автор настаивает, что это не проблема дисциплины, а проблема структуры: код изначально не был устроен так, чтобы переживать рост. Модуляризация по фичам не новый фреймворк и не замена Clean Architecture или DDD, она берёт принципы обоих и применяет их к каждой фиче отдельно, чтобы кусок был самодостаточным и тестировался независимо.

Разбор идёт от минусов layer-first до сборки всего вместе. Актуально, если команда в одной кодовой базе растёт к двадцати с лишним людям.

#flutter

Читать полностью…

Мобильная разработка

Flutter-пакет выбирает интерфейс не по платформе, а по версии ОС: Liquid Glass на iOS 26, Material 3 Expressive на Android 16

Обычно адаптивные виджеты во Flutter спрашивают «iOS или Android». native_adaptive_ui добавляет второе измерение, DesignEra: платформа, версия ОС и форм-фактор. Один код на iOS 26 встраивает настоящие UITabBar, UISegmentedControl, UISwitch и UISlider, потому что честный Liquid Glass рисуется только нативным контролом, а на Android 16 переключается на Material 3 Expressive. iOS 18 получает классический Cupertino, web и десктоп fallback на Material 3.

Требования: Flutter 3.27 и новее, iOS 13+, Android API 21+, macOS 10.15+; инициализация через await NativeAdaptiveUi.ensureInitialized(), есть SPM и CocoaPods. Для тестов предусмотрены NativePolicy.dartOnly и debugSetPlatform. Версия 0.1.2, MIT, 125 загрузок и 3 лайка на pub.dev, то есть проект одного человека на ранней стадии.

Контекст важнее цифр: Flutter заморозил Material и Cupertino в SDK в апреле, а с ноября их SDK-копии объявлены устаревающими. Кто-то должен закрыть этот разрыв. Страница на pub.dev.

Читать полностью…

Мобильная разработка

Когда твой код идеален, но пользователи всегда найдут способ сломать его.

Читать полностью…

Мобильная разработка

Compose Multiplatform запустили на Apple TV одним Gradle-плагином, не дожидаясь JetBrains

Официальных tvOS-артефактов для большинства модулей Compose пока нет (задача CMP-5686). Саджид Али обошёл это плагином dev.sajidali.compose-tvos 1.3.0: через ComponentMetadataRule он подменяет варианты зависимостей 15 групп org.jetbrains.* (compose ui, foundation, runtime, material3, animation и другие) на свои tvOS-сборки, координаты в проекте не меняются, а iOS, Android и Desktop продолжают получать официальные артефакты.

Требования: Kotlin 2.3.20, Gradle 8.0, Compose Multiplatform 1.6 или новее; таргеты tvosArm64 и tvosSimulatorArm64, tvosX64 не собирается. Если официальный tvOS klib появится, плагин его не трогает. Автор говорит, что тем же тулчейном собирает свой production TV app без правок исходников; демо на JetStream TV с D-pad-фокусом есть в посте. Автотестов под tvOS у проекта пока нет, так что в прод только после своих.

Читать полностью…

Мобильная разработка

Google Play задерживал RTDN о покупках на два и четыре часа: платёж прошёл, а сервер узнал потом

Если подписку или покупку выдаёт сервер по Real-time Developer Notifications, посмотрите логи за 1–2 сентября. Разработчик показал две транзакции, где eventTimeMillis появился через 3 ч 55 мин и 2 ч 11 мин после оплаты, при том что девять соседних покупок получили событие за доли секунды. Доставка через Pub/Sub была быстрой, очередь пустой: задержка сидела внутри цепочки Google до доставки на сервер, а на каком именно этапе, автор доказать не может, потому что не сохранял publishTime.

Официальный инцидент Play Billing 1 сентября длился с 08:54 до 11:43 UTC, но по отчёту задержки были и после. Документация Google требует после RTDN проверять состояние через Developer API; наш вывод из этих цифр шире: клиент после покупки сам отправляет purchase token на сервер, сервер сразу подтверждает его через Developer API и не ждёт RTDN. Что залогировать, чтобы в следующий раз увидеть, где именно задержка, на сайте.

Читать полностью…

Мобильная разработка

Нормальный сервис пополнения Steam никогда не спросит пароль или код Steam Guard — только логин. Это правило стоит держать в голове перед тем, как искать способ закинуть деньги на баланс: мошеннических предложений вокруг темы хватает, а разница в комиссии между честными сервисами доходит до нескольких процентов.

Сравнили пять рабочих вариантов для российских аккаунтов. Два сервиса зачисляют деньги напрямую по логину за минуты, у одного из них ниже стартовая комиссия и есть промокоды. Ещё один — крупный маркетплейс с выбором продавцов и разными условиями по каждому. Другой умеет пополнять через продажу игровых предметов — медленнее, но может дать выгоду. Последний формально работает без своей комиссии, но за счёт конвертации можно потерять до 10%.

Для каждого способа расписали реальную комиссию, скорость зачисления и лимиты по сумме.

Читать полностью…

Мобильная разработка

Firefox для iOS получил встроенный блокировщик рекламы, потому что полноценных расширений на iOS нет

Mozilla 1 сентября включила в Firefox для iOS блокировку сторонней рекламы и связанных с ней трекеров. На Android Firefox давно ставит uBlock Origin, но на iOS все браузеры обязаны работать поверх WebKit, и такой экосистемы дополнений, как на Android и десктопе, там не построить. Поэтому блокировщик встроен в само приложение и собран на Content Blocker API от Apple со списком EasyList.

По умолчанию функция выключена, включается в Settings, Browsing, Ad Blocker. Реклама, которую сайт отдаёт сам, объявления в поисковой выдаче и спонсорские ярлыки Firefox остаются, работает всё это поверх Enhanced Tracking Protection.

Для разработчиков под iOS это пример того, как ограничение платформы решается внутри приложения: Content Blocker принимает статические правила, а не код, поэтому с сервера можно обновлять только сами правила блокировки, а не логику.

Что ещё вошло в Firefox 155 для разработчиков и какие уязвимости закрыли, разобрали на сайте.

Читать полностью…

Мобильная разработка

Google блокирует обновления AnkiDroid: внешняя кнопка пожертвований может ударить и по вашему приложению

С 28 августа Google отклоняет обновления AnkiDroid из-за ссылки на пожертвования мимо биллинга Play. Если нарушение не устранят, 11 сентября приложение удалят из Google Play по всему миру, кроме Индии и России: там оно останется опубликованным.

AnkiDroid — бесплатное открытое приложение-карточки с 10 млн установок, которое развивают волонтёры. Внутри ничего не продаётся, деньги на разработку собирают через Open Collective — платформу для пожертвований; фискальным хостом выступает американская некоммерческая Open Source Collective со статусом 501(c)(6), то есть освобождением от налогов без налогового вычета для жертвователя. Решение налоговой службы США мейнтейнеры Google отправили, но в ответ получили, что организация от налогов не освобождена, без объяснения, почему такого статуса мало.

Ссылки на пожертвования из сборки для Play мейнтейнеры убирают в версии 2.24.X и пишут, что делают это под протестом. Альтернативы, которые перечислила Google: собирать пожертвования через биллинг Play, войти в американскую программу альтернативных платежей или в программу внешних ссылок. Если у вас в приложении есть кнопка «поддержать проект», статус некоммерческой организации сам по себе от этой политики не спасает: Google требует подтверждённого освобождения от налогов и приводит в пример 501(c)(3).

Читать полностью…

Мобильная разработка

Управляйте форм-фактором Android-эмулятора прямо из скрипта

Google напомнила о командах adb emu, которые складывают, поворачивают и меняют экран виртуального устройства из терминала. Они сразу возвращают управление оболочке, поэтому проверки адаптивной вёрстки можно встроить в сценарий или прогон тестов вместо ручной работы с Resizable Emulator и вместо запуска нескольких эмуляторов сразу.

adb emu fold складывает аппарат и включает внешний экран, adb emu unfold раскладывает и включает внутренний, adb emu rotate поворачивает устройство на 90 градусов по часовой стрелке. adb emu posture без параметра печатает доступные положения: 1 — closed, 2 — half-opened, 3 — opened; adb emu posture 2 ставит половинчатое, которое в блоге и называют режимом «столик».

adb emu resize-display печатает доступные пресеты — телефон, раскрытый складной и планшет под номерами 0, 1 и 2, — а adb emu resize-display 1 меняет размер на выбранный. Если эмуляторов несколько, нужный выбирается через adb -s <serial> emu <команда> <параметр>. Оговорка: Pixel Fold и Resizable AVD поддерживают только положения 1–3, на 4 и 5 вернётся KO: Failed to set posture.

Читать полностью…

Мобильная разработка

Эмулятор Android на Windows теряет свой гипервизор 31 декабря — проверьте, на чём он у вас крутится

У эмулятора Android на Windows два способа получить аппаратное ускорение. Первый — Windows Hypervisor Platform, встроенный в саму систему. Второй — Android Emulator hypervisor driver, отдельный драйвер от Google, который раньше назывался GVM и до сих пор стоит на многих машинах со стажем.

Второй уходит на покой 31 декабря 2026 года. До конца года на Windows нужно перейти на Windows Hypervisor Platform; пока срок не вышел, старый драйвер продолжает работать.

Переход попутно снимает старую боль: собственный драйвер Google конфликтовал с Hyper-V, а через него — с WSL2 и Docker Desktop. Windows Hypervisor Platform живёт с ними в одной системе.

Проверить, что у вас сейчас, можно одной командой. При стандартной установке SDK эмулятор лежит здесь:

%LOCALAPPDATA%\Android\Sdk\emulator\emulator.exe -accel-check

В ответе должно быть WHPX ... is installed and usable. Если вместо этого написано AEHD или GVM, включите Windows Hypervisor Platform в компонентах Windows и перезагрузитесь.

#android

Читать полностью…

Мобильная разработка

«ARM переставляет обращения к памяти, а x86 нет» — формула, которая неверна с обеих сторон

Если вы пишете многопоточный код под Android или iOS, то наверняка слышали объяснение: у ARM слабая модель памяти, процессор переставляет чтения и записи как хочет, поэтому нужны барьеры. У x86 модель сильная, порядок соблюдается, барьеры почти не нужны.

Фабиан Гизен показывает, что обе половины формулы неточны. За исключением совсем маленьких ядер без кэша, процессоры вообще не соблюдают собственную модель памяти на каждом обращении. Они обещают вести себя так, как если бы соблюдали. Реализуется это оптимистично: процессор считает, что данные никто параллельно не менял, выполняет обращения в удобном порядке и держит рядом ровно столько метаданных, чтобы задним числом заметить нарушение. Заметил — инструкция не фиксируется, состояние откатывается, дальше повтор.

Так устроены все архитектуры. Разница в том, сколько метаданных нужно на каждую инструкцию в полёте и какие порядки разрешено фиксировать при конфликте. Часто цитируемые 7% платы за аппаратный TSO на Apple Silicon Гизен отдельно оговаривает: это цена конкретной реализации, где TSO включается ради Rosetta.

В нашем канале «Сохранёнки программиста» разобрали подробнее.

Читать полностью…

Мобильная разработка

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.

Читать полностью…

Мобильная разработка

Tinder срезал холодный старт на 47% через R8 Configuration Analyzer

Кодовая база росла вместе с приложением, и к моменту оптимизации около 70% кода оставались неоптимизированными: 17 dex-файлов, из них три выделены только под запуск. R8 был включён, но большую часть его работы блокировали keep-правила, и команда не могла определить, какие именно.

Это и закрывает новый R8 Configuration Analyzer. Он показывает оценки по shrinking, оптимизации и обфускации и подсвечивает слишком широкие, дублирующие и устаревшие keep-правила, включая те, что приехали из сторонних библиотек.

Итог после чистки: холодные старты минус 47%, размер загрузки минус 28,98%, до 61,5 МБ, а ANR по ощущению пользователя минус 28%. Цифры и скриншоты анализатора лежат в блоге Android Developers.

#android

Читать полностью…

Мобильная разработка

Как Google разводит по изолированным доменам автомобильный Android

AAOS SDV, версия Android Automotive для программно-определяемых автомобилей, построена на виртуализации: Google использует Cuttlefish, чтобы разделять системы, живущие в одной машине на одном железе.

Прошлые анонсы были про фичи, а этот текст про то, как устроена безопасность: доменная изоляция как фундамент и виртуализация как способ развести сосуществующие инстансы.

Читать стоит, если смотрите в сторону автомобильных проектов, но и обычному мобильному разработчику полезно как модель: те же приёмы изоляции постепенно спускаются в потребительский Android. Как она устроена, расписано в разборе Google.

#android

Читать полностью…

Мобильная разработка

Jetpack XR SDK дошёл до беты: можно тащить XR в продакшен-процесс

Порт существующего 2D-приложения в XR перестал быть исследовательским проектом: Jetpack SceneCore, ARCore for Jetpack XR и XR Runtime вышли в бету, Jetpack Compose for XR обещают следом.

Формулировка Google прямая: API стабилизируются, и это хороший момент встраивать их в рабочие процессы, а не держать в песочнице. Делается это теми же инструментами Android, которыми вы уже пользуетесь, отдельный стек учить не нужно.

Релиз сфокусирован на базовых кирпичах SDK, так что смотреть стоит на них, а не на витринные демо. Что именно вошло в бету, перечислено в анонсе.

#android

Читать полностью…

Мобильная разработка

Один разработчик проверял доступность своей игры, выключая экран целиком

Клеменс Штрассер из Австрии делает Art of Fauna в одиночку: пазлы на иллюстрациях животных из Biodiversity Heritage Library для iPhone и iPad. В 2025 году игра получила App Store Award и Apple Design Award в категории Inclusivity, а в 2015-м у автора уже был студенческий ADA за Elementary Minute.

Метод, который стоит забрать себе: Screen Curtain в VoiceOver выключает экран, но оставляет навигацию. Штрассер проходил игру вслепую и консультировался с незрячим разработчиком из Германии; проект он сначала отложил именно из-за сложности доступного текста, а потом сформулировал правило «нет игры, которую нельзя сделать доступной». Его совет дословно: заставьте себя пользоваться своим приложением, не глядя на экран, и восприятие изменится.

20% дохода уходит природоохранным организациям; по одному сертификату защищено 3700 квадратных метров тропического леса. Продажи и число пользователей Apple не называет. История на Apple Developer.

Читать полностью…

Мобильная разработка

AGP 9.4 поднял потолок до API 37 и предупредил: в AGP 10 новый Variant API станет обязательным

Android Gradle Plugin 9.4 минорный релиз, но с чек-листом на обновление. Требуется Gradle 9.6.0, JDK 17, Build Tools 36.0.0, NDK по умолчанию 28.2.13676358; совместим с Android Studio Quail 4, которая тоже стала стабильной 1 сентября.

Новое поведение: плагин проверяет строгое соответствие variant dimensions у dynamic feature модулей и базового. По умолчанию несовпадение даёт предупреждение, флаг android.enforceDynamicFeatureVariantMatching=true превращает его в ошибку. Главное на будущее: начиная с AGP 10 новый Variant API обязателен для всех проектов, до этого модули можно временно исключать через android.newDsl.optOut. Из исправлений: пропавший L8 obfuscation mapping в mapping.txt, ошибка «SigningConfig is too eager» и ClassNotFoundException в connectedDebugAndroidTest с provider в dynamic feature. Google просит не писать зависимость как 9.4.+.

Читать полностью…

Мобильная разработка

Swiggy перевела гибридные экраны на Swift и SwiftUI, не останавливая выпуск фич

Индийский сервис доставки с аудиторией в миллионы пользователей начинал Instamart и Dineout как гибридные продукты, и при росте они упёрлись в знакомое: долгие загрузки, зависания на больших списках товаров, memory pressure и рваные анимации. Ограничения гибридной архитектуры не давали Dineout показывать качественные фото и видео.

Решение о миграции приняли в начале 2024 года, и главное в рассказе команды не «переписали всё», а порядок. Сначала нашли сценарии с наибольшим влиянием, домашние экраны и поиск, и выпустили их нативно за несколько недель. Дальше переводили по одному, параллельно продолжая выпускать функции. После миграции появились OCR для поиска по меню, сканирование списков продуктов и суммаризация с Apple Intelligence.

Цифр по конверсии и crash rate Apple не приводит, только слова команды об «самом большом сюрпризе» от эффекта. Разбор на Apple Developer.

Читать полностью…

Мобильная разработка

Google собирает альянс вокруг цифровых удостоверений на Android и открывает под них SDK

Android Ready SE, программа сертифицированных защищённых чипов, запущенная в 2021 году, станет Android Digital Credential Alliance: производители чипов и Secure Element, OEM, разработчики кошельков и государственные эмитенты. Google одновременно опубликовала whitepaper о том, как устроена цепочка доверия для удостоверений на базе Android Keystore и StrongBox.

Цепочка из четырёх шагов: аттестация ключа, привязка к устройству, выдача по ключу с аутентификацией пользователя и авторизация действий. StrongBox работает в физически изолированном Secure Element уровня Common Criteria EAL4+ с AVA_VAN.5, а выпуск удостоверения гейтится биометрией или PIN через HAT-токены. Для разработчиков открыт Multipaz SDK с OpenID4VCI и OpenID4VP, форматами ISO 18013-5 mDL и SD-JWT VC и zero-knowledge proofs на Longfellow-ZKP; на нём же построены Google Wallet и референсный кошелёк European Digital Identity.

Для российских разработчиков это пока архитектурный ориентир, а не продукт: о доступности Google Wallet и государственных эмитентах в регионе Google не пишет. Публикация Google и whitepaper с архитектурой.

Читать полностью…

Мобильная разработка

У Intel-приложений на Mac остался один релиз macOS

Apple 1 сентября напомнила: с macOS 26.4 пользователь может увидеть уведомление при запуске приложения, которому нужна Rosetta, а macOS 27, релиз этой осени, станет последним, где Intel-код вообще запускается на Apple Silicon. Исключение одно, старые неподдерживаемые игры на Intel-фреймворках.

Если ваше macOS-приложение или его helper-процессы собраны только под x86_64, времени ровно один цикл системы. Проверка начинается с lipo -info на бинарнике, а проблемы обычно живут не в своём коде, а в зависимостях: нативные модули Electron, Python-колёса с расширениями, старые фреймворки. Xcode собирает universal binary по умолчанию, но CI и нотаризацию для такой сборки стоит перепроверить.

Тем, у кого ARM-версия давно есть, Apple советует напрямую уведомить пользователей на старой Intel-сборке. Чек-лист по шагам разобрали на сайте.

Читать полностью…

Мобильная разработка

Ушедшие из App Store бренды подхватили чужие приложения: под Max, Rutube и VK Видео нашли подделки

Стоит правообладателю исчезнуть из стора, и его запросы достаются кому угодно. Anti-Malware.ru 2 сентября сообщило о трёх приложениях в российском App Store, которые копируют названия и оформление Max, Rutube и VK Видео. Пресс-службы Max и «Газпром-Медиа» подтвердили, что не имеют к ним отношения.

RUTUBE: Video Player, по данным карточки в магазине, вышел 18 июня, через две недели после удаления официального Max, и к 2 сентября набрал почти 950 оценок со средней 2,6. Идентификатор пакета com.rutube.app, разработчик WARD WILLIAM. MaxMessenger лежит в магазине с ноября 2024 года и просто оказался в нужном месте выдачи.

Для разработчика вывод практический: имя разработчика и описание на карточке остаются тем немногим, что пользователь может проверить сам, а у Apple есть отдельная форма спора о контенте для правообладателей. Разобрали и что известно о каждом из трёх приложений.

Читать полностью…

Мобильная разработка

Проверьте Kotlin-проект по 224 граблям из реальной разработки

Разработчик maxrave-dev три года в одиночку создавал SimpMusic — открытый музыкальный клиент на Kotlin и Compose Multiplatform для Android, Windows, macOS и Linux. Рядом не было сеньора или ревьюера, поэтому каждую поломку он разбирал и записывал сам.

Теперь эти заметки собраны в kotlin-footguns: 224 markdown-документа под лицензией GPL. В каждом описаны симптом, механизм ошибки и команды для проверки своей кодовой базы; файлы подходят и человеку, и агенту-кодеру.

Среди примеров — два экземпляра из-за путаницы между activityViewModels и activityViewModel, исчезнувший из Windows 11 wmic, файлы ._*, мешающие подписи сборки на macOS, и транзитивный strictly, способный перебить BOM и вызвать NoSuchMethodError. Каталог охватывает JVM, KMP, DI, Compose, CI, упаковку и медиадвижки.

Читать полностью…

Мобильная разработка

Запускайте локальную Gemma 4 в Android Studio без облачных квот и передачи кода

Google выпустила стабильную Android Studio Quail 4 — финальный релиз линейки Quail. В IDE встроена открытая модель Gemma 4: она работает офлайн, не отправляет код наружу, не упирается в квоты по токенам и умеет вызывать инструменты, так что многофайловый рефакторинг можно гонять без сети.

Модель выбирается в селекторе агента или по пути Settings > Tools > AI > Model Providers > Gemma. IDE сама скачает, проверит и обновит веса, движок инференса уже встроен. Самые маленькие модели заводятся на 12 ГБ оперативной памяти, лучше всего работают машины от 32 ГБ.

В Quail 4 также предзагружены 23 готовых навыка Android: агент сам подключает подходящий для обновления Android Gradle Plugin до версии 9, профилирования, перехода на Navigation3 или адаптации интерфейса под разные устройства. Раньше их приходилось докачивать вручную, а вне IDE весь набор ставится командой android skills add --all.

Читать полностью…

Мобильная разработка

Tinder вычистил keep-правила R8 — пользователей с медленным стартом стало на 47% меньше

В Android-приложении Tinder около 70% кода не оптимизировалось: R8 был включён, но keep-правила блокировали его работу, и никто не знал, какие именно. Новый R8 Configuration Analyzer это показал: главным виновником оказалось широкое правило -keep public class * { public protected *; } из внутренней библиотеки — оно накрывало зависимости по всему приложению, и даже в full mode оптимизировалось только 28% кода.

После чистки правил: пользователей, у которых приложение стартует медленно, стало меньше на 47%; размер загрузки упал с 86,6 до 61,5 МБ; доля воспринимаемых пользователем ANR снизилась с 0,35% до 0,28%; dex-файлов вместо 17 стало 11.

Analyzer входит в AGP 9.3: при release-сборке отчёт кладётся в build/outputs/mapping/release/configanalyzer.html, а без полной сборки его генерирует задача ./gradlew :app:analyzeReleaseR8Config (отчёт в build/reports/r8/). На старых AGP нужно сначала подключить свежий R8 и запустить сборку со специальным системным свойством — детали в статье.

Разбор в блоге Android Developers

Читать полностью…

Мобильная разработка

App Store 14 сентября сам изменит цены приложений — проверьте базовый регион

Apple обновила налоговые параметры App Store, поэтому часть разработчиков увидит другие выплаты и цены на региональных витринах. Изменения проходят в два этапа: сначала меняются суммы, которые получает разработчик, затем магазин автоматически корректирует цены.

С 27 августа выплаты пересчитаны для Марокко, Республики Конго и Танзании. В Марокко учитывается НДС 20%, в Республике Конго — НДС 18%, а налог на цифровые услуги в Танзании вырос с 2% до 3%.

С 14 сентября 2026 года App Store автоматически изменит цены приложений и встроенных покупок в Израиле, Индонезии, Марокко и Республике Конго. Исключение действует для региона, который разработчик выбрал базовым для своих цен. Автообновляемые подписки и цены, заданные вручную, пересчёт не затронет.

Перед 14 сентября разработчикам нужно проверить базовый регион и вручную заданные цены: от них зависит применение автоматической корректировки.

Читать полностью…

Мобильная разработка

Настоящая iOS в виртуалке на Mac: не симулятор, с root-шеллом внутри

Симулятор 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.

Практическая польза для мобильной команды: воспроизводимый стенд под баги, которые видны только на реальной ОС, и возможность отдать одинаковую машину каждому в команде вместо парка физических устройств.

Читать полностью…

Мобильная разработка

Из 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 не запрашивает.

Читать полностью…
Subscribe to a channel