International conference of developers
and users of free / open source software

Rhodes, фреймворк для разработки мобильных приложений

Денис Бакунович, Минск, Беларусь, http://atzkey.org, bakunovitch@gmail.com

Rhodes – основанный на Ruby фреймворк для быстрой разработки программ для мобильных устройств, позволяющий, в отличие от мобильных веб-приложений, получить доступ к локальным данным, периферии (камере, GPS) и инструментам (ПИМ) платформы. Единожды написанный код компилируется в нативные приложения для всех основных мобильных платформ (iPhone, Windows Mobile, BlackBerry, Symbian и Android). В тесной связи с Rhodes находится Rhosync, веб-сервер, служащий фасадом для веб-сервисов и местом хранения и синхронизации пользовательских данных. Немного поодаль от него RhoHub, сервис, позволяющий собирать приложения на серверах Rhomobile и избавляющий разработчиков от необходимости настраивать рабочее окружение и устанавливать SDK для целевых платформ. Разработчиком упомянутых продуктов является компания Rhomobile1.

Rhomobile

Возникшая в конце 2008 года компания представила два своих проекта с открытым исходным кодом: Rhodes и Rhosync. Оба проекта распространяются под двойной лицензией: коммерческой и GPLv3 (для некоммерческого использования).

Rhodes

Это основанный на Ruby MVC-фреймворк, предназначенный для быстрой разработки мобильных приложений. Для каждой платформы, поддерживаемой Rhodes, была написана своя реализация Ruby (точнее, для всех, кроме Symbian с уже готовой реализацией Ruby).
Разработка приложения заключается в написании контроллеров на Ruby, HTML-шаблонов на erb и раскладывании всего этого в правильные директории.
Архитектуру фреймворка легко представить в следующей диаграмме:

Данные моделей на устройстве хранятся в базах SQLite или HSQLDB в виде кортежей (объект, ключ, значение). Объектно-реляционное отображение осуществляется с помощью специально написанного модуля Rhom. Опционально модели могут синхронизироваться с сервером Rhosync.

Ключевые достоинства Rhodes:

  • Скорость и простота разработки. Многие идеи удачно позаимствованы из Ruby on Rails.
  • Портируемость. Единожды написанный код компилируется под все основные современные мобильные платформы: iPhone, Windows Mobile, BlackBerry, Symbian и Android.
  • Доступ к ресурсам устройства. Возможность взаимодействия с локальными данными, периферией (GPS-модулем, камерой) и инструментами (ПИМ, меню приложения) целевой платформы.
  • Синхронизация. Интеграция с Rhosync позволяет приложению работать с данными удаленных веб-сервисов в режиме офлайн.

Rhosync

Веб-сервер для хранения и синхронизации пользовательских данных, приятное необязательное дополнение для программ, написанных с помощью Rhodes. Rhosync выступает связующим звеном между REST и SOAP сервисами и клиентскими Rhodes-приложениями, позволяя работать с веб-сервисами без постоянного подключения к Интернет. Добавление нового источника данных требует от разработчика написания всего лишь одного адаптера – класса, реализующего предопределенный набор методов для работы с веб-сервисом:

  • login, logoff – открытие и закрытие сессии работы с источником данных;
  • query – метод для получения и обработки данных сервиса, принимает условия поиска как опциональный аргумент;
  • sync – метод для сохранения данных, полученных с помощью query, и синхронизации их с устройством, update;
  • create, update, delete – методы для создания, изменения и удаления данных сервиса.

Rho* 2.0

Совсем недавно вышел бета-релиз новой версии фреймворка. Очень сильно преобразился Rhosync, став значительно проще – до версии 2.0 Rhosync был приложением, написанным на Ruby on Rails, теперь это Sinatra-приложение, использующее Redis в качестве базы данных. Значительно упростилась конфигурация адаптеров – если раньше приходилось производить конфигурацию через неудобный веб-интерфейс, то теперь эта задача сводится к дописыванию пары строк в конфигурационный .yaml-файл. Данные адаптеров, хранимые Rhosync и особо не меняющиеся от пользователя к пользователю, стало возможным разделять между пользователями, избегая тем самым бесполезной избыточности. Появилась возможность синхронизации передачей дампа базы данных пользовательскому приложению.

Материалы к докладу