Sailfish OS — это мобильная платформа, основанная на ядре Linux. Прочитать о ней можно на официальном сайте или в одном из обзоров платформы в сети. Например, один из них был опубликован на GeekTimes. В данной статье я хотел бы затронуть сам процесс разработки приложений для Sailfish OS, рассказать о том как начать программировать под данную платформу, а также поделиться некоторыми особенностями разработки.



Для написания приложений для платформы Sailfish OS используется язык С++ и библиотеки Qt, а также язык QML для описания графического интерфейса приложений. Поэтому, если вы уже имеете опыт написания приложений с использованием Qt и QML, разработка для Sailfish OS не вызовет у вас затруднений. Кроме того, Sailfish OS позволяет разрабатывать нативные приложения на языке Python. Однако, данная тема выходит за рамки данной статьи и не будет в ней описана (подробнее про это можно почитать, например, тут).

Как и для других мобильных платформ, разработка для Sailfish OS ведется с использованием SDK, предоставляемого создателями платформы. SailfishOS SDK включает в себя:
  • QtCreator — IDE, в которой собственно и предлагается вести весь процесс разработки.
  • Mer Build Engine, который необходим для сборки приложений.
  • Эмулятор Sailfish OS.
  • Примеры, руководства и документация к API.


Mer Build Engine и эмулятор платформы поставляются в виде образов виртуальных машин для VirtualBox. Однако, сам VirtualBox в состав SailfishOS SDK не входит. Поэтому, перед непосредственной установкой SDK, необходимо вначале установить VirtualBox версии не ниже чем 4.1.18. Кроме того, при работе в Windows, перед установкой SDK так же необходимо установить пакет Windows Microsoft Visual C++ 2010 redistributable (x86).

Сам SailfishOS SDK доступен для Linux, Windows и Max OS X, его можно скачать тут. SDK поставляется в виде графического инсталлятора, поэтому установка SDK не вызывает никаких трудностей. Однако, при установке вас спросят альтернативный путь для проектов. Этот параметр необходим для того, чтобы виртуальная машина с Mer Build Engine имела доступ к исходным кодам вашего проекта. По умолчанию это ваша домашняя директория. В последствии данный параметр можно изменить в настройках Qt Creator.

После установки SDK вы полностью готовы к разработке приложений для платформы Sailfish OS.

Создание Hello World! приложения так же не вызывает каких либо трудностей. Просто запускаем Qt Creator, нажимаем на кнопку «Новый проект» на главном экране (или через меню Файл -> Создать файл или проект...) и настраиваем проект:
  1. Выбираем в качестве типа приложения SailfishOS Qt Quick Application:

  2. Указываем название и директорию, в которой следует сохранить данные проекта (помните, что проект следует сохранять только в вашей домашней директории или по альтернативному путю для проектов, указанному при установке либо в настройках Qt Creator, поскольку для сборки проекта Mer Build Engine должен иметь доступ к нему):

  3. Выбираем необходимые комплекты, которые будет использоваться для сборки приложения.

    Всего, как видно из скриншота выше, доступно два комплекта:
    • MerSDK-SailfishOS-armv7hl — для устройств на базе архитектуры ARM (например, смартфон Jolla),
    • MerSDK-SailfishOS-i486 — для устройств на базе архитектуры Intel.

    Здесь также стоит отметить, что эмулятор работает только с комплектом i486. Поэтому, если вы планируете тестировать свое приложение в эмуляторе, выбирать на данном шаге нужно второй комплект.
  4. Указываем дополнительную информацию о проекте:

  5. И всё, SDK сгенерировала нам Hello World проект.


Автоматически сгенерированный проект немного сложнее, чем стандартный одностраничный Hello World. Это позволяет сразу же раскрыть некоторые особенности Sailfish OS. На главное странице отображается стандартное приветствие. Однако, если на этом экране выполнить жест swipe вниз (стандартное управление для данной платформы), вверху появится меню, позволяющее перейти на вторую страницу приложения, где расположен список элементов.

Ниже приведены скриншоты Hello World приложения:


Теперь давайте взглянем на код. Здесь все стандартно для QML приложений и поэтому знакомо любому, кто когда-либо писал приложения используя данный язык. Единственный .cpp файл описывает, какой .qml следует отобразить при запуске приложения. В нашем случае это HelloWorld.qml. Кроме того, в проекте содержатся 2 страницы, а также Cover Page, которая определяет вид приложения на домашнем экране Sailfish OS, который отображает миниатюры всех запущенных приложений и позволяет переключаться между ними, либо закрывать их.

HelloWorld.qml описывает главное окно приложения. В нем указывается начальная страница приложения и Cover Page, а также дополнительные параметры приложения (в нашем случае это разрешенные ориентации экрана и ориентация экрана, которая будет использована по умолчанию):
ApplicationWindow
{
    initialPage: Component { FirstPage { } }
    cover: Qt.resolvedUrl("cover/CoverPage.qml")
    allowedOrientations: Orientation.All
    _defaultPageOrientations: Orientation.All
}


FirstPage.qml описывает начальную страницу приложения. Здесь все стандартно для QML приложений, однако есть некоторая особенность Sailfish OS, на которую следует обратить внимание:
//...
SilicaFlickable {
    anchors.fill: parent

    PullDownMenu {
        MenuItem {
            text: qsTr("Показать вторую страницу")
            onClicked: pageStack.push(Qt.resolvedUrl("SecondPage.qml"))
        }
    }
//...

Здесь используется элемент SilicaFlickable, который, во первых, позволяет сделать контент внутри самого элемента прокручиваемым, в случае если он полностью не влезает внутрь элемента. А во вторых, позволяет использовать PullDownMenu — то самое меню приложения, открываемое свайпом вниз.

Кроме того, хотелось бы так же обратить внимание на CoverPage.qml, который описывает Cover Page приложения. Он содержит следующий элемент:
CoverActionList {
    id: coverAction

    CoverAction {
        iconSource: "image://theme/icon-cover-next"
    }

    CoverAction {
        iconSource: "image://theme/icon-cover-pause"
    }
}


Данный элемент позволяет помимо вывода информации также предоставить пользователю возможность управления приложением непосредственно с его миниатюры на домашнем экране.

Для запуска приложения в эмуляторе необходимо в боковом меню выбрать комплект i486, нужный тип сборки (релиз или отладка) и способ установки Deploy as RPM Package:


После этого просто нажать на зеленую стрелочку в боковом меню. Это действие соберет приложение, запустит эмулятор, установит и запустит ваше приложение на эмуляторе.

Кроме того, можно просто запустить эмулятор нажав на кнопку в боковом меню. Это позволит вам просто исследовать Sailfish OS не имея устройства на данной платформе.

На этом все, в будущем я постараюсь более подробно описать некоторые особенности разработки под платформу Sailfish OS.

Автор статьи: Денис Лаурэ

UPD: Большое спасибо kirikch за замечания и комментарии, они были учтены в обновленном тексте статьи.
Поделиться с друзьями
-->

Комментарии (28)


  1. Per_Ardua
    12.07.2016 19:47
    +1

    Многие уже слышали про то, что система выиграла конкурс на испортозамещение мобильных ОС в России. Но у меня вопрос: насколько, на рынке, востребованы специалисты, разрабатывающие под Sailfish OS на данный момент, а не в перспективе?


    1. GoAlexander
      13.07.2016 23:27

      Ну, к примеру, в конце месяца будет летняя школа от ОМП: university.innopolis.ru/events/letniy-vorkshop-sailfish-os
      Как я понял, там еще и взять на работу могут :)))

      В общем, насколько я знаю реально специалисты нужны только в самой Jolla (где очень клево, но и попасть очень сложно) и в ОМП. Из компаний-разработчиков под Sailfish OS видел только AIDA64


      1. FRUCT
        13.07.2016 23:32
        +1

        На самом деле это не так, например, к осени разработчики будут нужны во FRUCT лабораториях, разработчики нужны в Индии и можно еще поискать. Но конечно пока масштабы не как у Android, экосистема только формируется, но и то что уже есть, выглядит очень неплохо.


  1. Lockal
    12.07.2016 20:41

    Боюсь, что ценник в 3540$ на одного разработчика сильно снизит желание производителей проприетарных приложений.


    1. kirikch
      12.07.2016 22:34
      +2

      Бояться, конечно, можно. Но лицензия LGPL позволяет это делать бесплатно.


      1. kirikch
        12.07.2016 23:00
        +1

        Подробности про лицензирование Qt: http://www.qt.io/licensing-comparison/


    1. abagnale
      15.07.2016 14:25

      Это стоимость лицензии по подписке за год. Бессрочная лицензия дороже на старте, но, разумеется, выгоднее подписочной от двух лет и более.
      К тому же, подписочная лицензия доступна только для десктопных приложений. Для разработки под embedded возможна только бессрочная.
      Ну или GPL/LGPL, само-собой.


  1. kirikch
    13.07.2016 00:02
    +1

    Позволю себе несколько замечаний, которые стоит учесть в статье.

    Для написания приложений для платформы Sailfish OS используется язык С++ и библиотеки Qt, а также язык QML для описания графического интерфейса приложений.

    Можно добавить, что QML подразумевает и JavaScript для написания легковесной логики.

    Операционная система Mer (на самом деле это всего лишь прослойка для мобильных систем, основанных на Linux ядре, но для простоты мы опишем Mer как ОС), которая необходима для сборки приложений.

    По-моему, произошло слияние понятий Mer и Mer Build Engine.

    установка SDK не вызывает никаких трудностей.

    Есть один момент, который было бы полезно прояснить.
    При установке будет запрошен альтернативный путь для размещения проектов.
    И здесь нужно рассказать, какие директории доступны для виртуальной машины MerSDK.

    в проекте содержаться 2 страницы

    содержатся

    Cover Page, которая определяет вид приложения в диспетчере приложений Sailfish OS

    Не диспетчере приложений, а домашнем экране.


    1. Disasm
      13.07.2016 09:48

      > При установке будет запрошен альтернативный путь для размещения проектов.
      Он вообще влияет на что-нибудь? После установки Qt Creator и знать не знает ничего про какой-то альтернативный путь.


      1. kirikch
        13.07.2016 10:52

        Влияет на то, где проекты располагаться могут. Это настройка не для QtCreator, а для Mer Build Engine.


    1. FRUCT
      13.07.2016 23:41
      +1

      Большое спасибо за замечания. Обновил статью в соответствии с ними.


  1. QtRoS
    13.07.2016 08:32

    Что по версиям там сейчас? Так же Qt Quick 1, далеко не последний Qt Creator и т.д.?
    Qt очень далеко продвинулась с того момента…


    1. kirikch
      13.07.2016 09:01
      +2

      Qt 5.2, QtQuick 2.2, Qt Creator 3.5.0.

      Qt очень далеко продвинулась с того момента

      Какого момента?


      1. wholeman
        13.07.2016 10:05

        Видимо, QtRoS имел в виду времена MeeGo. Однако, и с Qt 5.2 уже пять минорных версий прошло. И есть Quick Controls, но здесь уже нагородили альтернативные виджеты, ЕМНИП проприетарные. А на нативные виджеты и вовсе забили, теперь без javascriptа приложение и не напишешь.


        1. neochapay
          13.07.2016 10:27
          +2

          >ЕМНИП проприетарные

          Открыли все. Из закрытых компонентов остался, по моему QML Compoler только

          >А на нативные виджеты и вовсе забили

          нет, там всё нормально. Всё работает и совершенствуется.

          >теперь без javascriptа приложение и не напишешь.

          Ну… это вы загнули…


          1. wholeman
            13.07.2016 11:25

            Открыли все. Из закрытых компонентов остался, по моему QML Compoler только
            Это замечательно. QML компайлер, вроде, DigiaQt Group, а не Jolla.
            нет, там всё нормально. Всё работает и совершенствуется.
            Они таки запилили QStyle, чтобы виджеты в Sailfish выглядели и работали, как Silica, хотя бы на уровне Symbian и Fremantle?
            Ну… это вы загнули…
            Да, это была гипербола. Если постараться, конечно, можно. Но часто это заметно усложняет приложение.


            1. neochapay
              13.07.2016 13:28

              Если вы говорите о Silica то да оно закрыто.


              1. wholeman
                13.07.2016 16:05

                Да, именно его я имел в виду под альтернативными виджетами.


          1. RPG18
            13.07.2016 11:44

            Если вы имеете ввиду Qt Quick Compiler, то он открыт(Проект Qt меняет лицензию и открывает код некоторых модулей)


            1. abagnale
              15.07.2016 14:28

              Ещё не открыт. Заявлено с версии 5.8.
              А то, что открыто с версии 5.7, доступно только в GPL, в LGPL нет (http://blog.qt.io/blog/2016/06/16/qt-5-7-released/).


      1. neochapay
        13.07.2016 10:17

        С момента 5.2 :)
        Например я столкнулся с тем что QJsonObject работает по другому.
        Такая вот конструкция не сработает:
        QJsonObject data
        {
        {"_uuid", this->m_uuid},
        {"_uid", this->m_username_id},
        {"_csrftoken", «Set-Cookie: csrftoken=»+this->m_token},
        {«caption_text», captionText},
        };

        Но, это всё же придирки и в большей части да, ни чего не поменялось.


      1. QtRoS
        13.07.2016 13:53

        Да вроде полгода (+ -) назад смотрел на SDK и там был import QtQuick 1.x, чему я безумно расстроился…


        1. kirikch
          13.07.2016 18:34

          Это был какой-то другой SDK.


  1. prudis
    13.07.2016 09:58

    Сколько уже было этих разных ОС, где они?


    1. wholeman
      13.07.2016 11:11
      +1

      ОС приходят и уходят. Когда появились iOS и Android, балом правили Windows Mobile и Symbian. Нынешние короли тоже не будут вечны. Впрочем, не думаю, что их сменят Sailfish или Tizen.


      1. prudis
        13.07.2016 11:20

        Все верно, только за всеми этими стояли большие компании. Nokia провалилась — Symbian исчез, Остальные как-то живут за счет того что ими занимаются большие компании. Начинать новую ОС можно только в надежде понравиться какому-то крупному игроку и быть проданным им. Кто это может быть? Наверное Amazon, может Samsung, кто еще?


        1. RPG18
          13.07.2016 11:49

          Nokia провалилась — Symbian исчез

          Тут наверное правильно говорить: Nokia провалилась — Maemo/MeeGo исчез.


          1. kirikch
            13.07.2016 11:56
            +1

            Тут, наверное, правильно говорить: «нокию слили».