15502
Актуальное по мобильной разработке — Android, iOS, кроссплатформа Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Другие наши проекты: https://tprg.ru/media
Управляйте форм-фактором 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.
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 в локалке, это ваш ближайший приоритет.
Приложение с открытым кодом выкинули из Google Play по жалобе без единого доказательства
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 и на сайте проекта.
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.
Две функции Android-приложения месяц не работали в релизе, а в debug всё было в порядке
Автор 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, каждый регистратор должен быть там дважды. Разбор целиком.
Ваша память ещё работает или нейронки уже и помнят всё за вас?
Чтобы это проверить мы приготовили для вас «Меморину» — игру, которая поможет проверить вашу память.
Всё просто: нужно запомнить и выбрать одинаковые карточки. Если память плохая, то рано или поздно вы всё равно справитесь. А если хорошая, то сможете увидеть ваш потолок скорости.
Ну что, готовы проверить? Тогда переходите по ссылке: https://tprg.ru/fw4Z
Android 17 даёт приложениям функции, которые ИИ-агенты могут вызывать сами
Привыкли, что приложение ждёт, пока вы сами нажмёте кнопку? В Android 17 Google меняет правила: разработчик аннотирует функции приложения, и ИИ-агент может дергать их через Jetpack, получая доступ к локальному состоянию.
Приложение перестаёт быть островом и становится частью инфраструктуры для агентов. 16 июня вышел Android 17 с API 37, а 9 июня появился Android CLI 1.0. Теперь проект можно собирать из командной строки.
Вдобавок с 30 сентября разработчиков ждёт обязательная верификация в четырёх странах, а в Play сервисный сбор отделяется от платёжного. Разобрали дайджест июня — кто платит, кто мигрирует и что ломается.
Аутсорс, инхаус или выделенная команда — что реально дешевле?
Спойлер: ставка разработчика вам этого не скажет. Сравнивать модели по ставке довольно бессмысленное занятие, потому что за низкими ставками прячутся найм, налоги, онбординг, простои, переделки и часы техлида. В смете их не видно, а в бюджете — ещё как.
Разбираемся, как считать настоящий TCO (полную стоимость владения) по трём моделям:
🔘Инхаус — почему свой разработчик дороже оффера;
🔘Аутсорс — за что вы платите маржу подрядчику;
🔘Выделенные команды — почему «возьмём человека и ускоримся» работает не всегда.
Внутри — формулы для каждой модели и чек-лист из 3 пунктов, чтобы выбрать формат под свой проект.
⚡️ Android-приложение — это не только красивый экран. За ним стоят работа с внешним API, загрузка данных, разделение логики по слоям и архитектура, которую можно поддерживать без хаоса в коде.
📎 2 июля в 20:00 МСК приглашаем вас на открытый урок в преддверии старта курса «Android-разработчик. Базовый уровень». На занятии разберём путь данных в Android-приложении: от запроса к серверу до отображения информации на экране.
Посмотрим, как работать со сторонним API, реализовать выход в интернет для загрузки фотографии и описания, разделить приложение на слои по принципам чистой архитектуры и MVVM, а также прописать логику отображения данных.
➡️ Урок подойдёт тем, кто начинает карьеру в Android-разработке и хочет понять, как создаются приложения в реальной работе.
Зарегистрируйтесь и разберитесь, как связать сервер, архитектуру и экран в одном Android-приложении!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Появляется всё больше материалов с практическим опытом внедрения ИИ в крупных командах. Меня в таких историях всегда забавляет момент, когда эйфория от возможностей сталкивается с суровой реальностью процессов. Недавно посмотрел доклад Артура Василова про адаптацию ИИ в команде мобильного Яндекс Браузера — в нём звучит несколько идей, которые показывают настоящую картину.
Во-первых, нельзя просто взять и сказать: «всё, теперь мы работаем в 2 раза быстрее, вот LLM, вперёд» — это не серебряная пуля. Внедрять нужно постепенно и методично, выстроив среду и условия для перехода к AI-first разработке.
Во-вторых, как показала практика команды, реальное ускорение — 10–30%, а не в разы, как можно мечтать, потому что разработка лишь часть цикла производства. Ускорение разработки ≠ ускорение выхода фич на прод, и это важно чётко понимать.
Ещё одна мысль, которую я сам периодически повторяю окружающим: не пытайтесь применить ИИ везде и всюду. Берегите мозг, разгружайте себя от рутины, используйте там, где это уместно, но не прекращайте думать своей головой и отвечать за результат.
В докладе ещё много всего: как обеспечить окружение, какие метрики использовать для внедрения, как кучу Objective-C кода переводят на Swift, как подтягивают изменения из Chromium и мёрджат, что важно понимать бизнесу про AI-first. Такой набор тем даёт достаточно полную картину того, с чем сталкивается команда при внедрении, и оставляет пространство для собственных выводов и решений.
Локализация через Enum: избавляемся от рантайм-парсинга
В статье на Tproger разобрали три подхода к локализации: классическое наследование требует дублировать поля вручную, стандартные ARB/JSON парсятся в рантайме и съедают память, а табличные генераторы требуют ручного запуска после каждой строки.
Выход — Enum в одном файле без внешних ресурсов. Это убирает рантайм-парсинг и ручное дублирование. Если ваши сервисы сопрягаются с клиентами, где локализация до сих пор требует JSON или генераторов, стоит переложить её на compile-time решение.
Compose Multiplatform 1.11: iOS становится ближе к нативному ощущению
Кроссплатформенный 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)
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 не запрашивает.
Агент сам жмёт кнопки в вашем Compose-приложении и проверяет, что вышло
В 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.
Семейная подписка в iOS-приложении без сервера и аккаунтов
Соло-разработчик сканера чеков ReceiptIQ добавил самую просимую фичу: одна подписка на семью и общие чеки. Сервера, аккаунтов и копий данных вне телефонов нет: устройства синхронизируются напрямую по Wi-Fi. Он расписал архитектуру и что сломалось по дороге.
Главный трюк: телефон родственника сам проверяет, что владелец платит. StoreKit 2 отдаёт транзакцию как JWS с подписью Apple (jwsRepresentation; jsonRepresentation подделывается), устройство проверяет цепочку сертификатов, подпись, bundle ID и environment == Production. Следствие: в TestFlight пейринг не потестировать, там Sandbox.
Слияние по last-writer-wins принесло классику: перештамповал modifiedAt при применении, и два телефона гоняли запись по кругу. Ещё один баг прожил два месяца: пир молча пропускал недоступные фото, синк не завершался, хотя данные доходили. Лечит таймаут тишины 30 секунд.
Есть синк между устройствами? Сверьте свои инварианты с его списком.
61% того, что KMP-модуль отдаёт в iOS, никто не вызывает
Если у вас 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, автор показал, как прогнать через него свой модуль.
Встречайте новую мини-игру — «Отпуск».
За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи, отыскать билет и упаковать чемодан. Отдельный этап — отпускной гардероб, и тут всё непросто.
Простое управление, короткие уровни, юмор. Отличный способ отвлечься на пару минут между задачами и заодно поймать промокоды от партнёров!
Попробовать: https://tprg.ru/DtBr
Почему ваш пет-проект ещё не бизнес, а вы — не предприниматель
У каждого второго разработчика в столе лежит проект, который «вот-вот станет бизнесом». Осталось дописать пару фич — и дальше всё поедет само. Спойлер: не поедет. Разбираемся, где заканчивается код и начинается бизнес: почему всё стартует не с технологии, а с чужой проблемы, чем фаундер отличается от тимлида и почему рабочий сервис с первыми пользователями и MRR — это не бизнес, а промежуточный результат.
Простой тест: уйдите в отпуск на две недели, и если без вас всё встало — поздравляем, у вас пока не бизнес, а вы сами и есть главный «производственный ресурс».
Внутри ещё и про AR-очки на трамвайном заводе, которые зарубили сами рабочие: история о том, как ценность решения определяете не вы.
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 тоже на борту. Подробности в обзоре.
Бывают баги, которые видно только на живом железе, поэтому для надёжного тестирования мобильных приложений компании либо собирали парки из «живых» устройств в офисах, либо покупали сотрудникам минимально необходимый набор, не покрывая все кейсы.
Теперь делать это совсем не обязательно, потому что можно собрать себе набор устройств через мобильную ферму Selectel.
Мобильная ферма — это реальные устройства, которые находятся в надёжном дата центре, а выбрать себе нужные для тестов можно просто через админку. После завершения сеанса ваши настройки сохранятся для будущих тестов, а данные — надёжно защищены. В парке устройств самые разные модели: от топовых до старых и редких. Система поддерживает параллельное тестирование, а обслуживание устройств Selectel полностью берёт на себя.
Кстати, новые клиенты при регистрации до 31го июля получат 100 минут на тест.
Это #партнёрский пост
Взлом по подписке: ИИ-агенты против мобильных приложений
Экзотический фреймворк больше не спасает. Для взлома достаточно подписки на ИИ-агента. Стоимость атак упала, а скорость выросла.
2 июля, в 14:00 Николай Анисеня, руководитель разработки PT MAZE, разберет, как сделать взлом вашего приложения невыгодным для злоумышленника, и поговорит о том:
➡️ Что изменилось в реверс-инжиниринге сегодня и почему это важно;
➡️ Что агентский реверс умеет хорошо, а где пока буксует;
➡️ Как остановить связку «агент + человек», пока она не дошла до вашего прода.
И главное: в прямом эфире покажем, как агент атакует одно и то же приложение — без защиты и в броне PT MAZE.
Смотрите и делайте выводы.
📎 Регистрация
Это #партнёрский пост
⚡️Если вы разрабатываете мобильные игры и хотите зарабатывать больше без комиссий сторов — заходите в канал D2C!
Здесь пишут о том, как запустить собственный вебшоп и продавать игрокам напрямую: настройка, LiveOps, рост повторных покупок.
А ещё можно задать вопросы и получить ответы от тех, кто уже строит веб-монетизацию в геймдеве.
➡️Подписывайтесь
Реклама. ООО Е-Промо. ИНН 5260246781. Erid: 2W5zFHq9LYH
Это #партнёрский пост
Если вы устали от бесконечных тасок и созвонов, то мы приготовили для вас игру, которая поможет отдохнуть
А заодно проверить вашу способность быстро запоминать новую инфу. Переходите по ссылке и играйте в нашу «Меморину». И делитесь результатами в комментариях!
Играть тут: https://tprg.ru/Yldr
@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)