Кроссплатформенная разработка
iOS-приложение с витрины Flutter может вообще не использовать фреймворк
Итак, приложение Realtor имеет зависимость Flutter, но ни один из экранов основного приложения не использует его. Что бы это могло значить?
Я читал еще одну статью, восхваляющую Flutter, в которой обсуждалось приложение, предположительно написанное в этой среде. По словам автора статьи, приложение неотличимо от нативного, сделанного для iOS с использованием предоставленных Apple элементов управления от UIKit. Мне было трудно поверить, потому что каждое приложение Flutter, которое я использовал, имело серьезные проблемы с пользовательским интерфейсом или UX по сравнению с большинством нативных приложений. Поэтому я решил изучить этот вопрос.
Приложение на самом деле выглядит как настоящее нативное приложение (в основном), но оказалось, что это не заслуга Flutter, потому что приложение вообще не использует его.
Приложение
Рассматриваемое приложение — Realtor.com. Несложно догадаться, что оно используется для поиска квартир. Но самое главное, это первое приложение, которое вы видите, когда открываете страницу сайта Flutter, демонстрирующую сделанные на фреймворке приложения. Оно же должно быть написано на Flutter, верно? Я не знаю о его Android-версии да и не хочу знать, поэтому давайте просто взглянем на версию для iOS.
Методы проверки
Мой основной iPhone с джейлбрейком, поэтому у меня есть 2 надежных способа проверить, как написано любое приложение для iOS и какие фреймворки оно использует: просмотр иерархии View и проверка бандла.
Иерархия View
Основной характеристикой любого приложения Flutter является то, что они не используют встроенные контролы ОС, если вы сами не включите их. Flutter рисует все самостоятельно и просто имитирует родные элементы управления ОС. Например, на изображении ниже вы можете увидеть иерархию представлений 2 приложений.
Слева нативное, оно использует много стандартных элементов управления iOS (те, которые имеют префикс «UI») и некоторые пользовательские. Но самое главное здесь то, что вы можете видеть всю иерархию.
С другой стороны иерархия приложения Flutter — она более плоская. Есть несколько встроенных элементов управления, которые требуются для любых приложений iOS, а также есть веб-представление в виде бриджа в ОС. Весь пользовательский интерфейс приложения содержится внутри FlutterViewController, и вы вообще не видите, что внутри него, потому что это всего лишь холст для рисования.
Bundle
Пакет приложений — это просто папка с исполняемым файлом и кучей вещей, которые нужны приложению, такие как подпись кода, ресурсы, файл описания и, самое главное, это зависимости. Простой способ проверить, использует ли приложение Flutter, — просто проверить, есть ли у него Flutter в качестве зависимости — вот и все.
Давайте проверим
Давайте начнем нашу проверку с иерархии представлений. Realtor имеет 5 вкладок, и, как вы можете видеть ниже, иерархия каждой вкладки выглядит точно так же, как иерархия нативного приложения. Более того, ни на одной из вкладок внутри нет FlutterViewController.
Я просмотрел вкладки, проверил некоторые экраны внутри, и не нашел ни одного экрана, который был сделан с использованием Flutter или, по крайней мере, имел экземпляр FlutterViewController.
Значит, нет Flutter вообще? У меня возник тот же вопрос, и я решил проверить, есть ли у Realtor хотя бы зависимость.
Оказывается, есть. Но у него также есть несколько других зависимостей, таких как SnapKit, который используется для упрощения верстки в iOS-приложениях. Но, что более важно, в нем много файлов .storyboardc и .nib, которые представляют собой скомпилированные версии файлов Xcode Interface Builder (.storyboard, .xib). И вы можете догадаться, что нельзя использовать Interface Builder для создания экранов Flutter.
Вывод
Итак, приложение Realtor имеет зависимость Flutter, но ни один из экранов основного приложения не использует его. Что бы это могло значить? Я вижу несколько вариантов:
- Приложение использует Flutter, но только для нескольких экранов, которые могут быть не так важны.
- Приложение на самом деле вообще не использует Flutter.
- В прошлом приложение часто использовало Flutter, но решило отказаться от него.
- Только версия для Android использует Flutter (зачем вы это делаете?)
Во всех случаях возникает вопрос: справедливо ли ставить это приложение на первую позицию рекламной витрины или на какую-либо позицию вообще? Потому что во всех вышеперечисленных случаях утверждение «приложение Realtor написано на Flutter» не является абсолютной истиной. В некоторых случаях это просто не правда.
Как насчет честного маркетинга, Google?
ОБНОВЛЕНИЕ: Оказывается, Realtor на самом деле использует Flutter, но все экраны Flutter используются в A/B-тестах, что возвращает меня к первому выводу. У многих людей может сложиться впечатление, что всё приложение на самом деле написано на Flutter, и это может привести к ложным выводам или ложным ожиданиям относительно опыта, который предоставляет платформа конечному пользователю. Я считаю, что это неправильный способ продвижения кроссплатформенного фреймворка.