fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

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

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

رفتن به کانال در Telegram

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

نمایش بیشتر

📈 تحلیل کانال تلگرام Мобильная разработка

کانال Мобильная разработка (@mobi_dev) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 13 075 مشترک است و جایگاه 9 646 را در دسته فناوری و برنامه‌ها و رتبه 49 528 را در منطقه روسيا دارد.

📊 شاخص‌های مخاطب و پویایی

از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 13 075 مشترک جذب کرده است.

بر اساس آخرین داده‌ها در تاریخ 25 اکتبر, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -97 و در ۲۴ ساعت گذشته برابر -1 بوده و همچنان دسترسی گسترده‌ای حفظ شده است.

  • وضعیت تأیید: تأیید نشده
  • نرخ تعامل (ER): میانگین تعامل مخاطب 9.60% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 6.51% واکنش نسبت به کل مشترکان کسب می‌کند.
  • دسترسی پست‌ها: هر پست به طور میانگین 1 255 بازدید دریافت می‌کند. در اولین روز معمولاً 851 بازدید جمع‌آوری می‌شود.
  • واکنش‌ها و تعامل: مخاطبان به‌طور فعال حمایت می‌کنند؛ میانگین واکنش به هر پست 1 است.
  • علایق موضوعی: محتوا بر موضوعات کلیدی مانند интерфейс, swift, доходность, linux, perfetto تمرکز دارد.

📝 توضیح و سیاست محتوایی

نویسنده این فضا را محل بیان دیدگاه‌های شخصی توصیف می‌کند:
“Актуальное по мобильной разработке — Android, iOS, кроссплатформа Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/o...”

به لطف به‌روزرسانی‌های پرتکرار (آخرین داده در تاریخ 26 اکتبر, 2026)، کانال همواره به‌روز و دارای دسترسی بالاست. تحلیل‌ها نشان می‌دهد مخاطبان به‌طور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامه‌ها تبدیل کرده‌اند.

13 075
مشترکین
-124 ساعت
-187 روز
-9730 روز
جذب مشترکین
اکتبر '26
اکتبر '26
+48
در 2 کانال‌ها
سپتامبر '26
+35
در 6 کانال‌ها
Get PRO
اوت '26
+37
در 3 کانال‌ها
Get PRO
ژوئیه '26
+50
در 1 کانال‌ها
Get PRO
ژوئن '26
+38
در 0 کانال‌ها
Get PRO
مه '26
+47
در 1 کانال‌ها
Get PRO
آوریل '26
+31
در 3 کانال‌ها
Get PRO
مارس '26
+43
در 0 کانال‌ها
Get PRO
فوریه '26
+48
در 2 کانال‌ها
Get PRO
ژانویه '26
+73
در 0 کانال‌ها
Get PRO
دسامبر '25
+102
در 1 کانال‌ها
Get PRO
نوامبر '25
+49
در 0 کانال‌ها
Get PRO
اکتبر '25
+140
در 0 کانال‌ها
Get PRO
سپتامبر '25
+33
در 0 کانال‌ها
Get PRO
اوت '25
+68
در 1 کانال‌ها
Get PRO
ژوئیه '25
+169
در 3 کانال‌ها
Get PRO
ژوئن '25
+183
در 3 کانال‌ها
Get PRO
مه '25
+134
در 3 کانال‌ها
Get PRO
آوریل '25
+173
در 4 کانال‌ها
Get PRO
مارس '25
+231
در 5 کانال‌ها
Get PRO
فوریه '25
+169
در 7 کانال‌ها
Get PRO
ژانویه '25
+149
در 7 کانال‌ها
Get PRO
دسامبر '24
+111
در 2 کانال‌ها
Get PRO
نوامبر '24
+81
در 1 کانال‌ها
Get PRO
اکتبر '24
+105
در 6 کانال‌ها
Get PRO
سپتامبر '24
+113
در 1 کانال‌ها
Get PRO
اوت '24
+115
در 2 کانال‌ها
Get PRO
ژوئیه '24
+95
در 5 کانال‌ها
Get PRO
ژوئن '24
+121
در 7 کانال‌ها
Get PRO
مه '24
+120
در 5 کانال‌ها
Get PRO
آوریل '24
+170
در 5 کانال‌ها
Get PRO
مارس '24
+137
در 8 کانال‌ها
Get PRO
فوریه '24
+111
در 9 کانال‌ها
Get PRO
ژانویه '24
+198
در 11 کانال‌ها
Get PRO
دسامبر '23
+254
در 7 کانال‌ها
Get PRO
نوامبر '23
+92
در 7 کانال‌ها
Get PRO
اکتبر '23
+99
در 8 کانال‌ها
Get PRO
سپتامبر '23
+67
در 0 کانال‌ها
Get PRO
اوت '23
+79
در 0 کانال‌ها
Get PRO
ژوئیه '23
+64
در 0 کانال‌ها
Get PRO
ژوئن '23
+83
در 0 کانال‌ها
Get PRO
مه '23
+83
در 0 کانال‌ها
Get PRO
آوریل '23
+118
در 0 کانال‌ها
Get PRO
مارس '23
+94
در 0 کانال‌ها
Get PRO
فوریه '23
+89
در 0 کانال‌ها
Get PRO
ژانویه '23
+185
در 0 کانال‌ها
Get PRO
دسامبر '22
+158
در 0 کانال‌ها
Get PRO
نوامبر '22
+156
در 0 کانال‌ها
Get PRO
اکتبر '22
+282
در 0 کانال‌ها
Get PRO
سپتامبر '22
+169
در 0 کانال‌ها
Get PRO
اوت '22
+383
در 0 کانال‌ها
Get PRO
ژوئیه '22
+315
در 0 کانال‌ها
Get PRO
ژوئن '22
+362
در 0 کانال‌ها
Get PRO
مه '22
+502
در 0 کانال‌ها
Get PRO
آوریل '22
+2 326
در 0 کانال‌ها
Get PRO
مارس '22
+685
در 0 کانال‌ها
Get PRO
فوریه '22
+1 000
در 0 کانال‌ها
Get PRO
ژانویه '22
+852
در 0 کانال‌ها
Get PRO
دسامبر '21
+390
در 0 کانال‌ها
Get PRO
نوامبر '21
+2 348
در 0 کانال‌ها
Get PRO
اکتبر '21
+2 515
در 0 کانال‌ها
Get PRO
سپتامبر '21
+209
در 0 کانال‌ها
Get PRO
اوت '21
+458
در 0 کانال‌ها
Get PRO
ژوئیه '21
+717
در 0 کانال‌ها
Get PRO
ژوئن '21
+464
در 0 کانال‌ها
Get PRO
مه '21
+129
در 0 کانال‌ها
Get PRO
آوریل '21
+2 702
در 0 کانال‌ها
Get PRO
مارس '21
+707
در 0 کانال‌ها
Get PRO
فوریه '21
+861
در 0 کانال‌ها
Get PRO
ژانویه '21
+5 692
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
26 اکتبر+1
25 اکتبر+2
24 اکتبر+2
23 اکتبر0
22 اکتبر+1
21 اکتبر+4
20 اکتبر+1
19 اکتبر+1
18 اکتبر+2
17 اکتبر0
16 اکتبر+1
15 اکتبر+1
14 اکتبر+1
13 اکتبر+3
12 اکتبر+2
11 اکتبر+2
10 اکتبر+3
09 اکتبر+5
08 اکتبر0
07 اکتبر+1
06 اکتبر+1
05 اکتبر+3
04 اکتبر+3
03 اکتبر0
02 اکتبر0
01 اکتبر+8
پست‌های کانال
Асинхронный MethodChannel ещё не означает работу вне главного потока В Dart вызов платформенного метода возвращает Future. Это описывает обмен сообщениями, но не выбирает поток для нативного обработчика. Долгая операция в обработчике всё ещё может занять главный поток платформы. В руководстве Flutter для этого разобран Task Queue API. На Android очередь создают через binaryMessenger.makeBackgroundTaskQueue() и передают в MethodChannel. На iOS Swift-пример получает её через registrar.messenger().makeBackgroundTaskQueue?() и задаёт параметр taskQueue у FlutterMethodChannel. При этом операции с UI должны оставаться в подходящем потоке платформы. Вызовы канала с нативной стороны в сторону Flutter тоже выполняют на главном потоке. Выбор Task Queue и запуск Dart Isolate — разные настройки. Перед переносом обработчика сверяйте требования плагина и SDK: минимальную версию Task Queue API эта страница не указывает.

2
ViewThatFits выбирает готовый вариант интерфейса по доступному месту Процент загрузки рядом с полосой прогресса, только полоса или только процент — в примере Apple это три варианта одного компонента. Разработчик заранее описывает каждый из них и задаёт порядок предпочтения. ViewThatFits проверяет дочерние представления по этому порядку и выбирает первое, чей идеальный размер помещается в предложенное пространство по проверяемым осям. По умолчанию учитываются ширина и высота. В примере используется ViewThatFits(in: .horizontal), поэтому решение зависит только от ширины. Контейнер доступен с iOS 16. Он удобен, когда у компонента есть осмысленные полная и компактная версии. Но эти версии всё равно нужно спроектировать: контейнер лишь выбирает среди них. Крупные размеры Dynamic Type стоит проверить для каждого варианта отдельно.
742
3
Счётчик в DataStore увеличивайте внутри updateData Прочитать значение, прибавить единицу в интерфейсе, записать результат — между этими действиями другое обновление может изменить тот же счётчик. Если записать число из старого состояния экрана, прибавление потеряется. У Jetpack DataStore преобразование выполняют внутри updateData. В официальном примере с JSON новый объект строится из переданного текущего состояния: settings.copy(exampleCounter = settings.exampleCounter + 1). Чтение, изменение и запись образуют одну атомарную транзакцию. Для Preferences есть и suspend-функция edit. Эта гарантия требует правильного использования: один активный экземпляр DataStore на файл в одном процессе и неизменяемый тип данных. Для нескольких процессов нужен MultiProcessDataStore, доступный с версии 1.1.0. Гарантия не распространяется на общую транзакцию с сервером или другим файлом. Для сложных связанных данных уместнее Room.
898
4
Форма во Flutter может пережить завершение фонового процесса Пользователь заполнял форму, переключился в другое приложение, а Android освободил память и завершил фоновый процесс. При возвращении экран создаётся заново. Для незавершённого ввода и выбранной вкладки у Flutter есть state restoration. Восстановление подключается по уровням: restorationScopeId у приложения, restorationId у поддерживающих его виджетов. Собственное состояние хранят в RestorableProperty и регистрируют в restoreState через RestorationMixin. Данные передаются движку по мере изменений, а не только в последний момент перед завершением процесса. Навигацию нужно настроить отдельно. При прямой работе с Navigator стек восстанавливают через методы вроде restorablePush. А важный черновик всё равно стоит сохранять в постоянном хранилище: объём instance state на Android ограничен, и restoration не даёт гарантии для любого принудительного закрытия приложения. Проверка через hot reload также не заменяет тест восстановления после завершения процесса.
979
5
Смена id отменяет SwiftUI task, но не останавливает любой код внутри В поиске пользователь уже дописал запрос, а обработка предыдущего ещё идёт. Модификатор .task(id: query) связывает задачу со значением запроса: при изменении id SwiftUI отменяет старую задачу и создаёт новую. Само значение должно быть Equatable. Базовый механизм доступен с iOS 15. Дальше действует правило Swift Concurrency: отмена кооперативная. Произвольная функция может продолжить работу, если сама не проверяет отмену и не вызывает код, который на неё реагирует. Для собственной долгой обработки есть Task.checkCancellation(), бросающий ошибку при отмене. Поэтому при разборе такого поиска полезно проследить весь путь запроса до обновления экрана. Если тяжёлая обработка игнорирует отмену, один .task(id:) этого не исправит. Он также не гарантирует защиту от всех устаревших результатов.
988
6
derivedStateOf полезен, когда экрану нужны не все изменения состояния Кнопку «Наверх» интересует, ушёл ли пользователь с начала списка. Индекс первой видимой строки меняется с 1 на 2, затем на 3, но кнопка всё это время должна оставаться видимой. Для такого случая в документации Compose используют remember { derivedStateOf { listState.firstVisibleItemIndex > 0 } }. Интерфейс наблюдает булев результат и не получает новое значение при каждом изменении индекса. Рекомпозиции из-за других входов composable этот приём не отменяет. А вот собирать имя и фамилию через derivedStateOf обычно незачем: итоговая строка должна обновляться вместе с ними. У механизма есть собственная цена. Прежде чем добавлять его, сравните частоту изменения входа и нужного результата. Минимальную версию Compose для своего проекта сверяйте отдельно: этот раздел её не задаёт.
998
7
Google открыл публикацию Android-игр для автомобильных экранов с запуском только на стоянке Игры для Android Auto и Android A
Google открыл публикацию Android-игр для автомобильных экранов с запуском только на стоянке Игры для Android Auto и Android Automotive OS вышли из беты: теперь разработчики могут отправлять их в открытое тестирование и в рабочую публикацию Google Play. В руководстве по адаптации разобраны настройки манифеста и требования к поведению. Для Android Auto поддержка игр начинается с Android 15; для Automotive OS отдельно объявляется автомобильный форм-фактор. Игры относятся к приложениям для стоянки. При начале движения система блокирует их интерфейс, а разработчик должен остановить звук и исключить его повторный запуск в движении. После возвращения в игру состояние нужно восстановить как можно ближе к прежнему. Ещё понадобятся адаптация под широкие и вертикальные экраны и проверка качества. Android Auto тестируют через Desktop Head Unit, Automotive OS — через соответствующий эмулятор. Одних изменений манифеста для публикации недостаточно.
1 117
8
Typed throws в Swift позволяет проверять обработку конкретного типа ошибок при компиляции Обычный throws сообщает, что функци
Typed throws в Swift позволяет проверять обработку конкретного типа ошибок при компиляции Обычный throws сообщает, что функция может завершиться ошибкой, но не ограничивает её конкретным типом. В catch приходится выяснять, что именно прилетело. В разборе typed throws функция объявляет throws(CatError). Когда тип сохраняется до обработчика, catch получает CatError, и компилятор проверяет полноту switch по вариантам перечисления. Однако конкретный тип можно потерять. Например, если внутри do вызываются функции с разными типами ошибок, результат может расшириться до any Error. Типизация замыканий тоже влияет на то, что дойдёт до вызывающего кода. У публичного API есть цена: расширение набора ошибок затрагивает клиентов с исчерпывающей обработкой. Поэтому точный тип полезен там, где этот контракт действительно нужен. Автоматически заменять им все обычные throws не стоит.
1 028
9
Google Play позволяет сообщать о проблемах оплаты подписки прямо в приложении Продление не прошло, пользователь продолжает от
Google Play позволяет сообщать о проблемах оплаты подписки прямо в приложении Продление не прошло, пользователь продолжает открывать приложение, а письмо с просьбой обновить способ оплаты остаётся непрочитанным. В разборе обновлений подписок Google Play Google отдельно выделяет In-App Messaging API. Он доступен всем разработчикам и позволяет показывать пользователю сообщения о проблемах оплаты и предстоящих изменениях цены внутри приложения. Вместо собственного экрана с общим текстом «что-то пошло не так» можно подключить предусмотренный магазином сценарий восстановления оплаты. Это стоит проверить рядом с обработкой состояний подписки на сервере. Само сообщение не подтверждает успешный платёж. Доступ к платным возможностям всё равно должен соответствовать актуальному состоянию покупки. В статье также описаны механизмы удержания и возврата подписчиков — их доступность нужно проверять отдельно.
1 049
10
Rive 6.28 автоматически перерисовывает анимацию при изменении связанных данных В приложении поменялось значение модели, а ани
Rive 6.28 автоматически перерисовывает анимацию при изменении связанных данных В приложении поменялось значение модели, а анимация осталась прежней. В новом Swift Concurrency runtime Rive обновления связанных данных теперь сами вызывают перерисовку. В релизе rive-ios 6.28.0 это работает для основной и глобальных моделей, включая вложенные модели и элементы списков. Отдельно следить за dirtyStream() ради перерисовки больше не требуется; API объявлен устаревшим. При миграции важно сохранить нужные экземпляры моделей у себя и явно связать их с машиной состояний. У новых удобных инициализаторов устаревший getter Rive.viewModelInstance возвращает nil — прежний способ получить модель уже не подходит. На странице релизов есть пример перехода. После 6.28.0 также вышла 6.28.1 с исправлениями и улучшениями списков, поэтому при обновлении стоит смотреть изменения обеих версий.
1 094
11
Swift 6.4 разрешает писать some View? и any P? без лишних скобок Раньше optional-тип приходилось записывать как (some View)?
Swift 6.4 разрешает писать some View? и any P? без лишних скобок Раньше optional-тип приходилось записывать как (some View)? или (any Delegate)?. Без скобок парсер связывал вопросительный знак с протоколом, а затем отклонял результат. В Swift 6.4 изменили это правило: some View? означает optional от скрытого конкретного типа, а any Delegate? — optional от экзистенциального типа. Старые записи со скобками остаются корректными. Исключение — композиция протоколов. Для неё всё ещё нужны (any Codable & Sendable)? или any (Codable & Sendable)?. Короткая запись any Codable & Sendable? не принимается. Изменение упрощает объявления делегатов и возвращаемых значений. Разницу между some и any оно сохраняет, а переходить на новый синтаксис во всём проекте не обязательно.
1 073
12
AndroidX Security State показывает исправления безопасности отдельно для компонентов устройства Одна дата обновления Android
AndroidX Security State показывает исправления безопасности отдельно для компонентов устройства Одна дата обновления Android не описывает всю картину: система, модули Google Play и ядро обновляются разными путями. AndroidX Security State позволяет различать три состояния: что установлено на устройстве, какие исправления опубликованы и какое обновление уже доступно для установки именно здесь. Эти сведения помогают приложению объяснить пользователю, чего не хватает. Например, корпоративное приложение может обнаружить готовое обновление и направить сотрудника в настройки. Для проверки конкретных уязвимостей библиотека использует данные бюллетеней безопасности через OSV. Доступность сведений об ожидающем обновлении зависит от клиента обновлений: он должен предоставлять их через поддерживаемый механизм. Поэтому отсутствие таких данных нельзя автоматически трактовать как отсутствие исправлений или подтверждение безопасности устройства.
1 076
13
RevenueCat позволяет проверить план изменения продуктов магазина до его применения Агенту поручили поменять цены подписки. Пе
RevenueCat позволяет проверить план изменения продуктов магазина до его применения Агенту поручили поменять цены подписки. Перед изменениями хочется увидеть, какие продукты и регионы он собирается затронуть, и сохранить настройки в репозитории. В обновлении RevenueCat AI Toolkit для этого описан процесс через CLI: rc products store plan строит план из файла, show показывает его, а apply применяет изменения отдельным действием. Так желаемое состояние каталога можно хранить в CSV и отправлять на ревью вместе с кодом. Проверка плана особенно полезна, когда запрос касается сразу двух магазинов или нескольких цен. Сам CLI находится в публичной бете. Для автоматизации у него есть JSON-вывод, описание команд и режим --no-input, который завершает команду ошибкой вместо ожидания ответа. Создание плана ещё не означает, что цены в магазине уже изменились.
1 203
14
layoutMarginsGuide выравнивает содержимое UIKit по системным отступам устройства Отступ в 16 пунктов совпал с краем заголовка
layoutMarginsGuide выравнивает содержимое UIKit по системным отступам устройства Отступ в 16 пунктов совпал с краем заголовка на одном iPhone, а на другом текст оказался левее. Системные поля меняются в зависимости от устройства и ориентации, поэтому фиксированное число подходит не всегда. В разборе layoutMarginsGuide автор привязывает содержимое к направляющим отступов корневого view контроллера. Система задаёт им поля, согласованные с навигационной панелью. По умолчанию направляющие учитывают безопасную область экрана. В альбомной ориентации отступ со стороны Dynamic Island включает и эту область, и дополнительное поле. Повторно прибавлять safe area не нужно. У вложенных view собственные поля: совпадение с родительскими не следует считать автоматическим. Для настройки пригодятся directionalLayoutMargins и preservesSuperviewLayoutMargins. В статье есть сравнения на разных экранах.
1 215
15
ADB Wi-Fi 2.0 улучшает восстановление соединения при беспроводной отладке Телефон уснул или изменилась конфигурация сети — ус
ADB Wi-Fi 2.0 улучшает восстановление соединения при беспроводной отладке Телефон уснул или изменилась конфигурация сети — устройство пропало из ADB. В ADB Wi-Fi 2.0 Google переработал сервер adb, демон adbd и интеграцию с Android Studio, чтобы такие разрывы меньше мешали работе. На компьютере новый стек mDNS заменяет Bonjour и прежнюю реализацию обнаружения устройств. На телефоне отладка автоматически выключается в недоверенной сети и включается снова после возвращения в разрешённую пользователем. В Android Studio устройство с включённой беспроводной отладкой появляется в Device Manager. Для сопряжения можно использовать QR-код или код подключения. Для нового стека нужны Android 17, SDK Platform-Tools 37.0.0 и Android Studio Quail 3 или новее. Компьютер и устройство должны находиться в одной Wi-Fi-сети: обновление не превращает ADB в подключение через любой интернет.
1 276
16
У пейволла две кнопки закрытия? Проверьте способ показа Крестик, нарисованный внутри PaywallView, остаётся частью пейволла. О
У пейволла две кнопки закрытия? Проверьте способ показа Крестик, нарисованный внутри PaywallView, остаётся частью пейволла. Он не перемещается вместе с системным toolbar, когда интерфейс адаптируется к складному экрану. В руководстве RevenueCat отдельно разбирают готовый presentPaywallIfNeeded и самостоятельный показ через sheet. Во втором случае рекомендуют убрать внутренний крестик и добавить закрытие в toolbar с placement cancellationAction. Для дизайна со своим крестиком есть другой вариант: отключить вертикальные панели через toolbarVerticalBehavior(.disabled) и проверить его положение. Выбор должен оставаться последовательным. При смене положения экрана должны сохраняться тарифы, цены и условия пробного периода. Кнопки и карточки покупки также стоит проверить в полусогнутом режиме: важные действия не должны попадать на сгиб.
1 357
17
ArrangementView не всегда делит экран пополам У обложки и текста статьи разные потребности в пространстве. В iOS 27.1 долю ка
ArrangementView не всегда делит экран пополам У обложки и текста статьи разные потребности в пространстве. В iOS 27.1 долю каждой панели ArrangementView можно задать через splitArrangementLayoutRatio. В примере с пропорциями значение idealHorizontal: 1 / 3 отдаёт представлению треть ширины. Для вертикальной компоновки есть idealVertical, а единое значение применяется к обеим осям. Но на полусогнутом iPhone Duo разделение проходит по сгибу, и заданная пропорция игнорируется. Ширина доступного содержимого при этом может различаться из-за системной панели. Модификатор также не увеличивает область под слишком большой контент: тот может выйти за её границы. Проверять нужно и пропорцию, и содержимое каждой панели. Для размеров в пунктах предусмотрен отдельный splitArrangementLayoutSize.
1 348
18
Deep links теперь можно проверить прямо в Play Console Ссылка из магазина должна привести пользователя к нужному содержимому
Deep links теперь можно проверить прямо в Play Console Ссылка из магазина должна привести пользователя к нужному содержимому приложения. Проверить её до публикации можно без отдельного физического устройства. Google представила встроенный deep link emulator в Play Console. Он позволяет просматривать и тестировать ссылки прямо в консоли. В том же обновлении Ask Play получил сравнения приложений: например, по доступности офлайн-режима или модели подписки. Для ответов используются описание в магазине и отзывы пользователей. Перед выпуском новой функции полезно проверить обе части: понятно ли она описана в карточке приложения и ведут ли связанные ссылки туда, куда ожидает пользователь. Работающий экран мало поможет, если путь к нему сломан.
1 445
19
Почему AI легче написать экран, чем мигрировать приложение Небольшое исправление и перенос десятков экранов проверяют разные
Почему AI легче написать экран, чем мигрировать приложение Небольшое исправление и перенос десятков экранов проверяют разные возможности агента. В миграции нужно сохранить связи, поведение и рабочую сборку. В Android Bench 2.0 добавили длинные задачи: обновление зависимостей, создание приложений и перенос с других платформ. Помимо полного прохождения учитывают долю выполненных требований, визуальное соответствие и регрессии. На момент публикации лучший pass rate длинных задач составлял около 28%, тогда как у исходного набора — около 91%. Эти числа относятся к разным наборам задач. Среди проблемных мест Google отмечает проверку во время выполнения, DI-графы и несовместимые изменения фреймворков. Для миграции приложения это повод заранее определить проверяемые этапы и критерии готовности.
1 367
20
Size classes не скажут, насколько согнут экран Для адаптивной вёрстки легко написать условие: compact — телефон, regular — бо
Size classes не скажут, насколько согнут экран Для адаптивной вёрстки легко написать условие: compact — телефон, regular — большой экран. Но определить положение шарнира таким способом не получится. В замерах iPhone Duo внутренний дисплей возвращает regular по обеим осям и в открытом, и в полусогнутом состоянии. На внешнем экране ширина compact, а в landscape compact становится и высота. Есть ещё одна деталь: внутри ArrangementView каждая панель получает size classes по собственному размеру. Они могут отличаться от характеристик всего окна. Поэтому значение из environment нужно читать там, к чему относится решение. Перестраиваете конкретную панель — смотрите её пространство. Выбираете компоновку для всего окна — считайте size classes выше ArrangementView.
1 354