Фирменную анимацию раскрытия интерфейса iPhone Duo повторили на Samsung Galaxy Z Fold 8. Разработчик с Reddit использовал штатный датчик шарнира и шейдеры, доказав, что Samsung способна добавить такую же фишку в обычном обновлении One UI.
Данные с сенсора в реальном времени управляют шейдером AGSL через Android Presentation API. Шейдер интерполирует изображение между скриншотами внешнего и внутреннего экранов в зависимости от того, под каким углом сейчас раскрыт корпус.
Первый продукт нового гендиректора Apple — складной iPhone Duo
9 сентября Apple представила свой первый складной смартфон — iPhone Duo. Зайдёт ли новый продукт пользователям — это уже зона ответственности Джона Тернуса, нового генерального директора Apple. Его основная специальность — инженер, и есть надежда, что теперь компания больше внимания уделит принципиально новым продуктам.
Тим Кук за 14 лет в разы вырастил стоимость компании, но из плюс-минус инновационных продуктов он запустил только умные часы Apple Watch и гарнитуру смешанной реальности Apple Vision Pro. Часы аудитории зашли, а смешанная реальность, можно сказать, провалилась. Что нам обещает Тернус?
Складной iPhone Duo получил непривычный форм-фактор — в разложенном состоянии получается практически iPad mini — 7,6 дюйма по диагонали при соотношении сторон 1,4:1.
Как iPhone Duo, так и новые iPhone 18 Pro и Pro Max получили новый процессор A20 Pro, 48-мегапиксельные камеры, причём с использованием физической диафрагмы — она спасёт от пересвета при ярком свете и позволит управлять глубиной сцены. Показательно, что iPhone Duo пришлось иметь меньше новых функций, чем iPhone 18 Pro: в жертву форм-фактору принесена Face ID (пришлось обойтись сканером отпечатков пальцев), и камер всего две. Во всех новых устройствах Apple наконец-то насыпала ручных настроек для съёмки, раньше приходилось обходиться очень куцым набором, а человек до сих пор в сложных сценах справляется лучше ИИ.
Искусственный интеллект — самая интересная тема в анонсе Apple после складного смартфона. Компания смирилась, что собственные модели неконкурентоспособны, и обещала интеграцию Apple Intelligence (AI) с локальными ИИ-моделями — они отличаются от региона к региону. AI сможет учитывать действия пользователя, контекст, улучшит и параметры съёмки, и перевод для разных языков. Однако в первую очередь AI будет работать на английском языке и будет доступна не во всех регионах (подозреваем, что сюда входит и Россия).
Полагаем, что для Джона Тернуса станет одной из самых важных задач встроить современные модели в экосистему Apple, чтобы у пользователей не было соблазна поменять производителя ради более умной ИИ-модели. Не случайно анонсированные наушники AirPods 5, умные часы Apple Watch 12 и Ultra 4, кроме функций слежения за здоровьем, поддерживают распознавание речи и перевод (наушники) или расшифровку беседы (часы) — Тернус начал игру в эпоху ИИ.
Что Apple покажет сегодня: складной iPhone, iPhone 18 Pro и новые AirPods
Уже сегодня в 20:00 по Москве Apple проведёт презентацию, на которой, по слухам, покажут сразу несколько новых устройств. Главная интрига — первый складной iPhone.
Собрали ключевые ожидания и инсайды перед мероприятием.
📱 iPhone 18 Pro и Pro Max
Ожидается обновление сразу по нескольким направлениям:
• A20 Pro на 2-нм техпроцессе — более производительный чип с потенциально меньшим нагревом. • Модем Apple C2. • Немного изменённый и увеличенный блок камер. • Новый цвет — тёмная вишня. • Для iPhone 18 Pro Max могут оставить эксклюзивную камеру с переменной диафрагмой, а также увеличить ёмкость аккумулятора.
📖 Складной iPhone
Самая ожидаемая новинка может получить форм-фактор «книжки»: в сложенном состоянии это обычный смартфон, а после раскрытия — устройство с экраном примерно 7,7–7,8 дюйма.
Предполагаемые характеристики:
• внешний дисплей — около 5,3–5,5 дюйма; • соотношение сторон внутреннего экрана — 4:3; • складка на дисплее должна быть практически незаметной; • модифицированная версия A20; • около 12 ГБ оперативной памяти; • модем C2; • возможно, аккумулятор станет самым ёмким среди всех iPhone.
По слухам, стартовая цена составит около 171 000 рублей, а версия с 2 ТБ памяти может стоить до 258 000 рублей.
⌚ Apple Watch Series 12 и Ultra 4
Большого визуального обновления часов, судя по инсайдам, ждать не стоит. Слухи о Touch ID также пока не получили подтверждения.
При этом Series 12 может вернуть керамический корпус — якобы в белом и тёмно-сером цветах.
Ожидается новый более производительный S-чип, который станет первым процессором Apple Watch с оптимизацией под задачи ИИ.
У Ultra 4 могут расширить возможности спутниковой связи, а также добавить непрерывный мониторинг пульса.
🎧 AirPods 5
Apple, по слухам, готовит две версии новых наушников — с активным шумоподавлением и без него.
Также обсуждаются инфракрасные датчики, которые могут использоваться для распознавания жестов, и другие расширенные сенсорные возможности.
Главный вопрос презентации остаётся прежним: действительно ли Apple сегодня представит свой первый складной iPhone. Если да, именно он станет главным устройством вечера.
Собираем интерфейс приложения как LEGO — проект M3E Canvas позволяет расставлять кнопки, поля ввода, навигацию и другие UI‑элементы, а затем генерирует готовый промпт для ИИ. Можно менять цвета, шрифты и настраивать переходы между экранами. После сборки достаточно скопировать промпт и вставить его в нейросеть, чтобы быстро получить приложение.
Представлен открытый проект Phone Farm iOS - TikTok-ферма на устройствах с iOS. Подключаем iPhone к Mac, регистрируем в панели и управляем прямо из браузера: можно смотреть экран в реальном времени, тапать, свайпать и запускать автоматизацию TikTok. Встроенный планировщик публикует посты и слайд-шоу по расписанию, а очередь и история запусков хранятся в PostgreSQL. Проект работает без джейлбрейка и полностью локально.
Представлен открытый проект vphone-cli для загрузки виртуального iPhone с помощью фреймворка Virtualization.framework от Apple, используя инфраструктуру виртуальных машин PCC Research.
Хороший код: как понять, что его будет удобно менять
Понятные имена, небольшие методы и аккуратное форматирование делают код проще для чтения. Но даже аккуратный файл может оказаться дорогим в работе, если небольшое изменение требует восстановить много контекста и затронуть несколько частей системы.
Вместе с Ринатом, iOS-разработчиком в Naumen, разбираемся, почему хороший код проверяется следующей задачей, как проявляется сложность изменений и на что стоит смотреть при оценке кода.
Код проверяется следующей задачей
Пока работа над задачей еще свежая, почти любой код кажется понятным. Автор помнит, почему вызовы стоят именно в таком порядке, какой случай обсуждали на ревью и что здесь собирались переделать позже. Коллеги тоже держат часть контекста в голове.
Так что даже не самое удачное решение какое‑то время не доставляет особых проблем.
Через полгода ситуация меняется: исходная задача давно закрыта, участники обсуждения заняты другими частями проекта, а другому разработчику нужно внести небольшое изменение.
Именно в этот момент становится понятно, насколько код вообще рассчитан на изменения.
Простая задача может оказаться дорогой
Одна из задач у нас на планировании звучала безобидно:
После ошибки авторизации запрос повторять не нужно, после временной сетевой ошибки — нужно, причем с увеличивающейся задержкой.
Само условие укладывается в несколько строк. Но сначала приходится выяснить, где на самом деле живет это правило: в сетевом клиенте, в сервисе авторизации, в middleware.
А еще нужно понять, не запускает ли часть повторов таймер внутри другого объекта и не зависит ли соседний сценарий от текущего порядка вызовов. В итоге сам код меняется быстро, но день уходит на восстановление картины вокруг него.
Смотреть нужно на изменение, а не на файл
У кода есть свойства, которые легко заметить сразу: понятные имена, небольшие методы, аккуратное форматирование и простая структура. Все это полезно, но само по себе еще не говорит, насколько удобно систему менять.
Можно открыть класс и довольно быстро разобраться в каждом его методе. А потом выяснить, что для добавления одного состояния нужно исправить еще четыре модуля, обновить несколько почти одинаковых преобразований данных и соблюсти порядок вызовов, который нигде явно не зафиксирован.
Файл может выглядеть вполне нормально, а изменение при этом оказывается дорогим.
Мне в этом контексте близко описание сложности изменений у Джона Оустерхаута. Он выделяет три характерных проявления.
Маленькая правка расползается по системе
Добавили поле в модель и приходится менять сетевой слой, хранилище, аналитику, несколько экранов и тестовые данные.
Иногда это естественная цена изменения контракта, а иногда — признак того, что одно знание размазано по проекту.
Для локальной работы нужно слишком много контекста
Чтобы поправить один обработчик, нужно знать устройство навигации, жизненный цикл экрана, особенности кэша и два исторических обхода старых ошибок.
Есть зависимости, о которых разработчик даже не знает
Они обнаруживаются уже после изменения. Например, перестановка двух вызовов отключает сетевую проверку: первый метод использует закэшированное состояние и завершает сценарий раньше времени.
Эти признаки полезнее многих разговоров о «чистом коде»: о длине метода можно спорить, а вот с последствиями изменения — сложнее.
Обычно я смотрю на три вещи
Сколько мест потребуется затронуть?
Сколько информации нужно восстановить перед работой?
Как быстро мы узнаем, что ошиблись?
Чем меньше ответ зависит от памяти конкретного человека, тем спокойнее живется проекту.
Всем привет! Меня зовут Роман, я фронтенд разработчик. Недавно обзавелся участком и столкнулся с большим объемом данных/документов.
Пример проблем:
Выписка ЕГРН, ГПЗУ, данные по скважине/септику/щитку, планы, договора, все данные были разбросаны по телефону: фото, файлы, заметки и т.д.
Какой фильтр стоит на скважине (дата установки, инструкция по обслуживанию, параметры)
Кто и когда ставил ВРУ/трубостойку (контакты)
Решив заняться сортировкой понял: заметки/папки в телефоне это неудобно, а приложения, которое бы точечно решало проблему - не нашел. Поэтому решил создать свое.
Критерии приложения:
для мобильных устройств
не требует подключения к интернету
закрывает все разделы по хранению данных касательно дома/участка.
Критерии по разработке - простота и скорость, отсюда следующее:
Стек - ts, zustand, expo.
Архитектура - feature first.
БД - sqlite + drizzle (indexedDB для web)
Бэк не делаю, все данные храню локально.
Релиз
После создания MVP и всех своих «хотелок» решаю открыть приложение для всех. Для этого добавляю аналитику Aptabase, формы обратной связи, создаю фотокарточки тут (много шаблонов, бесплатно 1 или 3 экспорта в месяц), придумываю название/лого. Иду публиковать в Google Play и App Store и сталкиваюсь с ограничениями, которые сильно усложняют публикацию при регистрации в Крыму. Расстраиваюсь. Изучаю проблему и ищу обходные пути. Понимаю, что безопаснее и проще будет перейти на PWA. После рефактора под PWA, публикую web версию, публикую Android версию в RuStore, а для iPhone..., инструкцию по созданию ярлыка.
Бизнес-план
Рассматривал два варианта монетизации: подписка на облачное хранение и платное расширение функциональности. Оба варианта требуют бэк, платежной инфраструктуры и подтвержденного спроса, поэтому пока это отложил.
Вложений в рекламу нет и не планирую поскольку изначально целью создания приложения было решение моей проблемы, с чем пока отлично справляется.
Состояние приложения на данный момент
На текущем этапе закрывает мой основной сценарий: хранение данных, напоминания и контакты подрядчиков. Дальше интересно будет понять, какие сценарии окажутся важны другим пользователям. Если будут предложения - пишите в комментарии, с удовольствием прочитаю. Делал для себя, но оно должно отлично подойти всем владельцам домов, участков, дач.
Для себя итоги такие: приложение полностью решает мои проблемы и полностью устраивает, а если решит похожие проблемы другим людям - вообще замечательно.
Wildberries выпустила собственный мессенджер WB Chat
У Wildberries появился собственный мессенджер WB Chat. Приложение уже доступно пользователям на Android и iOS, а авторизация проходит через WB ID.
Интерфейс построен по знакомой схеме: диалоги разделены на чаты, группы и каналы, причём создать собственную группу или канал можно непосредственно из приложения. Есть отдельный раздел профиля с аватаром, именем, статусом и возможностью выбрать юзернейм, а для организации переписок предусмотрены папки.
Набор функций тоже постепенно расширяется. Сейчас WB Chat позволяет:
отправлять сообщения, фото, видео и файлы;
пересылать сообщения и отвечать на них;
использовать реакции, эмодзи и стикеры;
создавать публичные и приватные группы и каналы;
закреплять важные сообщения;
искать людей, чаты и сообщения;
совершать аудиозвонки;
расшифровывать голосовые сообщения в текст.
Последняя функция особенно интересна для повседневного использования: рядом с кнопкой воспроизведения голосового сообщения появляется возможность получить его текстовую расшифровку. То есть длинное голосовое необязательно прослушивать целиком.
При этом проект пока активно развивается. Например, в последних версиях разработчики отдельно сообщают об исправлениях синхронизации, работе контактов, медиафайлов, звонков и повышении стабильности приложения.
В Google Play приложение опубликовано компанией WB FZE, зарегистрированной в Hamriyah Free Zone в эмирате Шарджа, ОАЭ. На момент проверки там указано 1 тыс.+ скачиваний.
Есть и отдельный момент, на который стоит обратить внимание перед регистрацией: в информации Google Play разработчик указывает, что приложение может собирать фотографии и видео, файлы и документы, а также передавать некоторые категории данных третьим сторонам. При этом передача данных заявлена как шифруемая.
Пока это выглядит скорее как новый игрок на рынке мессенджеров, чем полностью сформировавшаяся альтернатива привычным сервисам. Но наличие чатов, групп, каналов, звонков, поиска, папок и расшифровки голосовых показывает, что Wildberries постепенно собирает полноценную коммуникационную платформу.
Claude и Codex научились проходить модерацию App Store вместо разработчиков — инструмент greenlight сам находит причины будущего отказа и тут же их исправляет. Htitybt проверяет приложение по требованиям Apple, автоматически устраняет найденные ошибки и повторяет проверки до тех пор, пока шанс получить отказ не станет минимальным.
Попирание свободы выбора Apple и в случае с Макс это другое?
Эту новость вероятно видели многие, после блокировки нескольких приложений в Аpp Store последовал комментарий от многих чиновников, в том числе и такой:
«Apple диктует россиянам, какими приложениями пользоваться, что читать и что писать. Цель — тотальный контроль над нашими вкусами, мыслями и действиями», — заявила уполномоченный по правам человека Яна Лантратова в своём Telegram-канале.
И в этой новости прекрасно буквально все:
Почему в ТГ? Его же заблокировали официально? Или замедлили? Или запретили пользоваться? Или признали недружественным мессенджером? Или посоветовали им не пользоваться? Тут я не разобрался до конца.
И второй момент - где то я это уже видел. Пару месяцев назад буквально, но тогда это называлось - забота о безопасности граждан.
Что думаете? Это другое получается? Или госпожа депутат не разобравшись в вопросе, не справилась с эмоциями и выдала этот шедевр не подумав? Или просто проведению параллелей не учат на курсах депутатского мастерства?
Новая настройка появилась в модели — значит, нужно добавить соответствующий UI‑компонент, настроить обработчики, связать все с системой хранения и не забыть ничего по пути.
Пока настроек немного, это не вызывает проблем. Но со временем поддержка такого экрана начинает занимать все больше времени.
Илья, iOS‑разработчик в Naumen, рассказывает, как пришел к подходу, при котором разработчику достаточно описать новое свойство, а интерфейс собирается автоматически.
Почему задача оказалась сложнее?
Все началось с настройки сжатия изображений перед отправкой на сервер. На первый взгляд задача выглядела вполне стандартной: подобрать параметры, проверить результат и убедиться, что все работает как нужно.
Но довольно быстро возник другой вопрос: как проверять изменения без постоянной пересборки приложения?
Для разработчика это не так критично, а вот для аналитиков на приемке и тестировщиков каждая новая проверка требовала участия разработчика. Тогда появилась идея вынести параметры в отдельный экран настроек.
Почему обычный экран настроек не решил проблему?
Сначала мы решили добавить переключатели, поля ввода и другие элементы интерфейса. Но появилась новая сложность: поддерживать такой экран вручную неудобно.
Чтобы добавить новую настройку, нужно было каждый раз:
добавлять свойство;
добавлять соответствующий UI‑компонент;
настраивать обработку;
связывать с хранилищем данных.
Я начал искать подход, при котором разработчику не нужно отдельно поддерживать интерфейс настроек. Хотелось, чтобы достаточно было просто описать новую настройку, а все остальное система делала сама.
В этот момент я вспомнил про Reflection. В Swift этот механизм ограничен и фактически работает как интроспекция, но даже этих возможностей оказалось достаточно для решения задачи.
Как сделать так, чтобы экран собирался автоматически?
В основе подхода лежит декларативный принцип: разработчик описывает свойства объекта настроек и добавляет к ним метаданные, например, название настройки или связи с другими параметрами.
Дальше система анализирует структуру объекта, определяет типы данных и автоматически подбирает нужные UI‑компоненты:
для булевых значений — переключатели;
для текста — поля ввода;
для чисел — поля с ограничением на числовой ввод.
Что изменилось после внедрения такого подхода?
Теперь для добавления новой настройки достаточно описать новое свойство и добавить необходимые метаданные. После этого настройка автоматически появляется в интерфейсе.
По моей оценке, трудозатраты на работу с настройками сократились примерно на 80–90%. Кроме того, уменьшилось количество дублирующего кода, а интерфейс стал более единообразным и предсказуемым для пользователей.
У меня айфон с маленьким экраном. Предпочитаю компактные модели, чтобы умещались в любом кармане. Это доставляет и некоторые неудобства. Например, часть приложений плохо работают, элементы интерфейса перекрывают друг друга, и из-за этого некоторые функции становятся недоступны. Иногда с такой проблемой я сталкивался в приложении Яндекс.Такси.
В связи с тем, что с продукцией Apple в России в последнее время ситуация постоянно ухудшается, планирую перейти на Android. Нашел подходящую модель на Яндекс.Маркете смартфон Conquest F3 Plus. Одна проблема — в этой модели экран еще меньше, чем у меня сейчас. Значит, есть риск, что приложения, которые глючили на старом смартфоне, вообще не смогут работать на новом.
С данным вопросом я обратился в поддержку Яндекса. Я был уверен, что получу точный ответ, будет работать приложение Яндекс.Go на интересующем меня устройстве или не будет. Ведь что может быть проще? Любой разработчик может, даже если не знает точно, в эмуляторе задать указанное разрешение экрана и прогнать тесты.
Ответом поддержки я был, мягко говоря, ошарашен. Ниже привожу текст нашего диалога со скринами.
Здравствуйте! Будет ли работать ваше приложение на вот такой модели смартфона? https://market.yandex.ru/cc/9aPY2a Разрешение экрана 540x1200.
Данную информацию вы можете уточнить в магазине приложений, из которого вы хотите скачать наше приложение
Я хочу купить новый смартфон, но мне нужно знать, будут ли работать нужные приложения. Ваше приложение очень плохо работает на экране с разрешением 1344x750. Хоть и работает. Какое разрешение поддерживает yandex.go? Будет ли оно работать на экране 540x200?
Данную информацию уточнить не получится, подсказать смогут в магазине приложений
Что значит, не получится? Напишите разработчикам, и они вам скажут.
Пожалуйста, обратитесь в магазин приложений для уточнения минимальных системных требований для корректной работы приложения
Какой магазин?
Магазин приложений вашего устройства
Итак, поддержка Яндекс.Go не смогла ответить на вопрос о системных требованиях собственного приложения. Неожиданно. У меня нет ни малейших идей, как такое стало возможно.
В связи с этим я решил обратиться за помощью к товарищам по отрасли. Может, кто-нибудь из читателей Хабра пробовал ставить Яндекс.Go на Android 12 с разрешением экрана 540x1200. Нормально работает?
Вы попали в следующую ситуацию: граница, проверка, оператор просит разблокировать телефон. Отказаться нельзя или невыгодно. Что можно?
Стандартные ответы у мессенджеров слабые. Обычный app-lock PIN открывает то же приложение, под принуждением бесполезен. «Удалить аккаунт по PIN» лучше, но видно что что-то стёрто. Облачные TTL текущий запрос не закрывают.
В RCQ сделали по-другому. Локальная история шифруется AES-256-GCM, ключ выводится из PIN’а через PBKDF2-HMAC-SHA256 на 400к раундов с per-install salt в keychain. Разные PIN’ы открывают разные хранилища.
400к раундов это около секунды CPU на iPhone, достаточно медленно чтобы offline-bruteforce был дорогой. Но реальная защита это длина PIN’а: 4-значный перебирается за десятки минут на M-чипе, 8-значный за месяцы. Default 6-8 символов.
Четыре режима
Real PIN - открывает реальный аккаунт.
Decoy PIN - открывает отдельный аккаунт с собственным UIN и SQLite. Не пустой экран (пустой это сигнал), а правдоподобно освоенный: пара контактов, несколько сообщений.
Wipe PIN - тихо стирает оба SQLite, чистит keychain, дёргает DELETE /auth/account. Без подтверждений и прогресс-баров. Через 3 секунды приложение перезапускается как свежеустановленное.
Biometric - опциональная вторая дверь к real. Не совмещается с decoy/wipe (скорее для удобства).
Честно про границы
Защищает от: казуального осмотра, принуждённой разблокировки, ситуации «5 секунд до того как заберут».
Не защищает от: forensic-лаб с offline-bruteforce’ом короткого PIN’а, jailbroken устройства с активным debugger’ом, человека рядом который видел как вы вводите PIN (разумеется).
Threat model правильный: «есть несколько секунд до того как кто-то откроет приложение, дальше я не контролирую устройство». Для «forensic с неограниченным временем» нужны другие инструменты. Главное из них: не пользоваться телефоном для чувствительных переписок вообще.
Стек живёт в RCQ, открытая бета на iOS. Код открытый: github.com/rcq-messenger/rcq-ios. Про маскировку самого факта установки приложения будет отдельно.
Если вы сидите на MacOS / iOS и у вас VPN на VLESS+XTLS‑Reality, то при очередном обновлении системы/VPN-клиента с высокой вероятностью всё сломается или уже сломалось. Это не баг Shadowrocket и не баг xray-core. Apple ввела квантово-безопасное шифрование TLS 1.3 по умолчанию в iOS 26 / macOS 26, которое увеличивает размер TLS ClientHello на ~1216 байт. REALITY-сервер xray-core не может корректно прочитать такое большое сообщение — отсюда firstLen = 0 и отсутствие соединения. Windows это не затронуто. Простого/универсального решения нет, т.к. откат на предыдущую версию в экосистеме Apple — тот ещё квест. Если ваше клиентское приложение VPN позволяет настроить TLS → Fingerprint, тогда там необходимо выбрать firefox или Crome110 — для которых ещё не было поддержки X25519MLKEM768. В этом случае всё легко чинится.
Старый код усложняет рефакторинг, тесты в команде запускаются по‑разному, баги не воспроизводятся на хорошем Wi‑Fi, а после обновления инструментов локальная сборка начинает расходиться с CI — по отдельности все это мелочи, но именно они постепенно начинают тормозить разработку.
Ринат, iOS‑разработчик Naumen, рассказал об инструментах, которые помогают ему решать такие задачи и упрощать повседневную работу.
Periphery: поиск мертвого кода в Swift‑проектах
Со временем в любом проекте появляется код, который уже не используется: старые методы и фичи, забытые extensions и helpers. Все это усложняет навигацию и мешает быстро понять архитектуру проекта.
Periphery помогает находить такие места и наводить порядок перед изменениями в кодовой базе.
Как использую
Запускаю Periphery перед рефакторингом — например, когда нужно обновить модуль профиля с сотнями файлов.
periphery scan
После сканирования инструмент показывает классы, методы, свойства, enum cases, imports и другие элементы. Так проще понять, что действительно участвует в работе приложения.
Что важно знать: результаты всегда нужно проверять вручную. Инструмент может не учитывать динамические вызовы, reflection, Objective-C runtime, storyboard-ссылки или код, который используется через строки.
Network Link Conditioner: тестирование слабой сети
Во время разработки приложение чаще всего тестируется в почти идеальных условиях. Но у пользователей все может работать иначе.
Network Link Conditioner — инструмент от Apple, который помогает эмулировать разные сетевые условия. Например, индикатор загрузки крутится бесконечно, повторная попытка не срабатывает, время ожидания слишком короткое, а пользователь не получает понятного сообщения об ошибке.
Как использую
Обычно проверяю сценарии авторизации, оплаты, загрузки медиа и офлайн‑режимы. Для этого включаю профиль вроде плохого 3G, высокой задержки или потери пакетов и смотрю, как приложение ведет себя в нестабильной сети.
Что важно знать: проверять стоит не только низкую скорость интернета, но и нестабильность сети. А еще важно не забывать выключать Conditioner после проверки :)
just: короткие команды вместо длинных инструкций
В iOS‑проектах быстро накапливаются команды, которые приходится запускать постоянно: тесты, форматирование, генерация ресурсов. Со временем это превращается либо в огромный онбординг‑документ, либо в постоянный поиск нужной команды в документации.
just собирает основные сценарии работы в одном месте и запускает их через короткие понятные команды. В итоге justfile становится чем‑то вроде живой документации проекта.
Как использую
Чтобы каждый раз не вспоминать синтаксис, храню основные сценарии работы в justfile.
После этого вместо длинных команд достаточно написать:
just test
just format
just clean
Что важно знать: just не заменяет CI, Makefile или build system. Это скорее удобный слой для повседневных команд. Поэтому лучше держать justfile простым и не превращать его в большой набор скриптов.
Mint: фиксация версий CLI-инструментов на Swift
Когда у разработчиков разные версии линтеров, форматтеров и других CLI‑инструментов, могут появиться расхождения. Mint помогает зафиксировать набор инструментов внутри проекта и сделать локальный запуск ближе к CI, чтобы у всей команды был одинаковый результат.
Как использую
Вместо глобальной установки SwiftLint, SwiftFormat, XcodeGen или других CLI‑инструментов можно хранить версии в Mintfile и запускать их одинаково у всех разработчиков.
mint run realm/SwiftLint
mint run nicklockwood/SwiftFormat
Что важно знать: Mint полезен именно для Swift CLI-пакетов. Для Ruby-gems, Node.js-инструментов или системных утилит понадобятся другие менеджеры. Также важно кэшировать установленные бинарные файлы в CI, иначе сборки могут тратить лишнее время на установку инструментов.
Исследователи обнаружили уязвимость, позволяющую украсть деньги с заблокированного iPhone через NFC, если на устройстве активирован режим экспресс-транспорт и привязана карта Visa. В эксперименте со смартфона блогера Маркуса Браунли списали $10 тыс., обманув систему оплаты проезда. Apple и Visa заявили, что массовое мошенничество маловероятно, однако пользователям советуют отключить использование Visa для транспортных платежей на iPhone.
Save the date: встречаемся 22 апреля на iOS Meetup Wildberries & Russ
22 апреля в 19:00 мск приглашаем на iOS-митап. В программе три технических доклада и нетворкинг с инженерами, которые ежедневно строят мобильную разработку в Wildberries & Russ. Поговорим про автоматизацию релизного процесса, масштабируемое UI-тестирование и тонкости работы с файловой системой iOS.
— Автоматизация релизов в Wildberries | Севастьян Жуков, Deploy Lab Team Lead
Как команда с нуля создала инструмент для управления релизным процессом мобильного приложения и масштабировала его на другие продукты компании. Разберём этапы автоматизации и работу с App Store API: управление релизами и отслеживание их статуса.
— UI-тестирование приложения Wildberries | Руслан Колчаков, iOS TestLab Lead и Валерий Карачаков, iOS TestLab Dev
Руслан расскажет про вызовы при организации тестирования, инфраструктуру и метрики здоровья TestLab. Валерий дополнит докладом про распределённое UI-тестирование на динамически формируемом кластере раннеров: как избежать простоев, эффективно утилизировать ресурсы и ускорить тестирование.
— Работа с файловой системой на iOS | Александр Игнатьев, iOS-разработчик команды Асто
Разберём нюансы работы с файлами, структуру iOS Sandbox и App Group как способ выйти за её пределы.
⏹️Формат: офлайн в Москве + онлайн-трансляция Регистрация
Раньше при подключении CarPlay пользователи видели в приложении 2ГИС на телефоне «заглушку» — почти пустой экран. И наш iOS‑разработчик Ваня задумался: «Почему бы не добавить полезности?»
Идея родилась на внутреннем хакатоне. Он решил не переносить интерфейс целиком, а разделить роли между устройствами. Телефон — для действий. CarPlay — для результата.
Собрал прототип, а затем команда подхватила инициативу. И это одна из самых быстрых задач, которая дошла до релиза.
Все действия выполняются на телефоне и сразу отображаются на экране в машине. Без переходов, без ожидания и без разрыва между устройствами
Это интересно, потому что:
новый сценарий для автомобилистов: теперь можно взаимодействовать с приложением на телефоне, пока навигация идёт в CarPlay;
красивый обход архитектурного ограничения;
инженерная инициатива, которая с хакатона дошла до прода.
Операторы начали предупреждать россиян о вероятном отключении оплаты Apple со счёта телефона. Например, один из операторов, ссылаясь на «сообщения ряда СМИ», предлагает пополнить баланс Apple ID на год.
Минцифры РФ обсуждает возможность временно отключить оплату сервисов Apple со счета мобильного телефона, чтобы вынудить компанию вернуть популярные российские приложения в App Store. По данным СМИ, С 1 апреля 2026 года владельцы iPhone не смогут пополнять баланс Apple ID с мобильного счета.
Возможность оплаты подписок и покупок в экосистеме Apple напрямую с мобильного счёта на данный момент доступна у МТС и «Билайна». У «Т2 Мобайл» и «МегаФона» такая оплата есть через партнёров.
У российских пользователей остаётся ещё один обходной путь: цифровые коды пополнения. Физические подарочные карты исчезли из продажи еще в марте 2022 года, хотя раньше их можно было купить у крупных ретейлеров и через банковские приложения. Сейчас на маркетплейсах и у посредников продаются цифровые ваучеры, но за удобство приходится платить комиссией на уровне 15-20%. Есть и техническое ограничение: код должен быть выпущен именно для российского региона, иначе Apple ID просто не примет пополнение.
Минцифры РФ обсуждает возможность временно отключить оплату сервисов Apple со счета мобильного телефона, чтобы вынудить компанию вернуть популярные российские приложения в App Store. По данным СМИ, С 1 апреля 2026 года владельцы iPhone не смогут пополнять баланс Apple ID с мобильного счета.
Возможность оплаты подписок и покупок в экосистеме Apple напрямую с мобильного счёта на данный момент доступна у МТС и «Билайна». У «Т2 Мобайл» и «МегаФона» такая оплата есть через партнёров.
У российских пользователей остаётся ещё один обходной путь: цифровые коды пополнения. Физические подарочные карты исчезли из продажи еще в марте 2022 года, хотя раньше их можно было купить у крупных ретейлеров и через банковские приложения. Сейчас на маркетплейсах и у посредников продаются цифровые ваучеры, но за удобство приходится платить комиссией на уровне 15-20%. Есть и техническое ограничение: код должен быть выпущен именно для российского региона, иначе Apple ID просто не примет пополнение.
Операторы связи могут списывать деньги за активацию iMessage по несколько раз за сутки из-за отключения мобильной связи.
Эта тема не новая, но когда в Москве отключили связь, деньги начали списывать на регулярной основе.
Списание денег за СМС связано автоматической активацией сервисов Apple — iMessage или FaceTime. Для их работы айфон отправляет невидимое техническое СМС. Увидеть его нельзя, но оно оплачивается как международное СМС.
Обычно это происходит, когда вы перезагружаете телефон или переставляйте симку. Сейчас из‑за шатдауна телефон постоянно «переподключается», поэтому деньги списываются по несколько раз.
Как исправить. Зайти в «Настройки» → «Сообщения» и выключите переключатель «iMessage» Дополнительно можно отключить FaceTime в том же разделе настроек.
Разработчик на iOS получает по $5 млн каждый месяц на 24 ИИ‑приложениях в App Store. В реальности это одно приложение в разных обёртках: распознавание камней, монет, древесины и даже звёзд. Фотографии пользователей по API передаются на серверы OpenAI, после чего ChatGPT идентифицирует предмет.
Превращаем обои на iPhone в стильный календарь — он показывает текущую дату на и каждую ночь обновляется. При этом не нужны сторонние приложения — хватит встроенного приложения «Команды».
Открываем сайт проекта и выбираем модель iPhone, стиль оформления, цветовую схему и часовой пояс;
Копируем ссылку, которую сгенерирует сайт;
Заходим в приложение «Команды», открываем вкладку «Автоматизация» внизу и жмём на знак «+»;
Создаём новую автоматизацию по времени суток: выставляем 00:01, выбираем «Немедленный запуск» и отключаем уведомления;
Добавляем действие «Получить содержимое URL» и вставляем туда скопированную ссылку с сайта;
Делаем второе действие «Установить фото как обои», выбираем только «Экран блокировки» (снимите галочку с домашнего экрана);
Разворачиваем настройки действия и отключаем «Показать окно просмотра»;
Нажмите «Play» внизу справа, чтобы проверить команду — обои должны смениться мгновенно.
Бонусом внизу будет отображаться прогресс года, чтобы вам удобнее было переживать из-за того, что до Нового года осталось 348 дней.
$500 тысяч долларов в месяц заработал разработчик будильника для iPhone. Разработчик выпустил приложение, где просто сделал сигнал в несколько раз громче стандартного решения от Apple. Приложение стало популярным в App Store.
В Telegram заработала система входа в аккаунт через Passkey, но только для российских номеров телефона. Ключевое преимущество Passkeys — возможность войти в аккаунт в одно касание, не вводя номер телефона и одноразовый код.
Как создать ключ:
Убедитесь, что у вас последняя версия мессенджера (Android — 12.2.10; iOS — 12.2.3).
Как и вход по почте, новую функцию нужно предварительно настроить. Для этого откройте Настройки › Конфиденциальность › Ключи доступа.
Если пункт «Ключи доступа» отсутствует, то эта опция недоступна для вашего аккаунта. На текущий момент Passkeys доступны только для аккаунтов, к которым привязан российский номер.
Нажмите «Добавить ключ доступа» и подтвердите его создание.
Устройство может запросить код экрана блокировки или биометрию, чтобы разблокировать хранилище ключей.
Созданный ключ появится в списке.
Как войти с помощью ключа:
На актуальной версии Telegram для Android или iOS приложение автоматически предложит выбрать ключ доступа для входа.
Если это не происходит, через несколько секунд под заголовком «Номер телефона» появится ссылка «используйте ключ доступа», на которую следует нажать.
Нажатие на кнопку запустит ваш менеджер паролей, который предложит выбрать ключ, проверит вашу личность по лицу, отпечатку пальца либо PIN-коду экрана блокировки, а затем передаст выбранный ключ мессенджеру.
Ключ доступа выполняет функции как номера телефона, так и одноразового кода подтверждения одновременно.
Если вы включили двухфакторную авторизацию для аккаунта, вам потребуется ввести свой облачный пароль, который вы задали самостоятельно.
В Telegram появилась опция авторизации через ключи доступа. Новая функция для Android и iOS под названием Passkey позволит входить в аккаунт без дополнительных подтверждений в виде СМС-кодов и паролей. Активировать ключи доступа можно в разделе «Конфиденциальность». Чтобы подключить функцию, нужно создать ключ и подтвердить личность с помощью сканирования лица (Face ID), отпечатка пальца (Touch ID) или код-пароля. Созданный Passkey будет храниться на устройстве. Функция поможет обойти ограничения при регистрации в мессенджере.
Разработчик Дьюи Чан запустил iPadOS 26 на iPhone 17 Pro Max, включая многооконный режим, плавающую клавиатуру, многозадачность, док и Spotlight. Из-за того что iPadOS не оптимизирована под iPhone, интерфейс выглядит мелко и местами работает с лагами. Окна масштабируются плавно, но текст в них выглядит очень мелко. Запустить iPadOS 26 на iPhone тестировщику удалось благодаря уязвимости в MobileGestalt — это системный компонент iOS, отвечающий за идентификацию устройства. Разработчик смог его взломать и заставил систему думать, что iPhone является iPad. Apple закрыла эту уязвимость в iOS 26.2 beta 2.
В новом выпуске подкаста Mobile Developer об этом рассказывает Данила Горячкин, iOS-инженер в Авито. Даня не понаслышке знаком с потребностью в мире Wi-Fi и развитой мобильной сети создать приложение, которое может работать без интернета, — а потому ему точно есть, чем поделиться.
Подписывайтесь на канал AvitoTech в Telegram, там мы рассказываем больше о профессиональном опыте наших инженеров, проектах и работе в Авито, а также анонсируем митапы и статьи.
What's new in Dub Dub — сайт, на котором собрали все анонсы WWDC с 2015 года. Есть вкладки по разным операционным системам Apple, списки аппаратных обновлений, фреймворков, API, интерфейса, версий Swift, Xcode, SF Symbols и других инструментов для разработчиков. Для фреймворков и API предусмотрели ссылки на страницы в официальной документации.
Пользователи жалуются, что новые иконки Microsoft плохо различимы в «стеклянном» интерфейсе iOS 26. Со временем подключается память, но в первое время не всегда получается быстро найти нужное приложение. Больше всего похожи друг на друга иконки Excel, Word и OneNote. Самое яркая их отличительная черта — цвет, которого в «стеклянном» интерфейсе нет.
Дизайнеры Apple изменили функцию скриншота в новой версии iOS. Они зачем-то поменяли кнопки местами: кнопка удаления теперь находится на месте привычной кнопки сохранения. Из-за этого пользователи с непривычки удаляют снимки экрана сразу после создания.
Год назад мы масштабно обновили приложение для 2ГИС на Apple Watch: начали показывать на часах местоположение близких в рамках функции «Друзья на карте» и поддерживать ведение по пешему маршруту. К очередной презентации Apple решили добавить ещё полезностей.
Теперь часы умеют вести и по маршрутам общественного транспорта — с указанием номеров маршрутов транспорта и полезными подсказками в пути. Мы сами знаем, что это особенно удобно, когда руки заняты или вокруг суета.
Об интересных моментах реализации рассказывает разработчик Иван Гнатюк.
Маленький экран — большие задачи
Сделать маршрут общественного транспорта на часах оказалось не так уж сложно — помогли два момента:
Во-первых, у нас уже было приложение на watchOS 10+, где работало пешее ведение и была настроена коммуникация телефон ← → часы.
Во-вторых, мы раньше делали отображение маршрута транспорта для Live Activity на телефоне, и смогли переиспользовать много вьюшек и бизнес-логики (а она бывает непростой).
Оставалось только собрать из уже имеющихся блоков новое отображение для часов, что мы и сделали довольно быстро. Потом мы подумали, а почему бы не сделать и новое LA для общественного транспорта на часах? Текущее отображение от Dynamic Island с телефона выглядело скучно.
Сложность в том, что мы ограничены размерами часов, причём размеры варьируются 40– 49 мм. Скролл мы здесь добавить не можем, поэтому нужно попытаться уместить весь маршрут со всеми его сегментами на маленьком экранчике, попытавшись сохранить максимум полезной информации (номер маршрута, номер выхода из метро).
На помощь пришел GeometryReader — он даёт ширину контейнера, и, зная количество и тип сегментов, мы рисуем маршрут. Если пересадок на маршруте шесть и больше, то оставляем те, что помещаются, а вместо последнего покажем «....». Но на бою нам не удалось построить такой маршрут. Если вам удастся — расскажите нам!
Разработка на настоящих часах — интересно, но непредсказуемо
Разрабатывать и собирать на настоящих часах всегда интереснее. Но с этим могут быть свои приключения.
Например, часы могут «отваливаться». Xcode к ним не подключается и приходится постоянно проверять настройки часов и подключение к WiFi.
Иногда таргет часов ни в какую не хочет устанавливаться на часы — помогает только их перезагрузка.
А в какой то момент на часах перестал отображаться и новый LA, и простая трансляция DI. Перезагружали и часы, и телефон — ничего не помогало. Оказалось, что в какой то момент телефон обновился, а часы нет. Вот так и сломалось.
Как работает для пользователя
Для того чтобы видеть основные этапы маршрута, нужно построить маршрут на общественном транспорте в приложении на смартфоне и нажать «В путь», а на часах открыть приложение 2ГИС. В пути достаточно посматривать на часы — приложение покажет ключевую информацию с помощью Live Activities: иконки транспорта с цветом ветки метро, номер выхода, время в пути и пересадки, если они предусмотрены. Чтобы просмотреть весь маршрут, достаточно тапнуть на Live Activities и прокрутить Digital Crown.
Всё будет работать на Apple Watch с watchOS 11, iPhone с iOS 18 и в приложении 2ГИС версии 7.11 или новее. На часы отдельно ничего ставить не нужно — всё подтянется из приложения на айфоне.
Кормак Хэйден — владелец Oasis, приложения для iPhone и смартфонов на Android, которое публикует якобы научно обоснованные рейтинги воды и фильтров, опираясь на результаты лабораторных тестов и открытые данные. Плату берут за, как утверждается, доступ к части функций, чтобы финансировать независимые (без рекламы) анализы. На сайте проекта ведётся раздел с рейтингами бутилированной воды и фильтров, поиск по водопроводной воде по городам США, а также возможность заказать домашние тест-наборы для отправки проб в лабораторию.
В личном микроблоге Хэйден опубликовал лаконичный пост. В нём он в три слова и две кавычки пожаловался, что его давно просили сделать приложение для Android, но финансовый результат Кормака разочаровал.
В комментариях Хэйдену указали, что кнопка покупки на Android попросту была сломана. Кормак ответил, что локально на его машине всё работает. На самом деле ситуация ещё более смешная.
Оплата на Android в Oasis действительно сломана, это так. Однако в регионе США всё работает, указывает Хэйден. Это будет относительно легко пофиксить. Забавно именно то, что поправить уже нельзя: база данных данных Oasis крайне похожа на открытую закраудсорсенную базу данных OpenFoodFacts, а схожие же функции даёт бесплатное приложение Yuka. Кстати, Oasis по дизайну UI сильно напоминает Yuka.
Один из комментаторов даже назвал Oasis всего лишь фронтендом OpenFoodFacts. Кормак парировал, что в данных последней тяжёлых металлов и ПФАС нету и что Oasis собирает и публикует лабораторные данные, а Yuka якобы устарела, часто ошибается и не включает лабораторные измерения. Впрочем, в комментариях спросили, не заполняет ли Oasis эти значения случайными числами. Один из микроблогеров заметил, что на двух скриншотах у бренда Fiji стоит разная оценка.
На самом деле часто данные Oasis вводят в заблуждение. В комментариях к твиту нашли ошибки в выставленных предельно допустимых концентрациях: в приложении часто занижены ПДК относительно рекомендуемых властями США, и в реальности представленные количества вредных веществ представлять угрозу не могут. Зато эта дополнительная строгость к чистоте на три–четыре порядка ниже ПДК позволяет резко критиковать разные бренды за наличие в них мышьяка и тяжёлых металлов.
Хэйден резок в суждениях. В ответ на критику он заявил, что стандарты собеседника в отношении еды и здоровья устарели. Остряки на это заметили, что его Oasis допускает грубые грамматические ошибки уже в описании в каталоге приложений.
Наконец, секретом финансового успеха может быть банальный обман пользователей. Один из комментаторов указывает на тестовый период, который может запутать. Триал длится три дня, а затем начинают списывать по $4,99 в неделю. Возможно, что часть пользователей удаляет приложение и просто забывает отключить эту подписку.
Вызывает вопросы сама цена. Есть ли смысл платить по $30 ежегодной подписки за привилегию сравнивать разные бренды бутилированной воды? И вообще, заслуживает ли статуса отдельного приложения то, что может быть страницей в Интернете?
В российских магазинах при покупке iPhone теперь покупателей требуют подписать документ об отказе от претензий, связанных с отсутствием RuStore. В документе говорится, что «товар имеет недостаток: невозможно установить и использовать единый магазин приложений RuStore».
Приобретая данный товар, потребитель уведомлен и согласен с обозначенным недостатком и не вправе предъявлять требования в связи с его наличием на основании ст. 18 РФ закона «О защите прав потребителей».
С 1 сентября 2025 года в России вступили новые правила: все смартфоны и планшеты, продающиеся в стране, должны иметь предустановленный магазин приложений RuStore. На iPhone реализовать подобное невозможно, из‑за чего ритейлеры нашли обходное решение.
Магазины начали отмечать iPhone специальными пометками. У большинства сетей используется маркировка «без RuStore», а некоторые компании добавляют уточнение, что устройство имеет «недостаток». Такая формулировка юридически приравнивает смартфон к «бракованному» и позволяет покупателю вернуть его в течение года.
App Clip в деле: сделали расписание транспорта без установки приложения и лишних мегабайт
В 2ГИС мы любим эксперименты с технологиями. Когда Apple представила App Clips — мини-версии iOS-приложений, — мы начали думать, что ж сделать такое полезное, быстрое и удобное. Появилась идея: а что если показать расписание транспорта прямо на остановке, без установки приложения? Идеально для ситуации, когда нужно получить информацию в моменте.
Пилотный проект начали с Екатеринбурга — на остановках в центре города уже появились QR-коды, по которым можно мгновенно получить расписание автобусов, трамваев и троллейбусов.
Реализация: просто, но есть нюансы
У нас была цель — запустить всё быстро и без лишней сложности. Поэтому мы пошли по самому простому пути. Однако не обошлось без сюпризов: мы столкнулись с интересной особенностью сборки и дистрибуции через App Store.
Когда собирается билд, бинарь App Clip попадает в общий application bundle — вместе с ресурсами, ассетами и иконками. Мы переживали, что это увеличит размер основного приложения для пользователей.
Однако на этапе загрузки в App Store Connect происходит app thinning (slicing) — бинарь анализируется и оптимизируется на стороне App Store. Получается, что из финальной сборки, доступной пользователю, App Clip удаляется. В результате конечный IPA, который скачивает пользователь, не увеличивается в размере, несмотря на то, что в исходном проекте ресурсы App Clip действительно включены в общий bundle.
Чтобы убедиться в этом, мы проверили это на практике:
Собрали билд, в котором бинарь App Clip действительно оказался в общем application bundle.
Загрузили его в App Store Connect.
После релиза скачали IPA напрямую из App Store и проанализировали содержимое.
Результат: в финальном бинаре bundle App Clip отсутствует. Пользователи получают приложение без дополнительного груза, а размер основного приложения не растёт. К слову, в официальной документации Apple этот момент описан довольно туманно, так что мы решили проверить всё на себе.
App Clips считаются не самой популярной фичей, но всё же было интересно покопаться, собрать, выкатить и посмотреть, как это работает в реальности.
Если вы пробовали App Clips — расскажите про свой опыт! Может, нашли нестандартные подходы или столкнулись с подводными камнями, о которых стоит знать другим?
В Cursor буквально сегодня увидел новую опцию. А именно: когда с ним работаешь по проекту и по ходу как-то его поправляешь, то внизу слева выскакивает пимпочка и предлагает занести такие вещи в User Rules.
Очень даже удобно. Не надо самому отдельно все записывать, а потом переносить.
В двух, приложенных к этому посту файлах (здесь и здесь), показан код для решения одной и той же задачи в мобильном приложении. А именно: запустить обратный отсчёт перед началом игры.
В одном файле эта задача реализована в архитектуре BPN (Business Process Notation), о которой рассказывал раньше здесь. А во втором файле тот же код организован по архитектуре MVVM.
Код и в том, и в другом файле написан с помощью Claude Sonnet. В случае с BPN структурировал код вручную, следуя бизнес-процессам. А во втором случае попросил Клода сделать рефакторинг, используя традиционный современный подход и он выбрал MVVM.
Что можно сказать в итоге, сравнивая архитектуру в том, и другом случае.
Объём кода
В BPN варианте 270 строки кода с комментариями, в MVVM - 524.
Т.е., в MVVM случае кода практически в 2 раза больше.
MVVM - вью и модель, анимация и аудио как сервисы, роутер, отдельная структура для хранения значений свойств и т.д.
Что лучше
Как всегда, каждый из подходов имеет свои плюсы и минусы.
В BPN нравится, что можно видеть модель процесса, в данном случае модель одной из задач приложения.
Что такое “Модель”
Наиболее традиционны 2 понимания термина “модель”.
В одном случае, это структура данных, модель объекта.
Например:
struct Person {
let firstName: String
let lastName: String
var age: Int
}
В другом случае, под моделью понимается всё, что не относится к интерфейсу.
Но есть и третье понимание модели - это модель приложения, или модель отдельных процессов внутри приложения. Т.е., составные части приложения (процесса) и их последовательность.
В BPN файле такая модель проступает наглядно:
Модель процесса "Обратный отсчет"
Здесь Обратный отсчёт складывается из таких блоков как подготовка, собственно выполнение, анимация, звук и закрытие экрана. Внутри каждого этапа видны его составляющие - методы и необходимые свойства.
В файале MVVM блоков кода гораздо больше и нужно несколько раз проскоролить чтобы увидеть их в выпадающем меню. И увидеть целостную модель здесь сложнее.
Conclusion
На относительно небольших проектах архитектура MVVM может быть избыточна. Здесь могут использоваться более простые варианты.
BPN позволяет видеть целостную модель задачи (процесса, приложения).