Обсудить проект

Опыт разработки мобильного приложения «SW-Mobile» на платформе Embarcadero RAD Studio

1. Содержание

  1. Содержание
  2. Введение
  3. Реализованный проект
    3.1. Приложение SW-Mobile
    3.2. Инструменты разработки
    3.3. Архитектура приложения
  4. Достоинства среды разработки
    4.1. Единая кодовая база
    4.2. Стили компонентов
    4.3. Логические координаты
    4.4. Расположение компонентов на различных устройствах
    4.5. Отладка в Windows
  5. Недостатки среды разработки
    5.1. Некорректное отображение графических примитивов для Android и iOS
    5.2. Ограничения при определении жестов
    5.3. Эмулятор
  6. Рекомендации по разработке приложений в среде Embarcadero RAD Studio
    6.1. Подготовка к разработке под Android
    6.2. Подготовка к разработке под iOS
    6.3. Разделение кода на платформо-независимый и платформенно-зависимый
    6.4. Использование Deployment Manager
  7. Ссылки

2. Введение

В статье анализируется опыт разработки мобильного приложения на платформе Embarcadero RAD Studio 10.3.2: оцениваются достоинства и недостатки платформы, даются рекомендации по разработке. Авторы надеются, что эта информация окажется полезной для специалистов, выбирающих платформу для разработки или уже решивших использовать Embarcadero RAD Studio.

3.    Реализованный проект

3.1. Приложение SW-Mobile

Приложение SW-Mobile (название изменено) предназначено для создания и редактирования моделей профилей из листового металла – элементов строительных конструкций. Работает на мобильных устройствах под управлением ОС Android и iOS.

Приложение позволяет редактировать геометрические данные профиля, используя набор линий, дуг и кромок. Профили могут создаваться как «с нуля», так и на основе существующих шаблонов. Набор профилей объединяется в проекты. Проекты, как и профили имеют свои наборы атрибутов, таких как «Название», «Адрес доставки» и т.д. (для проектов), «Наименование», «Материал», «Длина» и т.д. (для профилей).

Приложение позволяет осуществлять двустороннюю связь с «облаком». Проекты, разработанные на мобильном устройстве, передаются на сервер для последующего использования. Шаблоны профилей, разработанные с помощью другого ПО, загружаются в мобильное устройство. Пользователи имеют свои собственные учетные записи на серверах и могут авторизоваться в приложении для загрузки / выгрузки файлов в / из облачного хранилища.

3.2.   Инструменты разработки

Использовалась интегрированная кроссплатформенная среда разработки Embarcadero RAD Studio 10.3.2, позволяющая создавать приложения для ОС Windows, OS X, Apple iOS и Android, используя единую кодовую базу на языках Delphi или C++. Для проекта был выбран язык Delphi (Object Pascal). Компиляторы Delphi на основе LLVM позволяют получать «нативный» код для каждой ОС.

Пользовательский интерфейс приложения разрабатывался с помощью библиотеки FMX, входящей в состав RAD Studio.

Также, для связи RAD Studio c мобильными устройствами Apple iOS (для тестирования использовались iPhone 7 и iPad mini), применялась интегрированная среда разработки Xcode, установленная на MacBook Air. Там же был установлен PAServer (Platform Assistant Server Application) для удаленной отладки приложения на устройствах Apple.

3.3.   Архитектура приложения

Архитектура приложения построена на основе шаблона проектирования Model-View-Presenter (MVP). Данный подход является классическим для мобильных приложений и позволяет отделить логику программы от пользовательского интерфейса. Это особенно важно для кроссплатформенной разработки, где отображение интерфейса для каждой платформы может иметь свои нюансы.

Все данные приложения хранятся в файловой системе мобильного устройства в виде XML файлов. Настройки приложения хранятся в ini-файле.

4.    Достоинства среды разработки

4.1.   Единая кодовая база

Как уже упоминалось, в RAD Studio, как и в любой кроссплатформенной среде разработки, используется один и тот же исходный код для разных целевых платформ. Это, несомненно, является одним из основных достоинств среды. Хотя, как мы покажем далее, платформо-зависимого кода в большинстве проектов не избежать, его доля невелика. Так, в проекте SW-Mobile доля платформо-независимого кода составляет менее 3%.

4.2.   Стили компонентов

Библиотека FMX позволяет для каждого элемента управления и для каждого типа элемента управления создавать свой стиль. Стиль FMX — это контейнер, содержащий набор объектов, которые могут быть скрыты от разработчика и определяют внешний вид и поведение компонента. Применение стилей позволяет не создавать новые элементы управления на основе имеющихся, а просто выбирать для каждого элемента свой стиль. Например, у нас есть на форме две группы кнопок, имеющих разный внешний вид (размер, цвет и т.п.) и различное поведение при взаимодействии с пользователем (нажатие, наведение мыши и т.п.). Достаточно создать 2 собственных стиля и указать нужный для каждой кнопки, не создавая при этом никаких дополнительных классов элементов управления.

Стили могут применяться как в конструкторе форм на этапе разработки, так и «на лету» в процессе выполнения программы.

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

4.3.   Логические координаты

В FMX все элементы графики (элементы управления, изображения, графические примитивы и т.п.) используют не физические (пикселы), а логические координаты. Это сделано для адаптации графического интерфейса под разные разрешения экранов при их одинаковых физических размерах. То есть размеры графических элементов будут одинаковыми на двух устройствах с диагональю экрана 3.5”, из которых одно имеет разрешение 320×480 точек, в то время как второе – 640×960 точек.

При необходимости, FMX позволяет использовать и физические координаты экрана.

4.4.   Расположение компонентов на различных устройствах

RAD Studio позволяет создавать различные конфигурации расположения компонентов для различных устройств (iPhone 3.5”, iPad, Android 10” Tablet, Android 5” Phone и др.), используя только конструктор форм, – без написания кода разработчиком. В процессе выполнения приложение само определяет устройство, на котором оно запущено, и расставляет компоненты в соответствии с нужной конфигурацией.

4.5.   Отладка в Windows

Еще одно преимущество кроссплатформенной среды разработки состоит в том, что для отладки не требуется каждый раз запускать приложение на устройстве Android или iOS. RAD Studio позволяет всю логику отладить в среде Windows, а потом уже проверить, как приложение запустится на самом устройстве.

5.    Недостатки среды разработки

5.1.   Некорректное отображение графических примитивов для Android и iOS

В процессе работы над проектом выяснилось, что библиотека FMX некорректно отрисовывает графические примитивы на мобильных устройствах Android и iOS. При этом на ОС Windows и MacOS отрисовка происходила корректно. Проблема, описанная здесь, на момент написания статьи не была решена Embarcadero. В качестве решения нами была использована библиотека FMXNativeDraw с открытым исходным кодом, позволяющая улучшить отрисовку графических примитивов.

5.2.   Ограничения при определении жестов

В FMX механизм распознавания жестов на мобильных устройствах также имеет ряд недостатков. На данный момент в нем «жестко» зашит определенный набор жестов, и у разработчика нет доступа к низкоуровневому управлению жестами для «точной» настройки. В связи с этим мы столкнулись со следующими проблемами:

  • Невозможность определения жеста панорамирования двумя пальцами.

В режиме редактирования профиля движение одним пальцем должно было перемещать вновь созданный элемент, а одновременное движение двумя пальцами – производить панорамирование всей фигуры. В итоге, функция панорамирования в режиме редактирования не была реализована.

  • Разделение жестов «Увеличение / уменьшение» («Zoom») и «Панорамирование» («Pan»).

При определении жеста «Zoom» с помощью двух пальцев, когда один палец во время движения был отпущен, в определении жеста «Pan» оставшимся пальцем возникали проблемы.

5.3.   Эмулятор

На момент написания статьи, работа с эмулятором iOS была невозможна. Это не позволило вести отладку для iOS до подключения реальных мобильных устройств.

6.    Рекомендации по разработке приложений в среде Embarcadero RAD Studio

6.1.   Подготовка к разработке под Android

Для разработки приложений под Android необходимо выполнить следующие действия:

  • Установить на ПК для разработки Embarcadero RAD Studio.
  • Установить библиотеки Android SDK – NDK и JDK (рекомендуется устанавливать из дистрибутива RAD Studio, чтобы не возникло проблем с совместимостью версий этих библиотек).
  • На Android-устройстве активировать режим разработчика и, при необходимости, установить драйверы. Также на устройстве нужно активировать режим «Разрешить отладку USB». После этого устройство появится в списке доступных в RAD Studio.

Подробное описание процесса настройки можно найти здесь

6.2.   Подготовка к разработке под iOS

Для развертывания и запуска приложений на Apple и iOS-устройствах необходимо выполнить более сложные манипуляции, чем в случае с Android:

  • Во-первых, необходим MacBook, подключенный к той же сети, что и ПК с установленной RAD Studio. К нему подключаются iOS устройства по USB-кабелю.
  • Во-вторых, на MacBook необходимо установить xCode последней версии.
  • В-третьих, на MacBook необходимо установить и настроить PAServer, поставляемый Embarcadero.

Общая схема подключения всех устройств выгляди следующим образом:

Это изображение имеет пустой атрибут alt; его имя файла - RAD_studio-1024x409.png

Подробное описание процесса настройки можно найти здесь и здесь.

К сожалению, на момент работы над проектом работа с эмулятором iOS не поддерживалась RAD Studio, поэтому приложение приходилось отлаживать на «живых» устройствах.

6.3.   Разделение кода на платформо-независимый и платформенно-зависимый

Хотя Embarcadero RAD Studio и предполагает использование единой кодовой базы для разработки кроссплатформенных приложений, на практике встречаются ситуации, в которых код для различных ОС будет отличаться.

Вот несколько примеров таких ситуаций, с которыми пришлось столкнуться при работе над проектом:

  • Пути хранения файлов.

В приложениях Android и iOS пути к каталогу, в котором хранятся данные приложения, имеют разные значения: “ /storage/emulated/0/Android/data/<application ID>/files” и “ /var/mobile/Applications/<application ID>/Documents”, соответственно для Android и iOS.

  • Расположение графических элементов.

Расположение элементов пользовательского интерфейса может быть разным в зависимости от платформы и форм-фактора экрана мобильного устройства. И хотя RAD Studio позволяет создавать различные конфигурации расположения элементов для различных устройств без изменения в коде, на практике может понадобиться написать собственный код для каждого типа устройств. Здесь нам как раз и приходит на помощь шаблон MVP (или подобные ему), позволяющий проектировать визуальное представление пользовательского интерфейса отдельно от логики приложения.

  • Использование платформенно-зависимых функций.

Пример – запуск браузера из приложения при нажатии на гиперссылку. Код запуска для каждой ОС будет абсолютно разным.

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

6.4.   Использование Deployment Manager

В RAD Studio существует инструмент Deployment Manager, помогающий разработчику разворачивать приложения на различных платформах. С помощью этого инструмента возможно добавлять в проект файлы (в том числе файлы настроек, базы данных, изображения и т.п.), которые должны быть перенесены на конечное устройство. Для каждого файла и целевой платформы указывается расположение и название файла на устройстве и признак перезаписи файла.

К сожалению, в версии RAD Studio 10.3.2, этот инструмент не работал должным образом для iOS и Windows. Корректно перенести все файлы получилось только для платформы Android. Поэтому, все необходимые для развертывания приложения файлы пришлось хранить в ресурсах приложения и «доставать» их оттуда по мере необходимости при запуске приложения. В принципе, такой метод является универсальным, и его можно использовать и в дальнейшем, когда ошибки в Deployment Manager будут исправлены в последующих версиях Rad Studio.

Заключение

В целом, для разработки кроссплатформенных приложений малой и средней сложности, к которым можно отнести и SW-Mobile, Embarcadero RAD Studio показал себя вполне приемлемым инструментом. Правда это не касается приложений, в которых используется сложная 2D и 3D графика, т.к. библиотека FMX не располагает пока достаточно развитыми для этого возможностями.

Следует добавить, что помимо возможностей, которые использовались в этом проекте, библиотеки Embarcadero содержат множество компонентов, позволяющих: работать с БД (локально и удаленно), обмениваться данными с большим количеством популярных облачных сервисов, использовать преимущество параллельного программирования для многоядерных процессоров и многое другое.

Комментарий технического руководителя проекта

Эдуард Марченко

Хотел бы дополнительно обратить внимание на следующие аспекты (по состоянию на 27.03.2020):

  1. Наличие специалистов:
  2. Крайне маленький пул соискателей на рынке труда, специализирующихся на разработке в среде Delphi. Программистов Delphi, занимающихся разработкой под мобильные устройства, не было найдено за 6 недель поиска.
  3. Специалисты в Delphi – опытные инженеры, которые давно работают с данной платформой на старых проектах. Молодых специалистов, которые бы только начинали свое профессиональное развитие и выбрали Delphi, на рынке труда не оказалось, что ставит под вопрос распространение самой технологии.
  • Технологическая специфика:
  • Большое количество информации и существующих компонентов и решений в любой сфере применения Delphi. Найти решение возникающих проблем особого труда не составляло.
  • Уникальность решения для актуальных мобильных платформ – технология, позволяющая компилировать один исходный код под разные мобильные платформы: Android и iOS. При этом настройка/отладка не вызывает особых сложностей.
  • Маленький сегмент по востребованности в целом. Слабо можно представить варианты развития решений, реализованных в среде Delphi. В большинстве своем инструменты в альтернативных языках более новые/быстрые/продуманные, легче масштабируются, конфигурируются и разрабатываются.
  • Скорость разработки:
  • На мой взгляд писать одно и тоже приложение на .Net (к примеру) в сравнении с Delphi будет в целом на 40-50% быстрее за счет существующих фреймворков и возможностей IDE. Но это решение не будет кроссплатформенным и в некоторых случаях может быть медленнее, чем на Delphi.

7. Cсылки

  • Embarcadero RAD Studio 10.3.2:

https://www.embarcadero.com/ru/products/rad-studio

  • Библиотека FMX

https://www.embarcadero.com/ru/products/rad-studio/fm-application-platform

  • Xcode – Apple Developer

https://developer.apple.com/xcode/

  • PAServer, the Platform Assistant Server Application – RAD Studio

http://docwiki.embarcadero.com/RADStudio/Rio/en/PAServer,_the_Platform_Assistant_Server_Application

  • ШаблонпроектированияModel-View-Presenter (MVP)

https://ru.wikipedia.org/wiki/Model-View-Presenter

  • Логические координаты

http://fire-monkey.ru/topic/ 24-получаем-разрешение-экрана-устройства-логические-и-физические-размеры-экрана-в-firemonkey/

  • Библиотека FMXNativeDraw

https://github.com/OneChen/FMXNativeDraw/

https://www.cnblogs.com/onechen/p/6350096.html

  • Какнастроить Android и RAD Studio (Delphi, C++ Builder)

https://habr.com/ru/company/delphi/blog/253929/

  • Какнастроить Mac OS X, iOS-симулятори RAD Studio (Delphi, C++ Builder)

https://habr.com/ru/company/delphi/blog/255721/

  • Как настроить iOS-устройство и RAD Studio (Delphi, C++ Builder)

https://habr.com/ru/company/delphi/blog/265313/

  • DeploymentManager – RAD Studio

http://docwiki.embarcadero.com/RADStudio/Rio/en/Deployment_Manager